Erkennen eine Runde Form von innen-Bild in MATLAB
Was ist der Schnellste Weg, um erkennen diese kreisrunde Formen in einem Bild?
Der radius wird immer zwischen(80-100mm). Hintergrund ist immer weiß. Und der Kreis wird immer in der Mitte.
Habe ich versucht Hough-Transformation aber ich konnte nicht wirklich zum laufen bekommen. Ich bin neu hier, und ich bekomme ein Gefühl, wie Hough-Transformation ist ein overkill für diese. Freundlich darauf hin mir der richtige Ansatz, dies zu tun.
UPDATE
Hier ist, was ich bekam nach der Anwendung der hough-Transformation.
Habe ich verwendet der Algorithmus erwähnt hier.
Folgenden ist der entsprechende code aus der größeren Algorithmus
% applying Hough Below
[accum, circen, cirrad] = ...
CircularHough_Grd(gR, [89 93],...
17.4, 13, 1); % this executes in 0.72 sec
% Lets see what we got
imshow(gR);
hold on;
plot(circen(:,1), circen(:,2), 'r+');
for ii = 1 : size(circen, 1)
rectangle('Position',[circen(ii,1) - cirrad(ii), circen(ii,2) - cirrad(ii), 2*cirrad(ii), 2*cirrad(ii)],...
'Curvature', [1,1], 'edgecolor', 'b', 'linewidth', 1.5);
end
hold off;
Den sinnvollen Kreis in der Mitte.
InformationsquelleAutor vvy | 2013-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich vorschlagen:
1. konvertieren zu Grau Bild, die Verbesserung der "Unterschied von weiß"
2. Schwelle zum entfernen des weißen Bereichs
3. Get-Bereich und Schwerpunkt porperties von bildregionen
4. wählen Sie nur groß genug Regionen
5. compute region Entfernung zum Zentrum des Bildes
6. wählen Sie die region, die am nächsten an center
7. Erstellen Sie eine Maske,
Sie sollten auch mit anderen region-Eigenschaften (z.B.
'Eccentricity'
) besser ablehnen Regionen, die nicht kreisförmig.Dies ist ein $niper shot. Der Kreis wird nicht wissen, was hit ' em. Es dauert 0.04 sec nur(auch weniger als im Vergleich zu der hough-Transformation Sache, die ich mache)! Als nächsten Schritt werde ich schließen Sie den weißen unvollkommenen Kreis innerhalb eines Quadrats und seine Mitte und die Annäherung an eine bessere Kreis und dann diesen Kreis als Maske und dann versuchen zu erhalten, die Farbe des Kreises. Ist dieser Ansatz richtig? oder gibt es eine ready_made Methode, dies zu tun ?
werfen Sie einen Blick auf
regionprops
und was es Ihnen bieten kann. In meinem code haben Sie bereits die Mitte des Kreises, in'Centroid'
Bereich derst
struct-array. Je nach der Genauigkeit, die Sie brauchen, Sie werden haben zu finden, eine Methode zur Schätzung des radius des Kreises. Wenn Ihr die Farbe, die Sie wollen - dann brauchen Sie es nicht zu schätzen, eine Kreis - Maskeres
ist alles, was Sie brauchen:t = reshape( img, [], 3); c = mean( t(res,:), 1 )
geben Sie die mittlere Farbe der maskierten Pixel.img, [], 3) wirft Produkt mit bekannten Maßen, 3, nicht teilbar in die totale Anzahl der Elemente, 450800. Fehler. Ich denke, ich werde brauchen zu kürzen oder Zeug das img - array, um seine Größe durch 3 teilbar.
wenn die Anzahl der Elemente von Farbe Bild ist nicht durch 3 teilbar, dann ist dies komisch: sollte man haben 3. dimension der Größe 3 entsprechenden R -, G-und B-Komponenten der einzelnen pixel.
InformationsquelleAutor Shai
Wenn Ihr matlab-version R2012a oder später, das Bild-Bearbeitungs-tool-box enthält die Funktion
imfindcircles
, die verwendet wird, um zu erkennen, Kreise im Bild.Das Ergebnis:
Eigentlich ist diese Funktion gilt auch für die Hough-Transformation, ich denke, es ist ähnlich wie mit deinem. Eine Sache, die Sie möglicherweise benötigen, zu beachten ist der Schwellenwert entsprechend der Empfindlichkeit in Hough hat große Auswirkungen auf das Ergebnis der Erkennung. Zu hohe Empfindlichkeit führt zu mehr erkennen Kreisen, einschließlich schwach oder teilweise verdeckt werden diejenigen, die auf die Gefahr einer höheren false-detection-rate, was genau das war, was Sie erhalten.
Ich habe R2010a. Bekomme ich
imfindcircles
für mein release ? Wie viel Zeit dieses Skript nimmt, um den Kreis?es sollte einbezogen werden, in imaging processing toolbox dann. Ich braucht ~0,7 s zu implementieren imfindcircles, während ~0.05 s für regionprops. Also, wenn Sie haben eine riesige Menge an Bild verarbeitet werden, kann die Geschwindigkeit langsamer sein.
InformationsquelleAutor lennon310