2017-11-20 9 views
-1

私は自分のbw画像を生成し、Matlab(添付画像)のbwlabelを使ってそれをラベリングし、imfindcirclesを使って私のbw画像の円形オブジェクトを探します。しかしimfindcirclesは正しい円が見つからなかった(白いオブジェクト上に)。なぜ誰かがそれを修正する方法を知っていますか?ありがとうございました!MatLab imfindcirclesは私のbw画像では機能しません

enter image description here

+0

どのようにそれは動作しません - あなたはあなたの記述することができますエラーの詳細とあなたが使用しているコードを投稿? –

答えて

0

これが私の作品:

Irgb=imread('z:/ww5l8.jpg'); 
Igray=mean(double(Irgb)/255,3); 
Ibw=Igray>0.5; 

[centers,radii]=imfindcircles(Ibw,[6,80],'ObjectPolarity','bright'); 
fprintf('Found %d circles\n',size(centers,1)); 
figure(1); imshow(Ibw); hold on; 
plot(centers(:,1),centers(:,2),'b*'); hold off; 

より良いオプションは、地域の特性を使用してフィルタリングを行うことです。

stats = regionprops(Ibw,{'Centroid','Eccentricity'}) 
Centroid=vertcat(stats.Centroid) 
Eccentricity=vertcat(stats.Eccentricity) 
+0

ありがとうございます! 'Igray = mean(double(Irgb)/ 255,3);とは何ですか? – Ziming

+0

これは、rgb(3プレーン)-uint8(0-255)からグレイ(1プレーン)-double(0-1)に変換する方法です。 uint8を使用すると、計算を行うときに注意する必要があります。 2 uint8の数値を合計すると255の最大値が得られます。平均計算は間違っています。 –

+0

ああありがとう!それから私は理解していない。サークルを見つけるために白黒画像をグレー画像に変換する必要があるのはなぜですか。私はbw画像が灰色画像よりも良いのは、その唯一の0と255であるべきですか? – Ziming

関連する問題