2013-05-21 5 views
5

Ich habe ein int-Array voller Werte (0-255) und ich muss zwei Indizes extrahieren.Get Interessenbereich eines Histogramms (Int Array)

Die zu findenden Indizes werden den interessanten Bereich darstellen, auf den ich mich konzentrieren möchte. Die Werte dieses Bereichs sind immer höher als die anderen, aber manchmal ist der Unterschied sehr gering.

wie in diesem Beispiel:

enter image description here

Mein Interesse Bereich ist dies:

enter image description here

Mein aktueller Ansatz ist es, den Max-Wert und Mittelwert zu erhalten. Dann bekomme ich:

  • der erste Index größer als "Max - (Max - Average)".
  • der letzte Index größer als "Max - (Max - Average)".

Aber manchmal, wie in diesem Fall meine Methode bekommt den Junk-Teil. (Die fünfte "Spalte", auf der rechten Seite)

Jeder kann einen besseren Ansatz vorschlagen?

Hinweis: Das Interesse Bereich hat immer 4 „Spalten“ wie das Beispiel Bild

Antwort

0

Sie einen einfachen Impuls Response Filter anwenden könntest wie Boxcar oder andere Mittel der zu Ihrem Histogramm Glätten der Hochfrequenzkomponenten zu reduzieren . Danach können Sie die lokalen Minima und Maxima berechnen und die einzelnen Peaks (max-min-max-min pro Peak) innerhalb einer Bandbreite festlegen, die helfen würde, den ROI einzugrenzen.

Hier ist eine einfache Boxcar Filterimplementierung von mir.

0

Vielleicht nehme ich zu viel an. Aber Ihre Daten lassen es so aussehen, als ob es starke 'Kanten' um die 4 'Berge herum gibt. Also sollten Sie sich diese edge/ridge detection Gruppe von Algorithmen für die Idee anschauen.

Meine einfachste Antwort wäre, zuerst die Schwellenwertbildung zu versuchen. Schau, ob das funktioniert.

Wenn nicht, möglicherweise Anwendung eindimensionale Version des Filters wie Sobel filter. Sie sollten die wichtigen Punkte in Ihren Daten hervorheben, in denen die Ableitung zweiter Ordnung groß ist.