2016-08-05 33 views
0

Ich habe dieses Problem: Ich habe dieses 2D-Binärbild und ich möchte die Kontur des Objekts in diesem Bild extrahieren. Dies ist das Bild: enter image description hereFinden Sie Kontur von 2D-Objekt in Bild in Matlab

Ich mag das gleiche Matrix Bild mit Einsen, aber an anderer Stelle in der Kontur des Objekts und Nullen nur haben. Gibt es eine Lösung? Wenn ja, gibt es eine Implementierung, die dasselbe auch für ein 3D-Objekt tut?

Vielen Dank

Antwort

1

Wenn Sie die Image Processing Toolbox haben Sie bwperim

BW = imread('http://i.stack.imgur.com/05T06.png'); 
BW = BW(:,:,1) == 255; 

boundary = bwperim(BW); 

imshow(boundary) 

enter image description here

Letztlich, was diese tut verwenden können, ist eine Faltung auf dem Originalbild führt zu erodieren es und berechnet dann den Unterschied zwischen der erodierten Version und der ursprünglichen Version. Wenn Sie die Toolbox nicht haben, können Sie dies mit conv2 (oder convn in 3D) tun.

eroded = ~conv2(double(~BW), ones(3), 'same'); 
boundary = BW - eroded; 

Oder in 3D:

eroded = ~convn(double(~BW_3D), ones(3,3,3), 'same'); 
boundary = BW_3D - eroded; 
+0

Vielen Dank, es funktioniert perfekt mit bwperim Funktion! – David