1

以下のコードを実行した後、以下のイメージがあります。線を引き、サーキュラー領域を切り取ります

enter image description here

file='grayscale.png'; 
I=imread(file); 
bw = im2bw(I); 
bw = bwareaopen(bw,870); 
imwrite(bw,'noiseReduced.png') 
subplot(2,3,1),imshow(bw); 
[~, threshold] = edge(bw, 'sobel'); 
fudgeFactor = .5; 
im = edge(bw,'sobel', threshold * fudgeFactor); 
subplot(2,3,2), imshow(im), title('binary gradient mask'); 

se = strel('disk',5); 
closedim = imclose(im,se); 
subplot(2,3,3), imshow(closedim), title('Connected Cirlces'); 
cc = bwconncomp(closedim); 

S = regionprops(cc,'Centroid'); //returns the centers S(2) for innercircle 
numPixels = cellfun(@numel,cc.PixelIdxList); 
[biggest,idx] = min(numPixels); 
im(cc.PixelIdxList{idx}) = 0; 
subplot(2,3,4), imshow(im), title('Inner Cirlces Only'); 
c = S(2); 

マイターゲットは円形の物体の周りに赤cirleを描画(画像参照)、原画像から円形領域(面積)を切断することになりました「私は」とトリミングされた領域を節約するようイメージを作成したり、他のタスクを実行できます。どうしたらいいですか?

答えて

1

また、あなたは/すべてのポイントが含まれている少なくともrの円に合わせ最適化することができp(1), p(2)は、中央のx-y座標であり、 p(3)の半径。

[p, fval] = fmincon(obj, [mean(xx), mean(yy), size(bw,1)/4], [],[],[],[],[],[],con); 

利回り

p = 
471.6397 484.4164 373.2125 
:円 fminconと最適化

con = @(p) deal((xx-p(1)).^2+(yy-p(2)).^2-p(3).^2, []); 

内のすべてのポイントに

obj = @(p) p(3); 

件名:その後、我々はr(すなわち、p(3))を最小限にしたいです

は、あなたが円の中にtruebwと同じサイズのバイナリマスクを生成することができますし、false

msk = bsxfun(@plus, ((1:size(bw,2))-p(1)).^2, ((1:size(bw,1)).'-p(2)).^2) <= p(3).^2; 

外のマスクがどのように見える

imshow(bw,'border','tight'); 
colormap gray;hold on; 
t=linspace(-pi,pi,1000); 
plot(p(3)*cos(t)+p(1),p(3)*sin(t)+p(2),'r', 'LineWidth',1); 

enter image description here

結果を描画:

enter image description here

+0

fminconで 'img'とは何ですか? –

+0

@Nektar a typo。アップデート – Shai

+0

あなたの解決策は正しいですか?しかし、バイナリマスクの代わりに、円領域を切り抜きたい。私はイメージ "私"から "bw"を得たと言うことができます。では、検出された円を「私」からどのように切り取ることができますか?または、 "I"にバイナリマスクを適用して、唯一の円領域が変更されずに残りの領域が黒くなるようにします。 –

1

白いピクセルの凸面は、サークルのかなり良い近似を与えます。中心は船体の面積の重心であり、半径は中心から船体の頂点までの平均距離です。 pが円をパラメータ3つのベクトルとし、今

bw = imread('http://i.stack.imgur.com/il0Va.png'); 
[yy xx]=find(bw); 

+0

あなたのソリューションは最も簡単で、うまく機能します。 –

+0

@Nektar:このフィードバックをいただきありがとうございます。 –

関連する問題