Ok, also habe ich ein Histogramm (repräsentiert durch ein Array von Ints), und ich suche nach dem besten Weg, lokale Maxima und Minima zu finden. Jedes Histogramm sollte 3 Peaks haben, einer von ihnen (der erste) wahrscheinlich viel höher als die anderen.
Ich möchte mehrere Dinge tun:
Finde das erste "Tal", das dem ersten Gipfel folgt (um den ersten Gipfel auf dem Bild ganz loszuwerden)
Finden Sie den optimalen "Talwert" zwischen den verbleibenden zwei Spitzen, um das Bild zu trennen
Ich kenne bereits Schritt 2, indem ich eine Variante von Otsu implementiere. Aber ich kämpfe mit Schritt 1
Falls das Tal zwischen den beiden verbleibenden Gipfeln nicht niedrig genug ist, möchte ich Sie warnen.
Auch das Bild ist ziemlich sauber mit wenig Rauschen, um
zu berücksichtigenWas wären die Brute-Force-Algorithmen für die Schritte 1 und 3? Ich könnte einen Weg finden, Otsu zu implementieren, aber die brutale Kraft entkommt mir mathematisch. Wie sich herausstellt, gibt es mehr Dokumentation über das Ausführen von Methoden wie Otsu und weniger über das einfache Auffinden von Gipfeln und Tälern. Ich suche nicht mehr als das, was den Job erledigt (d. H. Es ist eine temporäre Lösung, muss einfach in einem vernünftigen Zeitrahmen implementiert werden können, bis ich mehr Zeit dafür aufwenden kann)
Ich mache das alles in c #
Jede Hilfe, welche Schritte zu ergreifen sind, wird geschätzt! Ich danke dir sehr!
BEARBEITEN: noch mehr Daten:
Das meiste Histogramm ist wahrscheinlich wie das erste, wobei der erste Peak den Hintergrund darstellt.
Benutze den Peakiness-Test. Es ist eine Methode, um alle möglichen Spitzen zwischen zwei lokalen Minima zu finden und die Spitzenwerte basierend auf einer Formel zu messen. Wenn die Spitze höher als ein Schwellenwert ist, wird der Peak akzeptiert.
Quelle: UCF CV CAP5415 Vortrag 9 Folien
Unten ist mein Code:
%Vor%Tags und Links image-processing c#-4.0 mathematical-optimization histogram image-segmentation