Rozważ te dwa obrazy w skali szarości:
Pierwsze zdjęcie pokazuje meandrujący wzór rzeki. Drugi obraz pokazuje losowy szum.
Szukam miary statystycznej, której mogę użyć do ustalenia, czy prawdopodobne jest, że obraz pokazuje wzór rzeki.
Obraz rzeki ma dwa obszary: rzeka = wysoka wartość i wszędzie indziej = niska wartość.
W rezultacie histogram jest bimodalny:
Dlatego obraz o wzorze rzeki powinien mieć dużą wariancję.
Jednak powyższy losowy obraz również:
River_var = 0.0269, Random_var = 0.0310
Z drugiej strony losowy obraz ma niską ciągłość przestrzenną, podczas gdy obraz rzeki ma wysoką ciągłość przestrzenną, co wyraźnie pokazano na wariogramie eksperymentalnym:
W ten sam sposób, w jaki wariancja „podsumowuje” histogram w jednej liczbie, szukam miary ciągłości przestrzennej, która „podsumowuje” eksperymentalny wariogram.
Chcę, aby ten środek „karał” wysoką półwariancję przy małych opóźnieniach mocniej niż przy dużych opóźnieniach, dlatego opracowałem:
Jeśli dodam tylko od lag = 1 do 15, otrzymam:
River_svar = 0.0228, Random_svar = 0.0488
Myślę, że obraz rzeki powinien mieć dużą wariancję, ale niską wariancję przestrzenną, dlatego wprowadzam współczynnik wariancji:
Wynik to:
River_ratio = 1.1816, Random_ratio = 0.6337
Moim pomysłem jest wykorzystanie tego współczynnika jako kryterium decyzyjnego dla tego, czy obraz jest obrazem rzeki, czy nie; wysoki stosunek (np.> 1) = rzeka.
Jakieś pomysły na to, jak mogę coś ulepszyć?
Z góry dziękuję za wszelkie odpowiedzi!
EDYCJA: Zgodnie z radą Whuber i Gschneider tutaj są Morans I z dwóch obrazów obliczonych za pomocą macierzy odwrotnej masy 15x15 przy użyciu funkcji Matlaba Felixa Hebelera :
Muszę podsumować wyniki w jednym numerze dla każdego obrazu. Według wikipedii: „Wartości mieszczą się w zakresie od -1 (wskazując idealne rozproszenie) do +1 (idealna korelacja). Wartość zero wskazuje losowy wzór przestrzenny.” Jeśli zsumuję kwadrat Moransa I dla wszystkich pikseli, otrzymam:
River_sumSqM = 654.9283, Random_sumSqM = 50.0785
Jest tutaj ogromna różnica, więc Morans wydaje mi się bardzo dobrą miarą ciągłości przestrzennej :-).
A oto histogram tej wartości dla 20 000 permutacji obrazu rzeki:
Oczywiście wartość River_sumSqM (654,9283) jest mało prawdopodobna, dlatego obraz rzeki nie jest przestrzennie losowy.
Odpowiedzi:
Myślałem, że rozmycie gaussowskie działa jak filtr dolnoprzepustowy, pozostawiając strukturę na dużą skalę i usuwając komponenty o wysokiej liczbie fal.
Możesz także spojrzeć na skalę falek wymaganych do wygenerowania obrazu. Jeśli wszystkie informacje żyją w falach małej skali, prawdopodobnie nie jest to rzeka.
Można rozważyć pewien rodzaj autokorelacji jednej linii rzeki ze sobą. Więc jeśli weźmiesz rząd pikseli rzeki, nawet z hałasem, i znajdziesz funkcję korelacji krzyżowej z następnym rzędem, możesz zarówno znaleźć lokalizację, jak i wartość piku. Ta wartość będzie znacznie wyższa niż w przypadku losowego hałasu. Kolumna pikseli nie wytworzy większego sygnału, chyba że wybierzesz coś z regionu, w którym znajduje się rzeka.
http://en.wikipedia.org/wiki/Gaussian_blur
http://en.wikipedia.org/wiki/Cross-correlation
źródło
Jest trochę późno, ale nie mogę się oprzeć jednej sugestii i jednej obserwacji.
Po pierwsze, uważam, że bardziej „podejście do przetwarzania obrazu” może być bardziej odpowiednie niż analiza histogramu / wariogramu. Powiedziałbym, że sugestia „wygładzania” EngrStudent jest na dobrej drodze, ale część „rozmycia” przynosi efekt przeciwny do zamierzonego. Wymagany jest wygładzacz zachowujący krawędzie , taki jak filtr dwustronny lub filtr środkowy . Są one bardziej wyrafinowane niż filtry średniej ruchomej, ponieważ z konieczności są nieliniowe .
Oto demonstracja tego, co mam na myśli. Poniżej znajdują się dwa zdjęcia przybliżające dwa scenariusze wraz z ich histogramami. (Obrazy są 100 na 100, ze znormalizowanymi intensywnościami).
Do każdego z tych obrazów stosuję 15-krotnie * filtr środkowy 5 na 5, który wygładza wzory, zachowując krawędzie . Wyniki przedstawiono poniżej.
(* Użycie większego filtra nadal utrzymałoby ostry kontrast na krawędziach, ale wygładziłoby ich położenie).
Zwróć uwagę, że obraz „rzeki” nadal ma bimodalny histogram, ale teraz jest ładnie podzielony na 2 elementy *. Tymczasem obraz „białego szumu” nadal ma jednokomponentowy unimodalny histogram. (* Łatwo progowane, np . Metodą Otsu , aby utworzyć maskę i sfinalizować segmentację.)
(Przepraszam za rant ... pierwotnie mój trening był geomorfologiem)
źródło
Sugestia, która może być szybką wygraną (lub może wcale nie działać, ale można ją łatwo wyeliminować) - czy próbowałeś spojrzeć na stosunek średniej do wariancji histogramów intensywności obrazu?
Zrób losowy obraz szumu. Zakładając, że jest generowany przez przypadkowo emitowane fotony (lub podobne) uderzające w kamerę, a każdy piksel jest równie prawdopodobne, że zostanie trafiony, i że masz surowe odczyty (tj. Wartości nie są przeskalowywane lub są przeskalowywane w znany sposób, który można cofnąć) , wówczas liczbę odczytów w każdym pikselu należy rozłożyć poissona; zliczasz liczbę zdarzeń (fotony uderzające w piksel), które mają miejsce w ustalonym okresie czasu (czas ekspozycji) wiele razy (we wszystkich pikselach).
W przypadku, gdy istnieje rzeka o dwóch różnych wartościach natężenia, masz mieszaninę dwóch rozkładów Poissona.
Naprawdę szybkim sposobem przetestowania obrazu może być spojrzenie na stosunek średniej do wariancji intensywności. Dla rozkładu Poissona średnia będzie w przybliżeniu równa wariancji. Dla mieszanki dwóch rozkładów Poissona wariancja będzie większa niż średnia. W końcu będziesz musiał przetestować stosunek dwóch w stosunku do pewnego z góry ustalonego progu.
To bardzo prymitywne. Ale jeśli to zadziała, będziesz w stanie obliczyć niezbędne wystarczające statystyki za pomocą tylko jednego przejścia na każdy piksel obrazu :)
źródło