0

画像を 3 つの部分に分割し、それぞれの重心を元の画像に表示したいのですが、blkproc を使用して画像を [1 3] グリッドに分割しましたが、重心を表示できません。ここに私が書いたコードがあります、

i=imread('F:\line3.jpg');

i2=rgb2gray(i);

bw=im2bw(i2);

imshow(bw)

fun=@(x) regionprops(x,'centroid');

b=blkproc(bw,[1 3],fun);

しかし、重心を表示したり、その値を取得したりすることはできません。どんな助けでも大歓迎です。

4

2 に答える 2

0

強くお勧めします - blkproc の代わりに blockproc を使用してください。よりデザインが良くなり、使いやすくなりました。

まず、blockproc への 2 番目の入力はブロックサイズであり、グリッド サイズではありません。したがって、画像を [1 3] グリッドに分割したい場合、これは 3 つのブロックの 1 つの行として理解しているため、ブロックサイズを次のように設定する必要があります。

 blocksize = [size(i,1) ceil(size(i,2)/3)];

2 つ目は、blockproc の「TrimBorder」パラメーターをオフにすることです。コードは次のようになります。

 fun=@(x) regionprops(x,'centroid');
 blocksize = [size(i,1) ceil(size(i,2)/3)];
 b=blockproc(bw,blocksize,fun,'TrimBorder',false);

ちょっとしたことですが、変数名「i」は使用しないことをお勧めします。デフォルトでは、虚数を表します i = sqrt(-1); マトラブで。

于 2013-11-06T17:19:06.853 に答える
0

plot コマンドを使用して、画像の上にプロットすることができます。[X,Y] 重心座標が何であれ、たとえば cx(1:3) と cy(1:3) numCentroids は、プロットしている重心の数です。


hold on;
for ii = 1:length(numCentroids)
    plot(cx(ii),cy(ii),'Marker','s','MarkerSize',10,'MarkerFaceColor','r','MarkerEdgeColor','k')
end

より洗練されたコードを書きたい場合は、プロット コマンドをすべての重心に対して 1 回実行してから、ライン スタイル タイプを非表示にすることができます。私が提供した答えはうまくいくはずです。

これは、構成された重心を持つ画像の例です。

ここに画像の説明を入力

于 2013-11-05T13:05:24.227 に答える