2016-03-31 62 views
0

Üç sınıfa sahip bir görüntüm var. Her sınıf {2,3,4} numarasına göre etiketlenmiştir ve arka plan {1}'dur. Bir resimdeki her bir sınıfın konturlarını çizmek istiyorum. Aşağıdaki MATLAB kodunu denedim, ancak kontür birlikte (mavi ve yeşil, sarı ve yeşil) üst üste geliyor. Sınıf başına nasıl bir kontur çizebilirim? Görüntüde birden çok çevre çizgisi çizmek mümkün mü

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

Bu, her "sınıfı" şekli açısından içi boş kare olarak tanımlanır çünkü bu oluyor

enter image description here

cevap

2

benim beklenen bir sonuçtur. Bu nedenle, contour kullandığınızda, karenin tüm sınırları üzerinde izler. Örneğin bu rakamı çizdiğinizde sadece bir sınıf alın. Özellikle, Img == 2 ile oluşturduğunuz ilk ikili resminize bir göz atın. Eğer, aslında bu nesnenin sınırlarını izleme olurdu bu şekline contour denilen eğer nedenle

enter image description here

: Bu görüntü olsun. Şimdi daha mantıklı değil mi? Bunu sınıflarınızın geri kalanı için tekrarladıysanız, bu durum kontur çizgilerinin renkte örtüşmesinin sebebidir. İçi boş karenin en iç kısmı başka bir karenin en dış kısmıyla örtüşüyor. Eğer ilk kez contour çağırdığınızda Şimdi aslında bu alacak:

enter image description here

Gördüğünüz gibi, "sınıf 2" aslında oyulmuştur gri kare olarak tanımlanır. İstediğinizi elde etmek istiyorsanız, her içi boş kare doldurunuz ve bu sonuca contour uygulayın. Eğer görüntü işleme araç kutusu var varsayarsak, her adımda 'holes' seçeneğiyle imfill kullanın: Şimdi bu olsun

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

Birçok teşekkür raryeng. – user8264

+0

@ user8264 Çok hoş geldiniz. – rayryeng

+0

@ user8264 bu cevap bir kabul için yeterli mi? – rayryeng

İlgili konular