3

下の画像の白いブロブの周りにバウンディングボックスを描画しようとしています。

ここに画像の説明を入力してください

私はこれが好きでした:

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は次のとおりです。 ここに画像の説明を入力してください

誰かがこのブロブ(白)の周りにバウンディングボックスを描く方法を教えてもらえますか?

更新 Wajihの答えは実際に問題を正確に解決しました。

4

4 に答える 4

3

この質問の 20,000 人目の視聴者として、質問者が実際に尋ねていると思うことに答えます。

ページに四角形をレンダリングするには、形状の境界ボックスを適切に解釈する必要があります。あなたはすでにこれを計算しましたs(idx).BoundingBox

したがって、次の 2 行をスクリプトに追加します。

bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');

そしてあなたは得るでしょう:

ここに画像の説明を入力

于 2016-08-10T13:37:28.447 に答える
3

擬似 -

  • ブロブ内で最大の y、最大の x、最小の x、最小の y を選択します。つまり、ブロブ上のポイントです。これらは、バウンディング ボックスの作成に使用できる座標です。

画像の左上を (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 行列の行と列を表します。

  • 境界ボックスの作成に使用できる画像上のポイントをマークしました。
  • 画像を拡大して見やすくしました。 マクレッド ズーム
于 2012-04-13T11:42:19.430 に答える
2

Image Toolbox の regionprops を試しましたか?

于 2012-06-21T16:58:00.843 に答える
0

bwboundriesを試すことができると思います

boundaries = bwboundaries(blob);

numberOfBoundaries = size(boundaries);

for k = 1 : numberOfBoundaries

    thisBoundary = boundaries{k};

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

end
于 2013-02-10T16:39:49.250 に答える