Potrzebuję algorytmu, który określi, czy dwa obrazy są „podobne” i rozpozna podobne wzorce koloru, jasności, kształtu itp. Mogę potrzebować wskazówek, jakich parametrów używa mózg ludzki do „kategoryzowania” obrazów. ..
Patrzyłem na dopasowywanie oparte na hausdorffie, ale wydaje się, że jest to głównie do dopasowywania przekształconych obiektów i wzorów kształtów.
algorithm
math
image-comparison
kitsune
źródło
źródło
Odpowiedzi:
Zrobiłem coś podobnego, rozkładając obrazy na sygnatury za pomocą transformacji falkowej .
Moje podejście polegało na wybraniu najbardziej znaczących współczynników n z każdego przekształconego kanału i zarejestrowaniu ich lokalizacji. Dokonano tego poprzez sortowanie listy krotek (moc, lokalizacja) według abs (moc). Podobne obrazy będą miały podobieństwa, ponieważ będą miały znaczące współczynniki w tych samych miejscach.
Stwierdziłem, że najlepiej jest przekształcić obraz w format YUV, który skutecznie pozwala na podobieństwo wagi w kształcie (kanał Y) i kolorze (kanały UV).
Możesz znaleźć moją implementację powyższego w mactorii , nad którą niestety nie pracowałem tak dużo, jak powinienem :-)
Inną metodą, której niektórzy moi przyjaciele używali z zaskakująco dobrymi wynikami, jest po prostu zmiana rozmiaru obrazu, powiedzmy, piksel 4x4 i zapisanie, które są Twoją sygnaturą. Jak podobne są dwa obrazy, można ocenić, na przykład obliczając odległość Manhattanu między dwoma obrazami przy użyciu odpowiednich pikseli. Nie mam szczegółów, w jaki sposób wykonali zmianę rozmiaru, więc być może będziesz musiał zagrać z różnymi algorytmami dostępnymi dla tego zadania, aby znaleźć odpowiedni.
źródło
pHash może Cię zainteresować.
źródło
Użyłem SIFT do ponownego wykrycia tego samego obiektu na różnych obrazach. Jest naprawdę potężny, ale raczej złożony i może być przesadą. Jeśli obrazy mają być bardzo podobne, niektóre proste parametry oparte na różnicy między dwoma obrazami mogą ci wiele powiedzieć. Kilka wskazówek:
źródło
Moje laboratorium również musiało rozwiązać ten problem i użyliśmy Tensorflow. Oto pełna implementacja aplikacji do wizualizacji podobieństwa obrazów.
Aby zapoznać się z samouczkiem na temat wektoryzacji obrazów w celu obliczenia podobieństwa, odwiedź tę stronę . Oto Python (ponownie, zobacz post z pełnym przepływem pracy):
źródło
Możesz użyć Perceptual Image Diff
Jest to narzędzie wiersza poleceń, które porównuje dwa obrazy za pomocą metryki percepcyjnej. Oznacza to, że wykorzystuje model obliczeniowy ludzkiego układu wzrokowego do określenia, czy dwa obrazy różnią się wizualnie, więc pomijane są drobne zmiany w pikselach. Ponadto radykalnie zmniejsza liczbę fałszywych alarmów spowodowanych różnicami w generowaniu liczb losowych, różnicach w systemie operacyjnym lub architekturze maszyny.
źródło
To trudny problem! Zależy to od tego, jak dokładny musisz być, i zależy od rodzaju obrazów, z którymi pracujesz. Możesz używać histogramów do porównywania kolorów, ale to oczywiście nie bierze pod uwagę przestrzennego rozmieszczenia tych kolorów na obrazach (tj. Kształtów). Wykrywanie krawędzi, po którym następuje pewnego rodzaju segmentacja (tj. Wybieranie kształtów), może zapewnić wzór do dopasowania do innego obrazu. Możesz użyć macierzy koocurencji do porównywania tekstur, traktując obrazy jako macierze wartości pikseli i porównując te macierze. Jest kilka dobrych książek na temat dopasowywania obrazów i wizji maszynowej - wyszukiwarka Amazon znajdzie je.
Mam nadzieję że to pomoże!
źródło
Niektóre rozwiązania oprogramowania do rozpoznawania obrazu w rzeczywistości nie są oparte wyłącznie na algorytmach, ale zamiast tego wykorzystują koncepcję sieci neuronowej . Sprawdź http://en.wikipedia.org/wiki/Artificial_neural_network, a mianowicie NeuronDotNet, która zawiera również interesujące próbki: http://neurondotnet.freehostia.com/index.html
źródło
Istnieją podobne badania wykorzystujące sieci neuronowe / mapy samoorganizujące się Kohonena
Istnieją zarówno bardziej akademickie systemy (Google dla PicSOM), jak i mniej akademickie
( http://www.generation5.org/content/2004/aiSomPic.asp , (prawdopodobnie nieodpowiednie dla wszystkich środowisk pracy)).
źródło
Obliczanie sumy kwadratów różnic wartości kolorów pikseli w drastycznie zmniejszonej wersji (np. 6x6 pikseli) działa dobrze. Identyczne obrazy dają 0, podobne obrazy dają małe liczby, różne obrazy dają duże.
Pomysł innych gości, aby włamać się do YUV, na początku brzmi intrygująco - chociaż mój pomysł działa świetnie, chcę, aby moje obrazy były obliczane jako „inne”, aby przyniosły poprawny wynik - nawet z perspektywy obserwatora ślepego na kolory.
źródło
To brzmi jak problem ze wzrokiem. Możesz zajrzeć do Adaptive Boosting, a także do algorytmu Burns Line Extraction. Koncepcje zawarte w tych dwóch powinny pomóc w podejściu do tego problemu. Wykrywanie krawędzi jest jeszcze prostszym miejscem do rozpoczęcia, jeśli jesteś nowy w algorytmach wizyjnych, ponieważ wyjaśnia podstawy.
Jeśli chodzi o parametry kategoryzacji:
źródło
W zależności od tego, ile dokładnych wyników potrzebujesz, możesz po prostu podzielić obrazy na bloki nxn pikseli i przeanalizować je. Jeśli uzyskasz różne wyniki w pierwszym bloku, nie możesz zatrzymać przetwarzania, co skutkuje pewną poprawą wydajności.
Aby przeanalizować kwadraty, możesz na przykład uzyskać sumę wartości kolorów.
źródło
Ten artykuł okazał się bardzo pomocny, wyjaśniając, jak to działa:
http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
źródło
Można wykonać pewnego rodzaju oszacowanie ruchu z dopasowaniem bloków między dwoma obrazami i zmierzyć całkowitą sumę reszt i kosztów wektora ruchu (podobnie jak w przypadku kodera wideo). To zrekompensowałoby ruch; aby uzyskać dodatkowe punkty, wykonaj oszacowanie ruchu z transformacją afiniczną (kompensuje powiększenia i rozciąganie itp.). Możesz również wykonać nakładające się bloki lub przepływ optyczny.
źródło
W pierwszej kolejności możesz spróbować użyć kolorowych histogramów. Jednak naprawdę musisz zawęzić problematyczną domenę. Ogólne dopasowanie obrazu to bardzo trudny problem.
źródło
Przepraszamy za późne uczestnictwo w dyskusji.
Możemy nawet użyć metodologii ORB do wykrycia punktów podobnych cech między dwoma obrazami. Poniższy link daje bezpośrednią implementację ORB w Pythonie
http://scikit-image.org/docs/dev/auto_examples/plot_orb.html
Nawet openCV ma bezpośrednią implementację ORB. Jeśli chcesz uzyskać więcej informacji, zapoznaj się z artykułem badawczym podanym poniżej.
https://www.researchgate.net/publication/292157133_Image_Matching_Using_SIFT_SURF_BRIEF_and_ORB_Performance_Comparison_for_Distorted_Images
źródło
W drugim wątku jest kilka dobrych odpowiedzi na ten temat, ale zastanawiam się, czy coś, co wiąże się z analizą spektralną, zadziała? To znaczy, podziel obraz na informacje o jego fazie i amplitudzie i porównaj je. Pozwoli to uniknąć niektórych problemów związanych z kadrowaniem, transformacją i różnicami intensywności. W każdym razie to tylko ja spekuluję, ponieważ wydaje się to interesującym problemem. Jeśli przeszukałeś http://scholar.google.com , jestem pewien, że mógłbyś wymyślić kilka artykułów na ten temat.
źródło