2017-04-07 4 views
0

Ich habe dieses Binärbild mit weißen Flecken: Binary image Ich möchte jeden weißen Fleck durch ein Rechteck mit der gleichen Größe von Fleck und wenn möglich mit der gleichen Ausrichtung darstellen. Gibt es irgendeine Funktion, die das macht? Ich kann jede Stelle mit RP erkennen: enter image description hereWeißpunkte durch Rechtecke darstellen

Antwort

1

Ich würde den kleinsten Feret Durchmesser (kürzeste Projektion) mit entsprechenden Winkel und die senkrechte Projektion berechnen. Das entspricht normalerweise der kleinsten Bounding Box.

Sehen Sie hier für MATLAB-Code auf Durchmesser Feret Berechnung: http://www.crisluengo.net/index.php/archives/408

+0

Danke. Ich werde es versuchen –

0

Sie können versuchen, regionprops wie folgt zu verwenden:

I = imread('tHZhy.png'); 
stats = regionprops(I, 'centroid', 'Orientation', 'MajorAxisLength','MinorAxisLength', 'BoundingBox'); 
figure 
imshow(I) 
hold on 
for i=1:length(stats) 
    xc = stats(i).Centroid; 
    ma = stats(i).MajorAxisLength/2; 
    mi = stats(i).MinorAxisLength/2; 
    theta = -deg2rad(stats(i).Orientation); 
    dx = [-ma -mi; ma -mi; ma mi; -ma mi; -ma -mi]; 
    R = [cos(theta) -sin(theta); sin(theta) cos(theta)]; % rotation matrix 
    x = xc + dx*R'; 
    plot(xc(1), xc(2), 'g*'); 
    plot(x(:, 1), x(:, 2), 'g'); 
end 

Beachten Sie, dass das Ergebnis nicht perfekt ist, vor allem für eher quadratische Objekte. Der Grund dafür ist, dass die Hauptdimension am größten ist, wenn sie entlang einer Diagonalen gerichtet ist. enter image description here