Name
exhaustive_matchexhaustive_matchExhaustiveMatchexhaustive_matchExhaustiveMatchExhaustiveMatch — Matching zwischen einem Template und einem Bild.
exhaustive_matchexhaustive_matchExhaustiveMatchexhaustive_matchExhaustiveMatchExhaustiveMatch führt ein Matching zwischen
ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate und ImageImageImageImageImageimage innerhalb des
Bildbereichs RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest durch.
Dabei wird ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate über alle Punkte von
ImageImageImageImageImageimage, die innerhalb der RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest liegen,
geschoben.
Abhängig vom Parameter ModeModeModeModeModemode wird ein Matching-Kriterium
berechnet. Die Ergebniswerte werden in ImageMatchImageMatchImageMatchImageMatchImageMatchimageMatch abgelegt.
Folgende Matching-Kriterien (ModeModeModeModeModemode) stehen zur Verfügung:
- 'norm_correlation'
-
wobei X[i][j] den Grauwert in der i-ten Zeile und j-ten Spalte des
Bildes X bezeichnet. (l,c) ist der Schwerpunkt der Region von
ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate.
u und v werden so gewählt, dass alle Punkte des Templates erreicht
werden, i,j laufen über die RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest.
An den Bildrändern werden nur die Teile von ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate
berücksichtigt, die innerhalb des Bildes liegen (d.h. u und v werden
entsprechend eingeschränkt). Wertebereich: 0 - 255 (best fit).
- 'dfd'
Berechnung der mittleren "displaced frame difference":
Bezeichnungen wie bei 'norm_correlation'. AREA ( X ) steht für die
Fläche der Region X. Wertebereich: 0 (best fit) - 255.
Sowohl die normierte Korrelation, als auch die „displaced frame
difference“ sind in ihrer Berechnung (abhängig von der Fläche des
ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate) sehr aufwendig.
Es ist daher wichtig, die Eingaberegion
(RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest) möglichst einzugrenzen,
d.h. den Filter nur in einer möglichst eng umrissenen „region of
interest“ anzuwenden.
Qualitativ liefern beide Modi vergleichbare Ergebnisse. Der Modus 'dfd'
ist jedoch um etwa Faktor 3.5 schneller.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Suchbereich im Eingabebild.
Ergebnisbild: Werte des Matching-Kriteriums.
Gewünschtes Matching-Kriterium.
Defaultwert:
'dfd'
"dfd"
"dfd"
"dfd"
"dfd"
"dfd"
Werteliste: 'dfd'"dfd""dfd""dfd""dfd""dfd", 'norm_correlation'"norm_correlation""norm_correlation""norm_correlation""norm_correlation""norm_correlation"
read_image(Image,'monkey')
dev_display(Image)
draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
reduce_domain(Image,Rectangle,Template)
exhaustive_match(Image,Image,Template,ImageMatch,'dfd')
invert_image(ImageMatch,ImageInvert)
local_max(Image,Maxima)
union1(Maxima,AllMaxima)
add_channels(AllMaxima,ImageInvert,FitMaxima)
threshold(FitMaxima,BestFit,230.0,255.0)
dev_display(BestFit)
read_image(&Image,"monkey");
disp_image(Image,WindowHandle);
/* mark one eye */
draw_rectangle2(WindowHandle,&Row,&Column,&Phi,&Length1,&Length2);
gen_rectangle2(&Rectangle,Row,Column,Phi,Length1,Length2);
reduce_domain(Image,Rectangle,&Template);
exhaustive_match(Image,Image,Template,&ImageMatch,'dfd');
invert_image(ImageMatch,&ImageInvert);
local_max(ImageInvert,&Maxima);
union1(Maxima,&AllMaxima);
add_channels(AllMaxima,ImageInvert,&FitMaxima);
threshold(FitMaxima,&BestFit,230.0,255.0);
disp_region(BestFit,WindowHandle);
read_image(Image,'monkey')
dev_display(Image)
draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
reduce_domain(Image,Rectangle,Template)
exhaustive_match(Image,Image,Template,ImageMatch,'dfd')
invert_image(ImageMatch,ImageInvert)
local_max(Image,Maxima)
union1(Maxima,AllMaxima)
add_channels(AllMaxima,ImageInvert,FitMaxima)
threshold(FitMaxima,BestFit,230.0,255.0)
dev_display(BestFit)
read_image(Image,'monkey')
dev_display(Image)
draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
reduce_domain(Image,Rectangle,Template)
exhaustive_match(Image,Image,Template,ImageMatch,'dfd')
invert_image(ImageMatch,ImageInvert)
local_max(Image,Maxima)
union1(Maxima,AllMaxima)
add_channels(AllMaxima,ImageInvert,FitMaxima)
threshold(FitMaxima,BestFit,230.0,255.0)
dev_display(BestFit)
read_image(Image,'monkey')
dev_display(Image)
draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
reduce_domain(Image,Rectangle,Template)
exhaustive_match(Image,Image,Template,ImageMatch,'dfd')
invert_image(ImageMatch,ImageInvert)
local_max(Image,Maxima)
union1(Maxima,AllMaxima)
add_channels(AllMaxima,ImageInvert,FitMaxima)
threshold(FitMaxima,BestFit,230.0,255.0)
dev_display(BestFit)
read_image(Image,'monkey')
dev_display(Image)
draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
reduce_domain(Image,Rectangle,Template)
exhaustive_match(Image,Image,Template,ImageMatch,'dfd')
invert_image(ImageMatch,ImageInvert)
local_max(Image,Maxima)
union1(Maxima,AllMaxima)
add_channels(AllMaxima,ImageInvert,FitMaxima)
threshold(FitMaxima,BestFit,230.0,255.0)
dev_display(BestFit)
Sind die Parameterwerte korrekt, dann liefert exhaustive_matchexhaustive_matchExhaustiveMatchexhaustive_matchExhaustiveMatchExhaustiveMatch
den Wert 2 (H_MSG_TRUE).
Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt
sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
draw_regiondraw_regionDrawRegiondraw_regionDrawRegionDrawRegion,
draw_rectangle1draw_rectangle1DrawRectangle1draw_rectangle1DrawRectangle1DrawRectangle1
local_maxlocal_maxLocalMaxlocal_maxLocalMaxLocalMax,
thresholdthresholdThresholdthresholdThresholdThreshold
exhaustive_match_mgexhaustive_match_mgExhaustiveMatchMgexhaustive_match_mgExhaustiveMatchMgExhaustiveMatchMg
Foundation