2013-07-22 13 views
5

Tworzę prostą aplikację openCV za pomocą dopasowywania szablonów, gdzie muszę porównać znajdź mały obrazek na dużym obrazie i zwróć wynik jako prawdziwy (jeśli znaleziono dopasowanie) lub fałsz (nie znaleziono żadnego meczu).Co to jest szablon OpenCV pasujący do zakresu wartości Max Min? Potrzebuję być użyty jako theshold/C++/java

Imgproc.matchTemplate(largeImage, smallImage, result, matchMethod); 
    Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat()); 

    MinMaxLocResult mmr = Core.minMaxLoc(result); 

    double minMaxValue = 1; 
    if (matchMethod== Imgproc.TM_SQDIFF || matchMethod== Imgproc.TM_SQDIFF_NORMED) 
    { 
     minMaxValue = mmr.minVal; 
     useMinThreshold = true; 
    } 
    else 
    { 
     minMaxValue = mmr.maxVal; 
    } 

Teraz problem polega na podjęciu decyzji (prawda/fałsz) przy użyciu wartości minMaxValue. Wiem, że powyższe dwie metody TM_SQDIFF i TM_SQDIFF_NORMED zwraca niskie wartości, podczas gdy inne zwracają wysokie wartości, więc mogę mieć 2 różne progi i porównać jeden z progów (w zależności od typu metody szablonu).

Byłoby wspaniale, gdyby ktoś mógł wyjaśnić, co jest wartością minVal i maxVal, którą zwraca MinMaxLocResult.

Czy to zakres od 0 do 1?

Jeśli tak, w przypadku szablonu szablonu maks. Wartość 1 jest idealnie dopasowana?

Odpowiedz

7

MinMaxLocResult nie zwraca zakresu minVal i maxVal. minVal i maxVal to tylko minimalne i maksymalne pasujące wyniki, które można zobaczyć w link.

Struktura MinMaxLocResult posiada również minLoc i maxLoc właściwości, które są typu Point, dając lokalizacje ogłoszeń. Biorąc pod uwagę, że używasz TM_SQDIFF lub TM_SQDIFF_NORMED jako kryterium dopasowania, najlepiej pasującą lokalizacją będzie mmr.minLoc.

Aby ustawić próg wykrywania, można zadeklarować zmienną double thresholdMatch i ustawić jej wartość eksperymentalnie. jeśli MINVAL < thresholdMatch to można powiedzieć, że obiekt docelowy jest wykrywany

+0

Dzięki Thomas, więc oznaczało, że decyzja (prawda/fałsz) może być podjęta za pomocą minLoc lub maxLoc zamiast minVal/maxVal? –

+0

@Nie, dopasowanie do szablonu nie podaje informacji o tym, czy znaleziono dokładny obiekt, czy nie. Mówi raczej, że "najlepiej pasujący (potencjalny) obiekt znajduje się w tej lokalizacji" i jest to minLoc w tym konkretnym przypadku. –

+0

Ok, W tym konkretnym przykładzie mogę jednak lekceważyć problemy z skalowaniem rotacji skalowania. Wciąż dopasowanie szablonu nie jest najlepsze do osiągnięcia w tym celu (return a true/false)? Rozumiem podkreślony punkt, tj. Mówi, że "najlepiej pasujący (potencjalny) obiekt znajduje się w tej lokalizacji" Ale nadal muszę wiedzieć, czy istnieje progowe podejście, które doprowadzi do wniosku, czy obiekt został znaleziony. Może nie być z MinMaxLocResult, ale czy są jakieś alternatywy? NIE MA ŻADNEGO ZNACZENIA, JEŚLI JEST TO FUNKCJONALNA OPIS TECHNIKI EKSTRAKCJI –

2

Dont normalizuje wynik, to będzie dać właściwą wartość, to znaczy usunąć tę linię

Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat()); 
+0

jak rozumiem, czy jest to właściwa wartość? @Mehul Thakkar – Fay007