Wykrywanie tekstur i właściwości regionu na obrazie

9

Mam ciekawy problem, który próbuję rozwiązać. Na przykład, jeśli mamy czarno-biały obraz zawierający dwie tekstury (A i B), jestem zainteresowany znajomością wartości pikseli granic, które całkowicie pokryłyby poszczególne tekstury.

Myślałem o użyciu korelacji krzyżowej, która dałaby mi zbiór pozycji, szablonu (legend) na obrazie, ale czy istnieje sposób, aby to wykorzystać, aby uzyskać wartości pikseli granic (które są zwykle nieregularne)? Czy jest też inny lepszy sposób na zrobienie tego?

Przykładem tego może być wykrywanie regionów opadów na mapie pokazującej trzy poziomy opadów w ciągu roku. Do każdego poziomu przypisana jest tekstura obecna w legendzie, która jest używana do dopasowywania tekstur na tym samym obrazie.

Lorem Ipsum
źródło
4
Byłoby użyteczne, gdybyś rzeczywiście podzielił się przykładami i być może kilkoma wstępnymi rozwiązaniami, które wypróbowałeś
Ivo Flipse,
3
Zdecydowanie prześlij kilka przykładowych obrazów, abyśmy rozumieli, co robisz. Jak niektóre regiony są wypełnione solidnymi, a inne kreskowane? nps.gov/sagu/naturescience/images/...
endolit
Jeśli masz Matlab, możesz użyć przybornika do przetwarzania obrazu. Jeśli nie, ich strona internetowa nadal zapewnia dobry przegląd standardowych algorytmów, których możesz chcieć użyć, na przykład funkcji bwconncomp .
Pan White

Odpowiedzi:

1

Oto prosty proces:

  1. Przypisz pomiary tekstury do każdego regionu na obrazie.
  2. Użyj algorytmu etykietowania / algorytmu łączności regionu (lub algorytmu powiększania regionu), aby połączyć sąsiednie regiony o tej samej miary tekstury.
  3. Zaimplementuj prosty algorytm śledzenia krawędzi, aby śledzić kontur każdego regionu.

Miary tekstury Law to starsza, ale wciąż przydatna technika określania tekstury na obrazie, i może być wystarczająca do odróżnienia tekstury A od tekstury B na całym obrazie. Zobacz sekcję „Przepisy dotyczące energii tekstury energii” w artykule w Wikipedii:

http://en.wikipedia.org/wiki/Image_texture

W pierwszym kroku oblicz wszystkie miary tekstury i określ, która konkretna miara (np. Krawędź lub plamka) pozwala najłatwiej odróżnić jedną teksturę od drugiej. (Jeśli opublikujesz kilka zdjęć, pomogę ci zidentyfikować miarę tekstury).

Jeśli masz tylko dwie tekstury, A i B, możesz traktować je jako pierwszy plan i tło, i zadziała standardowy algorytm oznaczania regionu. Aby łatwiej było zobaczyć, co dzieje się w trakcie przetwarzania, możesz wygenerować nowy obraz, przypisując tekstury A (elementy tekstury, małe kawałki tekstury) do koloru białego, a tekstury B do koloru czarnego. Algorytmy oznaczania regionu i / lub algorytmy śledzenia konturu znajdowałyby wówczas połączone regiony biały i czarny. Funkcja findContours () w OpenCV będzie działać dobrze.

http://en.wikipedia.org/wiki/Connected-component_labeling

Ten sam artykuł w Wikipedii zawiera zarówno tradycyjny algorytm wieloprzebiegowy, jak i algorytm jednoprzebiegowy. Nie wdrożyłem opisanego tam algorytmu jednoprzebiegowego, ale pracowałem z algorytmem jednoprzebiegowym opisanym w artykule „Algorytm znakowania komponentów za pomocą techniki śledzenia konturów” autorstwa Chena i Changa. Artykuł autorstwa Chena i Changa opisuje również standardowy algorytm śledzenia konturów, który można szybko wdrożyć.

Jeśli masz więcej niż dwóch tekstur, a następnie można użyć przełomowym lub średniego przesunięcia algorytmu regionów klastra razem Po odwzorować tekstur kolorach. Chociaż to odwzorowanie z tekstury na kolor nie jest konieczne, ułatwia debugowanie i zrozumienie procesu.

Rethunk
źródło