2016-03-31 16 views
0

私は3つのクラスを持つ画像を持っています。各クラスは番号{2,3,4}でラベル付けされ、背景は{1}です。私は各クラスの輪郭を画像に描きたい。以下のMATLABコードを試しましたが、輪郭が重なり合って見える(青と緑、黄と緑)。どのようにクラスごとに輪郭を描くことができますか?画像内に複数の輪郭を描くことは可能ですか?

Img=ones(128,128); 
Img(20:end-20,20:end-20)=2; 
Img(30:end-30,30:end-30)=3; 
Img(50:end-50,50:end-50)=4; 
%%Img(60:end-60,60:end-60)=3; %% Add one more rectangular 
imagesc(Img);colormap(gray);hold on; axis off;axis equal; 
[c2,h2] = contour(Img==2,[0 1],'g','LineWidth',2); 
[c3,h3] = contour(Img==3,[0 1],'b','LineWidth',2); 
[c4,h4] = contour(Img==4,[0 1],'y','LineWidth',2); 
hold off; 

enter image description here

これは、それぞれの「クラス」はその形状の点で、中空の四角として定義されているので、これが起こっている私の予想結果

enter image description here

答えて

2

です。したがって、contourを使用すると、四角形のすべての境界線をトレースします。これを図の上にプロットするときは、たとえば1つのクラスだけを取る。具体的には、作成した最初のバイナリイメージをImg == 2で見てください。あなたは、あなたが実際にこのオブジェクトの境界線をトレースすることと思います。この形状にcontourを呼び出した場合、そのため

enter image description here

:私たちは、この画像を取得します。それは今ではそれが理にかなっていますか?残りのクラスでこれを繰り返した場合、これが輪郭線が色で重なっている理由です。中空の正方形の最も内側の部分は、別の正方形の最も外側の部分と重なっている。あなたが初めてcontourを呼び出すときに今、あなたは実際にこれを取得します:

enter image description here

を見てわかるように、「クラス2」は、実際にくり抜か灰色の正方形になるように定義されます。あなたが望むものを達成したいのであれば、どちらか一方の方法でを入力して各中空四角形を入力し、contourをこの結果に適用します。あなたは、画像処理ツールボックスを持っていると仮定すると、各ステップで'holes'オプションでimfillを使用します。私たちは今、これを取得

Img=ones(128,128); 
Img(20:end-20,20:end-20)=2; 
Img(50:end-50,50:end-50)=3; 
Img(30:end-30,30:end-30)=3; 
Img(35:end-35,35:end-35)=3; 
Img(50:end-50,50:end-50)=4; 
imagesc(Img);colormap(gray);hold on; axis off;axis equal; 

%// New 
%// Create binary mask with class 2 and fill in the holes 
im = Img == 2; 
im = imfill(im, 'holes'); 
%// Now draw contour 
[c2,h2] = contour(im,[0 1],'g','LineWidth',2); 

%// Repeat for the rest of the classes 
im = Img == 3; 
im = imfill(im, 'holes'); 

[c3,h3] = contour(im,[0 1],'b','LineWidth',2); 
im = Img == 4; 
im = imfill(im, 'holes'); 

[c4,h4] = contour(im,[0 1],'y','LineWidth',2); 
hold off; 

enter image description here

+1

多くの感謝raryengを。 – user8264

+0

@ user8264大歓迎です。 – rayryeng

+0

@ user8264は受け入れるのに十分なこの答えですか? – rayryeng

関連する問題