Ограничивающий прямоугольник с использованием MATLAB для изображения
Я пытаюсь нарисовать ограничивающую рамку вокруг белого пятна на изображении ниже:
Мне это понравилось:
bw = imread('box.jpg');
bw=im2bw(bw);
imshow(bw)
L = bwlabel(bw);
s = regionprops(L, 'Area', 'BoundingBox');
s(1);
area_values = [s.Area];
idx = find((100 <= area_values) & (area_values <= 1000)); % list of all the objects
%whose area is between 100 and 1000
bw2 = ismember(L, idx); %construct a binary image containing all the objects whose
%area is between 100 and 1000 by passing L and idx to ismember.
imshow(bw2)
Выход bw2, до сих пор является:
Может ли кто-нибудь один сказать мне, как нарисовать ограничивающую рамку вокруг этого пятна(белого)?
Обновление Ответ ваджи на самом деле точно решил проблему.
4 ответа:
Пседуо -
- выбрать наибольшее значение, по величине х, наименьшее х, наименьшее y С в BLOB. То есть точки на капле. Это ваши координаты, которые вы можете использовать для построения ограничивающего прямоугольника.
Предполагая, что верхний левый угол изображения равен (0,0)
(smallestX,smallestY)-----------------(largestX,smallestY) | | | | | | | | (smallestX,largestY)------------------(largestX,largestY)
И для нахождения минимальных / максимальных значений и индексов.
[r,c]=find(img==min(min(img))) [r,c]=find(img==max(max(img)))
R, c представляют строку и столбец в матрице img.
- я отметил точки на вашем изображении, которые вы можете использовать для создания границы коробка.
- увеличенное изображение, чтобы получить лучший обзор.
Как 20 000-й зритель этого вопроса, я отвечу на то,что, как мне кажется, спрашивает спрашивающий.
Чтобы отобразить прямоугольник на странице, вам просто нужно правильно интерпретировать ограничивающую рамку для фигуры. Вы уже вычислили это в
s(idx).BoundingBox
Таким образом, добавьте эти две строки в свой сценарий:
bb = s(idx).BoundingBox; rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');
И вы получите: