Eine laute Münze in eine Kreisform umformen

7

Ich mache eine Münzerkennung mit JavaCV (OpenCV Wrapper), aber ich habe ein kleines Problem, wenn die Münzen verbunden sind. Wenn ich versuche, sie zu erodieren, um diese Münzen zu trennen, verlieren sie ihre Kreisform, und wenn ich versuche, Pixel innerhalb jeder Münze zu zählen, kann es Probleme geben, so dass einige Münzen als eine größere Münze gezählt werden können. Was ich tun möchte, ist erstens, sie neu zu formen und sie wie einen Kreis zu machen (gleich dem Radius dieser Münze) und dann die Pixel in ihnen zu zählen.

Hier ist mein Bild mit dem Schwellenwert:

Und hier ist erodiertes Bild:

Irgendwelche Vorschläge? Oder gibt es einen besseren Weg, Brücken zwischen den Münzen zu brechen?

    
Zaur Guliyev 25.04.2012, 10:12
quelle

5 Antworten

11

Es sieht ähnlich aus wie ein Problem, das ich kürzlich hatte, um bakterielle Kolonien zu trennen, die auf Agarplatten wachsen. Ich habe eine Entfernungstransformation auf dem Schwellenwertbild durchgeführt (in Ihrem Fall müssen Sie es invertieren). Dann wurden die Spitzen der Distanzkarte gefunden (durch Berechnung der Differenz zwischen der erweiterten Distanzkarte und der Distanzkarte und dem Auffinden der Nullwerte). Dann nahm ich an, dass jeder Peak der Mittelpunkt eines Kreises (Münze) und der Wert des Peaks in der Entfernungskarte der Radius des Kreises ist.

Hier ist das Ergebnis Ihres Bildes nach dieser Pipeline:

Ich bin neu bei OpenCV und C ++, also ist mein Code wahrscheinlich sehr unordentlich, aber ich habe das getan:

%Vor%     
Quentin Geissmann 25.04.2012, 22:32
quelle
5

Sie müssen nicht erodieren, nur eine gute Menge von Parametern für cvHoughCircles() :

Der Code, der zum Generieren dieses Bildes verwendet wurde, stammt von meinem anderen Beitrag: Kreise erkennen mit folgenden Parametern:

%Vor%     
karlphillip 25.04.2012 13:16
quelle
2

OpenCV hat eine Funktion namens HoughCircles (), die auf Ihren Fall angewendet werden kann, ohne die verschiedenen Kreise zu trennen. Kannst du es von JavaCV aus aufrufen? Wenn ja, wird es tun, was Sie wollen (Kreise erkennen und zählen), Ihr Trennproblem umgeht.

Der Hauptpunkt besteht darin, die Kreise genau zu erkennen, ohne sie vorher zu trennen. Andere Algorithmen (z. B. Template Matching) können anstelle der generellen Hough-Transformation verwendet werden, aber Sie müssen die unterschiedlichen Größen der Münzen berücksichtigen.

    
sansuiso 25.04.2012 10:21
quelle
1
___ qstnhdr ___ Eine laute Münze in eine Kreisform umformen ___ answer10324759 ___

Es sieht ähnlich aus wie ein Problem, das ich kürzlich hatte, um bakterielle Kolonien zu trennen, die auf Agarplatten wachsen. Ich habe eine Entfernungstransformation auf dem Schwellenwertbild durchgeführt (in Ihrem Fall müssen Sie es invertieren). Dann wurden die Spitzen der Distanzkarte gefunden (durch Berechnung der Differenz zwischen der erweiterten Distanzkarte und der Distanzkarte und dem Auffinden der Nullwerte). Dann nahm ich an, dass jeder Peak der Mittelpunkt eines Kreises (Münze) und der Wert des Peaks in der Entfernungskarte der Radius des Kreises ist.

Hier ist das Ergebnis Ihres Bildes nach dieser Pipeline:

Ich bin neu bei OpenCV und C ++, also ist mein Code wahrscheinlich sehr unordentlich, aber ich habe das getan:

%Vor%     
___ answer10313729 ___

OpenCV hat eine Funktion namens HoughCircles (), die auf Ihren Fall angewendet werden kann, ohne die verschiedenen Kreise zu trennen. Kannst du es von JavaCV aus aufrufen? Wenn ja, wird es tun, was Sie wollen (Kreise erkennen und zählen), Ihr Trennproblem umgeht.

Der Hauptpunkt besteht darin, die Kreise genau zu erkennen, ohne sie vorher zu trennen. Andere Algorithmen (z. B. Template Matching) können anstelle der generellen Hough-Transformation verwendet werden, aber Sie müssen die unterschiedlichen Größen der Münzen berücksichtigen.

    
___ qstntxt ___

Ich mache eine Münzerkennung mit JavaCV (OpenCV Wrapper), aber ich habe ein kleines Problem, wenn die Münzen verbunden sind. Wenn ich versuche, sie zu erodieren, um diese Münzen zu trennen, verlieren sie ihre Kreisform, und wenn ich versuche, Pixel innerhalb jeder Münze zu zählen, kann es Probleme geben, so dass einige Münzen als eine größere Münze gezählt werden können. Was ich tun möchte, ist erstens, sie neu zu formen und sie wie einen Kreis zu machen (gleich dem Radius dieser Münze) und dann die Pixel in ihnen zu zählen.

Hier ist mein Bild mit dem Schwellenwert:

Und hier ist erodiertes Bild:

Irgendwelche Vorschläge? Oder gibt es einen besseren Weg, Brücken zwischen den Münzen zu brechen?

    
___ antwort10332543 ___

Der übliche Ansatz für die erosionsbasierte Objekterkennung besteht darin, kontinuierliche Bereiche im erodierten Bild zu markieren und sie dann wieder zu vergrößern, bis sie mit den Bereichen im Originalbild übereinstimmen. Hough-Kreise sind in deinem Fall jedoch eine bessere Idee.

    
___ answer24911150 ___

Nachdem ich die verbundenen Münzen erkannt habe, empfehle ich morphologische Operationen, um Bereiche als "definitiv prägen" und "definitiv nicht prägen" zu klassifizieren, eine Entfernungstransformation anzuwenden und dann die Wasserscheide zu fahren, um die Grenzen zu bestimmen. Dieses Szenario ist eigentlich das Demonstrationsbeispiel für den Watershed-Algorithmus in OpenCV - vielleicht wurde es als Antwort auf diese Frage erstellt.

    
___ answer10316493 ___

Sie müssen nicht erodieren, nur eine gute Menge von Parametern für %code% :

Der Code, der zum Generieren dieses Bildes verwendet wurde, stammt von meinem anderen Beitrag: Kreise erkennen mit folgenden Parametern:

%Vor%     
___
thiton 26.04.2012 11:33
quelle
0

Nachdem ich die verbundenen Münzen erkannt habe, empfehle ich morphologische Operationen, um Bereiche als "definitiv prägen" und "definitiv nicht prägen" zu klassifizieren, eine Entfernungstransformation anzuwenden und dann die Wasserscheide zu fahren, um die Grenzen zu bestimmen. Dieses Szenario ist eigentlich das Demonstrationsbeispiel für den Watershed-Algorithmus in OpenCV - vielleicht wurde es als Antwort auf diese Frage erstellt.

    
kokociel 23.07.2014 12:58
quelle

Tags und Links