2013-05-21 8 views
5

Mam tablicę int pełną wartości (0-255) i muszę wyodrębnić dwa indeksy.Uzyskaj obszar zainteresowań Histogramu (Int Array)

Indeksy, które można znaleźć, będą reprezentować Ciekawy obszar, na którym chcę się skupić.

Wartości tego obszaru wynoszą zawsze wyższe niż inne, ale czasami różnica jest bardzo niska.

jak w poniższym przykładzie:

enter image description here

mojej okolicy procentowa jest taka:

enter image description here

Moje obecne podejście jest, aby wartość maksymalna i średnia wartość. Wtedy otrzymam:

  • pierwszy indeks większy niż "Max - (Max - średni)".
  • ostatni indeks większy niż "Max - (Max - średni)".

Ale czasami, podobnie jak w tym przypadku, moja metoda pobiera część śmieciową. (Piąta "kolumna", po prawej)

Ktoś może zaproponować lepsze podejście?

Uwaga: Obszar zainteresowanie zawsze 4 „kolumny” jak na przykład obrazek

Odpowiedz

0

Można zastosować prosty Impulse Filter Response takich jak wagonie lub jakichkolwiek innych środków wygładzający do histogramu zmniejszyć składniki o wysokiej częstotliwości . Następnie można obliczyć lokalne minima i maksima oraz punkty styku poszczególnych pików (maks. Min-maks.-Min na szczyt) w ramach pasma, które pomogłyby zawęzić zwrot z inwestycji.

Oto prosta implementacja filtru Boxcar.

0

Może zakładam zbyt wiele. Ale twoje dane sprawiają, że wygląda na to, że wokół 4 "gór" są silne "krawędzie". Powinieneś więc przyjrzeć się grupie algorytmów dla idei edge/ridge detection.

Moja najprostsza odpowiedź to najpierw spróbować próg. zobacz, czy to działa.

Jeśli nie, może zastosować jednowymiarową wersję filtru, taką jak Sobel filter. Powinny one podkreślać ważne punkty w danych, w których pochodna drugiego rzędu jest duża.