Getting Rid of Nested For Loops

조회 수: 1 (최근 30일)
Jacob Mevorach
Jacob Mevorach 2017년 3월 30일
댓글: Jacob Mevorach 2017년 4월 5일
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
Matt J
Matt J 2017년 3월 30일
Are you sure you don't mean
max_image = max(cropped_image(:));
Jacob Mevorach
Jacob Mevorach 2017년 3월 31일
You're right I do! Thanks for letting me know.

댓글을 달려면 로그인하십시오.

채택된 답변

Jan
Jan 2017년 4월 3일
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
Matt J
Matt J 2017년 4월 5일
편집: Matt J 2017년 4월 5일
The above should simplify to
mask(y_1:y_2-1, x_1:x_2-1) = new_image;
Jacob Mevorach
Jacob Mevorach 2017년 4월 5일
Thank you! This also worked!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by