Potrzebuję prostego i szybkiego sposobu na porównanie dwóch obrazów w celu uzyskania podobieństwa. Tzn. Chcę uzyskać wysoką wartość, jeśli zawierają dokładnie to samo, ale mogą mieć nieco inne tło i mogą zostać przesunięte / zmienione o kilka pikseli.
(Bardziej konkretnie, jeśli to ma znaczenie: jedno zdjęcie jest ikoną, a drugie zdjęcie jest podobszarem zrzutu ekranu i chcę wiedzieć, czy ten podobszar jest dokładnie ikoną, czy nie.)
Mam pod ręką OpenCV, ale wciąż nie jestem do tego przyzwyczajony.
Jedna możliwość, o której do tej pory myślałem: Podziel oba zdjęcia na 10 x 10 komórek i dla każdej z tych 100 komórek porównaj histogram kolorów. Następnie mogę ustawić pewną skompilowaną wartość progową i jeśli wartość, którą otrzymam, jest powyżej tego progu, zakładam, że są one podobne.
Nie próbowałem jeszcze tego, jak dobrze to działa, ale myślę, że byłoby wystarczająco dobrze. Obrazy są już bardzo podobne (w moim przypadku użycia), więc mogę użyć dość wysokiej wartości progowej.
Sądzę, że istnieją dziesiątki innych możliwych rozwiązań, które działałyby mniej więcej (ponieważ samo zadanie jest dość proste, ponieważ chcę wykryć podobieństwo tylko wtedy, gdy są naprawdę bardzo podobne). Co byś zasugerował?
Istnieje kilka bardzo powiązanych / podobnych pytań dotyczących uzyskiwania podpisu / odcisku palca / skrótu z obrazu:
- OpenCV / SURF Jak wygenerować skrót obrazu / odcisk palca / podpis z deskryptorów?
- Odcisk palca obrazu w celu porównania podobieństwa wielu obrazów
- Wykrywanie niemal duplikatu obrazu
- OpenCV: Obraz odcisków palców i porównanie z bazą danych .
- więcej , więcej , więcej , więcej , więcej , więcej , więcej
Natknąłem się również na te implementacje, które mają takie funkcje, aby uzyskać odcisk palca:
- pHash
- imgSeek ( repozytorium GitHub ) (GPL) na podstawie papierowego Szybkiego Multiresolution Image Querying
- dopasowanie obrazu . Bardzo podobny do tego, czego szukałem. Podobnie jak pHash, oparty na sygnaturze obrazu dla dowolnego rodzaju obrazu, Goldberg i in . Wykorzystuje Python i Elasticsearch.
- iqdb
- ImageHash . obsługuje pHash.
- Image Deduplicator (imagededup) . Obsługuje CNN, PHash, DHash, WHash, AHash.
Kilka dyskusji na temat skrótów obrazu percepcyjnego: tutaj
Trochę poza tematem: Istnieje wiele metod tworzenia odcisków palców audio. MusicBrainz , usługa internetowa, która umożliwia wyszukiwanie utworów na podstawie linii papilarnych, ma dobry przegląd na swojej wiki . Używają teraz AcoustID . Służy do znajdowania dokładnych (lub głównie dokładnych) dopasowań. Aby znaleźć podobne dopasowania (lub jeśli masz tylko fragmenty lub wysoki poziom hałasu), spójrz na Echoprint . Powiązane pytanie SO znajduje się tutaj . Wygląda na to, że rozwiązano problem audio. Wszystkie te rozwiązania działają całkiem dobrze.
Nieco bardziej ogólne pytanie o rozmytych wyszukiwania w ogóle jest tutaj . Np. Występuje hash wrażliwy na lokalizację i wyszukiwanie najbliższego sąsiada .