2009-01-18 13 views
5

Szukam najlepszego sposobu na wykrycie obrazu w innym obrazie. Mam mały obrazek i chciałbym znaleźć lokalizację, w której się pojawi w ramach większego obrazu - który faktycznie będzie przechwytywany na ekranie. Koncepcyjnie to jest jak "Gdzie jest Waldo?" sortowanie wyszukiwania na większym obrazie.Znajdź obraz w obrazku

Czy istnieją skuteczne/szybkie sposoby osiągnięcia tego? Szybkość jest ważniejsza niż pamięć.

Edit:

do „wewnętrzny” obraz może nie zawsze mają taką samą skalę, ale mają ten sam obrót.

Nie można bezpiecznie założyć, że obraz będzie idealnie zawarty w drugim, piksel na piksel.

+0

Wątpię, aby język był tutaj problemem. Czy kluczem jest odpowiedni zestaw narzędzi do przetwarzania obrazu. – PolyThinker

+0

Czy musi pasować "dokładnie" piksel po pikselu? A co z rotacją i skalowaniem? – chakrit

+0

@PolyThinker: To prawda, odrzucę ten konkretny kwalifikator dla pytania. – dmanxiii

Odpowiedz

7

Wikipedia ma artykuł o Template Matching, z przykładowym kodem.

(Mimo, że strona nie obsługuje zmienione wagi, posiada linki do innych stylów dopasowania, na przykład Scale invariant feature transform)

+0

+1, algorytm SIFT, którego użyłem dużo w http://user.cs.tu-berlin.de/~nowozin/autopano-sift/, a jego bardzo skuteczny w tym, co robi, nawet obsługuje zniekształcenia obrazu. –

+0

Istnieje implementacja SIFT w języku Java na stronie http://fly.mpi-cbg.de/~saalfeld/javasift.html –

0

Można traktować to jako problem z podciąganiu, w którym znaki w alfabecie są pikselami, a ciąg znaków jest obrazem. Będziesz także potrzebował użyć znaku specjalnego w podobnym duchu do łamania linii, aby wskazać granicę obrazu.

Algorytm chcesz to na wikipedii: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

Aktualizacja: Jeśli nie można przyjąć, że obraz jest doskonale zawarte w drugiej, piksel na piksel, to podejście nie będzie działać.

Istnieją inne, bardziej skomplikowane algorytmy oparte na tej samej koncepcji programowania dynamicznego co powyższe, ale nie będę do nich wchodzić, chyba że będzie to konieczne.

+0

Jeśli obrazy są JPEG, będziesz mieć ból głowy :-) – PolyThinker

+0

Tak. To bardzo, bardzo dobry punkt. Jeśli nie możesz założyć idealnego dopasowania, wówczas pojęcie "najlepszy", ponieważ jest trudne i "wydajne/szybkie", staje się trudne. Trzeba by było zrobić coś w oparciu o minimalizację energii/programowanie dynamiczne. – Owen

+0

Głosowano w dół, ponieważ metody takie jak ta nie będą działać w ogóle na obrazach. – endolith