6

大きな画像で識別したいくつかの粒子があり、各粒子の小さな画像に解析する必要があります。regionprops 'BoundingBox' 関数を使用しましたが、まだ成功していません。BoundingBox を使用して画像の長方形のサブイメージを作成するにはどうすればよいですか? BoundingBox を使用して元の画像に四角形を描画できますが、BoundingBox によって返されるパラメーターはピクセル次元 (x、y、幅、高さ)、(x1、y1、x2、y2) などではないようです。境界ボックスが返されることを期待します。誰でも簡単に理解できるように、coins.png を使用したサンプル コードをいくつか作成しました。これで私を助けてもらえますか?ありがとう!

figure(1);
I = imread('coins.png');
bw = im2bw(I, graythresh(I));
bw2 = imfill(bw,'holes');
imshow(bw2);


figure(2);
L = bwlabel(bw2);
imshow(label2rgb(L, @jet, [.7 .7 .7]))

figure(3);
imshow(I);
s = regionprops(L, 'BoundingBox');
rectangle('Position', s(1).BoundingBox);
4

2 に答える 2

13

REGIONPROPSのドキュメントによると:

BoundingBox[ul_corner width]、ここで:

  • ul_corner : フォーム内に[x y z ...]あり、境界ボックスの左上隅を指定します

  • width : フォーム内に[x_width y_width ...]あり、各次元に沿った境界ボックスの幅を指定します

IMCROP関数をimcrop(I, rect)次の場所で使用できるようになりました。

rect[xmin ymin width height]は、トリミングする四角形のサイズと位置を指定する 4 要素の位置ベクトルです。

したがって:

s = regionprops(L, 'BoundingBox');

subImage = imcrop(I, s(1).BoundingBox);
imshow(subImage)
于 2011-10-30T07:25:17.750 に答える
7

regionprops によって返されるパラメーターは[y,x,width,height]行列座標です ( 「予期しない Matlab」も参照してください。

したがって、長方形を抽出するには、次のように記述します。

subImage = I(round(s(1).BoundingBox(2):s(1).BoundingBox(2)+s(1).BoundingBox(4)),...
       round(s(1).BoundingBox(1):s(1).BoundingBox(1)+s(1).BoundingBox(3)));
于 2011-10-29T17:18:46.540 に答える