How to use IF with @(block_struct) function

3 ビュー (過去 30 日間)
Saud Alfalasi
Saud Alfalasi 2020 年 11 月 22 日
編集済み: Saud Alfalasi 2020 年 11 月 24 日
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