Ограничивающий прямоугольник с использованием 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 3

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');

И вы получите:

Введите описание изображения здесь

Вы пробовали regionprops из Image Toolbox?

Я думаю, что вы можете попробовать использовать bwboundries

boundaries = bwboundaries(blob);

numberOfBoundaries = size(boundaries);

for k = 1 : numberOfBoundaries

    thisBoundary = boundaries{k};

    plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);

end