How to use IF with @(block_struct) function

11 次查看(过去 30 天)
fun2 = @(block_struct) ...
if block_struct.data < 100
std2(block_struct.data) * (block_struct.data));
end
Doesnt work.
I actually want to manipulate individual elements of my block
blocks made of 8x8 values ranging from 0-255
  2 个评论
Geoff Hayes
Geoff Hayes 2020-11-22
Saud - can you show us what the block_struct looks like with respect to attributes/properties? Presumably it has a data field. It isn't clear to me why you are doing
fun2 = @(block_struct) ...
where block_struct is the input to some function. Or are you hoping that all of the code
fun2 = @(block_struct) ...
if block_struct.data < 100
std2(block_struct.data) * ones(size(block_struct.data));
end
is an anonymous function? If so, then I don't think that the above is valid...
Saud Alfalasi
Saud Alfalasi 2020-11-22
Hi Geoff
blockyImageR = blockproc(redChannel, blockSize, fun);
blockyImageG = blockproc(greenChannel, blockSize, fun);
blockyImageB = blockproc(blueChannel, blockSize, fun);
blockyImageR(1)
blockyImageG(1)
blockyImageB(1)
rgbImage2 = cat(3, blockyImageR, blockyImageG, blockyImageB);
imshow(rgbImage2)
I'm trying to create a method of LSB insertation based on a sequece to do with individual blocks.
Just as a test I'm trying to only change values of numbers in my block according to the values.
the data field is is part of the array with is a 9x9x1 block
I would also like to try and pinpoint the minddle value of my block (coordinates 2,2) and do a quoteince differnce betwen it and the surrounding values.
Ideally what I want to do is not only change values in blocks but also manage the sequence of movement from block to block - example follwing some kind of sequence which results in going from block1 > block 7 > block 27

请先登录,再进行评论。

采纳的回答

Athul Prakash
Athul Prakash 2020-11-24
Hi Saud,
Since blockproc uses anonymous functions, you may save your multi-line function into a script, say myFunc.m and then pass @myFunc to your blockproc call.
You can find block_struct structure described in the following doc (under More About section): 'blockproc' Documentation.
You may work out a way to manage the sequence artificially using some of those fields. For example, using block_struct.location to skip processing the 2nd block:
function out = myFunc(block_struct) % size would be 100x100
if(block_struct.location(2)==101)
% skipping the 2nd block.
out = block_struct.data;
else
% code for processing every other element
end
end
Hope it helps!
  3 个评论
Athul Prakash
Athul Prakash 2020-11-24
Glad to help. Have you considered accepting this answer? On this platform, 'Accepting' is considered the highest form of validation for any answer. In addition to expressing the Questioner's satisfaction/gratitude, Accepting also makes an answer more discoverable to the rest of the community browsing this platform.
Not to blow my own trumpet though ;).
Cheers!
Saud Alfalasi
Saud Alfalasi 2020-11-24
编辑:Saud Alfalasi 2020-11-24
Blow away, you gave great help. Answer has been accepted. May I ask if you're contactable in any way? I could do with some guidance
Saud

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by