Ich habe ein Bild, das wie das folgende aussieht:
Ich versuche den Radius (oder Durchmesser) des Kreises zu finden. Ich habe versucht, eine kreisförmige Hough-Transformation (über Matlabs imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
) und durch Anpassen an einen Kreis oder eine Ellipse (hausgemachte Funktion, die für weniger verrauschte Daten ziemlich gut funktioniert, siehe unten) zu verwenden.
Ich habe auch einige Bildbearbeitungen versucht, um einen klareren Kreis zu erhalten, siehe unten:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
Wenn ich das verarbeitete Bild jedoch einer der beiden Techniken (Hough- und Kreis-Ellipsen-Anpassung) zuführe, gelingt es keinem von beiden, den Kreis auf angemessene Weise zu erkennen.
Hier ist ein Codeausschnitt des Kreisfinders, den ich geschrieben habe (matlab) [row col] = find (bw); Kontur = bwtraceboundary (bw, Zeile (1), Spalte (1)], 'N', Konnektivität, num_points);
x = contour(:,2);
y = contour(:,1);
% solve for parameters a, b, and c in the least-squares sense by
% using the backslash operator
abc = [x y ones(length(x),1)] \ -(x.^2+y.^2);
a = abc(1); b = abc(2); c = abc(3);
% calculate the location of the center and the radius
xc = -a/2;
yc = -b/2;
radius = sqrt((xc^2+yc^2)-c);
Alternative Ansätze werden geschätzt ...
Antworten:
Hier ist meine Lösung, sie kommt der Idee von @ Yoda nahe, aber ich habe einige Schritte geändert.
Hier ist der relevante Matlab-Code. Ich verwende Hough Transformation für Kreise .m-Datei in meinem Code.
quelle
Es ist ziemlich einfach, dies mit der Bildverarbeitung zu tun. Das Folgende ist ein Proof of Concept in Mathematica . Sie müssen es in MATLAB übersetzen.
img
.Binarisieren Sie das Bild und erweitern Sie es, gefolgt von einer Füllungstransformation. Ich entferne auch kleine Streukomponenten, die nicht mit dem Hauptblob verbunden sind. Es sollte Ihnen ungefähr Folgendes geben:
Bestimmen Sie als Nächstes den Schwerpunkt dieses Blobs und den entsprechenden Plattenradius des Blobs (openCV und MATLAB verfügen alle über entsprechende Befehle, um dies zu tun).
Das ist es! Zeichnen Sie nun das Originalbild und einen Kreis mit der obigen Mitte und dem Radius, um zu sehen, wie es passt:
quelle