calling a function for a number of indexes in a matrix

1 view (last 30 days)
Hi,
I have an image [N M], and a matrix of [N-r M-c]. I want to call a certain function on the indexes where image(i,j) < threshold
I'm new to MATLAB so my initial approach was
for i = 1 : height
for j = 1 : width
if (image(i, j) < thresh)
f([i j height width], c);
c = mod(c, 8) + 1;
end
end
end
is there an easier way to do it automatically without looping over the matrix? (having 'c' loop on values 1 to 8 for each call to the function?)
  2 Comments
Greg
Greg on 3 Nov 2012
Edited: Greg on 3 Nov 2012
my bad that was supposed to be
f([i j height width], c)
f is the function i need to call, it takes two parameters, the first is a vector of the coords from the image (x,y) and the height and width of a specific pattern which don't not change in this loop.
c is the second parameter i send to the function, it is a natural number in the range [1,8] should increment by 1 upon every call to the function and reset to 1 after reaching 8

Sign in to comment.

Answers (1)

Jakob Sørensen
Jakob Sørensen on 3 Nov 2012
Can't you just get a logical of where the matrix is above/below the thresh? And then multiply it with your matrix. And then do the function on that matrix. Like this:
logicals = image < thresh;
image_new = image.*logcals;
f(image, c);
This might need some adjustment, depending on you function. If it contains plus/minus, this probably won't work.
  1 Comment
Greg
Greg on 3 Nov 2012
Edited: Greg on 3 Nov 2012
the function f doesn't care about the value within the image_new, it only needs the x,y of the indexes so i can simply apply
logicals = image < thresh;
however 'f' is supposed to take the following parameters
[image_new_x image_new_y height width], c
where height and width are constants and c alters between 1 and 8, how can i do that?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!