Name
exhaustive_matchexhaustive_matchExhaustiveMatchExhaustiveMatch — Matching zwischen einem Template und einem Bild.
exhaustive_matchexhaustive_matchExhaustiveMatchExhaustiveMatchExhaustiveMatch führt ein Matching zwischen
ImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate und ImageImageImageImageimage innerhalb des
Bildbereichs RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest durch.
Dabei wird ImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate über alle Punkte von
ImageImageImageImageimage, die innerhalb der RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest liegen,
geschoben.
Abhängig vom Parameter ModeModeModeModemode wird ein Matching-Kriterium
berechnet. Die Ergebniswerte werden in ImageMatchImageMatchImageMatchImageMatchimageMatch abgelegt.
Folgende Matching-Kriterien (ModeModeModeModemode) 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
ImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate.
u und v werden so gewählt, dass alle Punkte des Templates erreicht
werden, i,j laufen über die RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest.
An den Bildrändern werden nur die Teile von ImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate
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
ImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate) sehr aufwendig.
Es ist daher wichtig, die Eingaberegion
(RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest) 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"
Werteliste: 'dfd'"dfd""dfd""dfd""dfd", '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)
Sind die Parameterwerte korrekt, dann liefert exhaustive_matchexhaustive_matchExhaustiveMatchExhaustiveMatchExhaustiveMatch
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>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
draw_regiondraw_regionDrawRegionDrawRegionDrawRegion,
draw_rectangle1draw_rectangle1DrawRectangle1DrawRectangle1DrawRectangle1
local_maxlocal_maxLocalMaxLocalMaxLocalMax,
thresholdthresholdThresholdThresholdThreshold
exhaustive_match_mgexhaustive_match_mgExhaustiveMatchMgExhaustiveMatchMgExhaustiveMatchMg
Foundation