Getting Rid of Nested For Loops

2 views (last 30 days)
Jacob Mevorach
Jacob Mevorach on 30 Mar 2017
Commented: Jacob Mevorach on 5 Apr 2017
So I have a bunch of nested for loops in the following code but I feel like there has to be a faster and better way to eliminate these things so it will run faster. If anyone had some insight into how I might do this I would be greatly appreciative.
function [mask] = bbox_analysis(bboxes, mask, blackwhiteframe, th, fractional_th)
% Cycle through every bbox in the frame
bbox_dim = size(bboxes);
for b = 1:bbox_dim(1)
x_1 = bboxes(b, 1);
y_1 = bboxes(b, 2);
x_2 = x_1 + bboxes(b, 3);
y_2 = y_1 + bboxes(b, 4);
cropped_image = imcrop(blackwhiteframe, [x_1, y_1, bboxes(b, 3), bboxes(b, 4)]); % Section of frame captured in bbox
max_image = max(cropped_image);
threshold = max(th/255, max_image*fractional_th);
new_image = (cropped_image > threshold);
for i = x_1:x_2-1
for j = y_1:y_2-1
mask(j, i) = new_image(j+1-y_1, i+1-x_1);
end
end
end
end
  2 Comments
Matt J
Matt J on 30 Mar 2017
Are you sure you don't mean
max_image = max(cropped_image(:));
Jacob Mevorach
Jacob Mevorach on 31 Mar 2017
You're right I do! Thanks for letting me know.

Sign in to comment.

Accepted Answer

Jan
Jan on 3 Apr 2017
Replace
for i = x_1:x_2-1
for j = y_1:y_2-1
mask(j, i) = new_image(j+1-y_1, i+1-x_1);
end
end
by
mask(y_1:y_2-1, x_1:x_2-1) = new_image((y_1+1-y_1):(y_2-1+1-y_1), (x_1+1-x_1):(x_2-1+1-x_1));
  3 Comments
Matt J
Matt J on 5 Apr 2017
Edited: Matt J on 5 Apr 2017
The above should simplify to
mask(y_1:y_2-1, x_1:x_2-1) = new_image;
Jacob Mevorach
Jacob Mevorach on 5 Apr 2017
Thank you! This also worked!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!