Próbuję „dopasować” małe kwadratowe łatki na obrazie. Na pierwszy rzut oka rozsądne wydaje się po prostu porównanie euklidesowego stylu odległości dwóch z tych tablic, aby uzyskać miarę „podobieństwa”. Działa to dobrze w wielu przypadkach (łatka „najlepsza” (najniższa wartość) według tej metryki wygląda bardzo podobnie do łatki zapytania). Istnieje jednak wiele przypadków, w których powoduje to bardzo złe dopasowanie. Na przykład weź te dwie pary łatek:
Dwie łatki ściany z cegły, wynik 134 (jest to suma składników średniej bezwzględnej różnicy pikseli):
Jeden płat ściany z cegły, jeden płat trawy, zdobądź 123!
Dla człowieka „wyraźnie” trawa nie pasuje do cegły, ale ta metryka mówi inaczej. Problem tkwi w lokalnej zmienności statystycznej.
Jeśli użyję czegoś w rodzaju porównania histogramu, całkowicie stracę wszystkie informacje przestrzenne - np. Jeśli łata jest trawą na górze i cegłą na dole, pasuje dokładnie do łaty z trawą na dole i cegłą na górze (ponownie , kolejne dopasowanie „oczywiście niewłaściwe”).
Czy istnieje metryka, która w jakiś sposób łączy oba te pomysły w rozsądną wartość, która zostanie oceniona jako „podobna” dla pary 1 powyżej, ale nie będzie również podobna dla mojego przykładu łatki i jej lustra pionowego?
Wszelkie sugestie są mile widziane!
Odpowiedzi:
Podstawową ideą jest: Nie ma nic złego w informacjach o kolorze - jest to po prostu niewystarczające. Najlepszą rzeczą jest połączenie wielu zestawów funkcji.
Możesz wypróbować wiele funkcji, aby rozwiązać tę niejednoznaczność. Jeśli chodzi o zestaw funkcji, możesz użyć następujących elementów:
Jako podstawowe porównanie, najpierw chciałbym rozróżnić łatkę z czystej cegły od czystej trawy. W tym przypadku kolor jest zdecydowanie najbardziej potencjalnym elementem.
Łączenie funkcji w celu uzyskania bardziej niezawodnej klasyfikacji
Użyłbym dominującego koloru (używa, ale nie jedyny) lub koloru kluczowego i tworzyłbym klastry. Zobacz, gdzie leżą głowy gromady;
Jeśli obie głowy klastrów znajdują się w spodziewanych obszarach, klasa jest zwykle łatwa do wykrycia, jeśli wpadną w szary obszar, wówczas klasa należy do nich. Jeśli znajduje się w szarym obszarze, wymagana jest inna funkcja.
Tak samo można niezależnie klasyfikować za pomocą Matrycy tekstur, a następnie łączyć oba wyniki, aby upewnić się, że wyniki mają sens.
Radzenie sobie z problemami przestrzennymi
Zwłaszcza, gdy zdasz sobie sprawę, że plastry mogą mieć części, które są w połowie cegłami i w połowie trawą. Myślę, że nie potrzebujesz już żadnych dodatkowych funkcji ani innej wiedzy. Można to zrobić na dwa sposoby.
1. Zachowaj wiele łat członkowskich jako różne klasy. Na przykład, oprócz
birck-only
klasy igrass-only
klasy, możesz także miećhalf-brick-half-grass-vertical
ihalf-brick-half-grass-horizontal
łącznie cztery klasy. Można to łatwo sklasyfikować za pomocą metody klastrowania, którą omówiliśmy wcześniej.2. Dodaj klasyfikację wieloskalową Na przykład, biorąc pod uwagę, że łatka znajduje się w szarym obszarze, możesz podzielić ją na dwie części, tj. Lewą kontra prawą. W ten sam sposób możesz także podzielić górę od dołu. Teraz możesz zastosować identyczną klasyfikację dla tej „części”. Najlepiej byłoby, gdyby powyższa funkcja umożliwiała skalowanie w celu porównania podobieństwa funkcji między pełną częścią (na przykład dominujący kolor może być taki sam niezależnie od wielkości), w przeciwnym razie może być konieczna zmiana jego rozmiaru.
Dodanie kolejnych klas (jak w części 1) lub więcej poziomów (jak w części 2) będzie proste; górna granica będzie wynikać z dwóch czynników - albo jakikolwiek dodatkowy podział nie doda już żadnej wartości do klasyfikacji lub że nadmierny hałas skutecznie wprowadzi niejednoznaczność w klasyfikacji. Tutaj się zatrzymujesz.
źródło
Na początek 2 obrazy i 3 pomiary nie są wystarczające do ustalenia dowolnego rodzaju modelu statystycznego, który w kategoriach można użyć do zdefiniowania optymalnej miary porównawczej.
Myślę, że możesz zacząć przyglądać się papierom do rozpoznawania tekstur w poszukiwaniu metod i wskazówek. To jest aktywne pole.
Za to, co jest warte, przeprowadziłem kilka percepcyjnych funkcji haszujących (oparte na DCT i losowej projekcji) i wykonałem małą próbę z tak zwanym deskryptorem SIFT. Funkcje te mogą oddzielić odległości między klasami i wewnątrz klasy, chociaż z 3 zdjęć nie można niczego wywnioskować.
Kod na github .
źródło