Getting Rid of Nested For Loops

1 Ansicht (letzte 30 Tage)
Jacob Mevorach
Jacob Mevorach am 30 Mär. 2017
Kommentiert: Jacob Mevorach am 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 Kommentare
Matt J
Matt J am 30 Mär. 2017
Are you sure you don't mean
max_image = max(cropped_image(:));
Jacob Mevorach
Jacob Mevorach am 31 Mär. 2017
You're right I do! Thanks for letting me know.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 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 Kommentare
Matt J
Matt J am 5 Apr. 2017
Bearbeitet: Matt J am 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 am 5 Apr. 2017
Thank you! This also worked!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Numeric Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by