MATLAB Answers

0

blockproc applied to ROI images

Asked by Adrian Herrera on 14 Oct 2019
Latest activity Answered by Rik
on 14 Oct 2019
It is possible to get the global possition (while applying the filter) of a block while using the blockproc funtion?
Im = Frames(:,:,t);
M = imcomplement(Mask(:,:,t));
fun = @(block_struct) PeakFinder(block_struct.data);
B = blockproc(Im,[200 200],fun);
Here Im is my original image and M is the mask (ROI), Peak finder is the following function:
function F = PeakFinder (Im)
g = evalin('base','M');
f = @ SubPeakFinder;
F = roifilt2(Im,g,f);
end
I want to apply the filter "SubPeakFinder" to Im only in the ROI, but right now (above code) g loads the entire global ROI, and I haven't figured it out a way to select the part that corresponds to the block that it is being applied.
Thanks,

  0 Comments

Sign in to comment.

1 Answer

Rik
Answer by Rik
on 14 Oct 2019

Using a nested function will allow you to share variables without having to resort to evalin. As for your actual problem: you could switch to cellfun, or set the values that are false in your ROI to NaN and adapt your function accordingly. Another option is to use nested functions to share variables, and use an index array.
function B=foo
IM=rand(200,200);
Mask=rand(size(IM))<0.2;
indexArray=reshape(1:numel(IM),size(IM));
fun = @(block_struct) bar(block_struct.data);
B = blockproc(indexArray,[20 20],fun);
function out=bar(ind)
partIM=IM(ind);
partMask=Mask(ind);
%do something
out=max(partIM(partMask));
end
end

  0 Comments

Sign in to comment.