exhaustive_match exhaustive_match ExhaustiveMatch ExhaustiveMatch (Operator)
Name
exhaustive_match exhaustive_match ExhaustiveMatch ExhaustiveMatch
— Matching zwischen einem Template und einem Bild.
Signatur
void ExhaustiveMatch (const HObject& Image , const HObject& RegionOfInterest , const HObject& ImageTemplate , HObject* ImageMatch , const HTuple& Mode )
HImage HImage ::ExhaustiveMatch (const HRegion& RegionOfInterest , const HImage& ImageTemplate , const HString& Mode ) const
HImage HImage ::ExhaustiveMatch (const HRegion& RegionOfInterest , const HImage& ImageTemplate , const char* Mode ) const
HImage HImage ::ExhaustiveMatch (const HRegion& RegionOfInterest , const HImage& ImageTemplate , const wchar_t* Mode ) const
(Nur Windows)
Beschreibung
exhaustive_match exhaustive_match ExhaustiveMatch ExhaustiveMatch ExhaustiveMatch
führt ein Matching zwischen
ImageTemplate ImageTemplate ImageTemplate ImageTemplate imageTemplate
und Image Image Image Image image
innerhalb des
Bildbereichs RegionOfInterest RegionOfInterest RegionOfInterest RegionOfInterest regionOfInterest
durch.
Dabei wird ImageTemplate ImageTemplate ImageTemplate ImageTemplate imageTemplate
über alle Punkte von
Image Image Image Image image
, die innerhalb der RegionOfInterest RegionOfInterest RegionOfInterest RegionOfInterest regionOfInterest
liegen,
geschoben.
Abhängig vom Parameter Mode Mode Mode Mode mode
wird ein Matching-Kriterium
berechnet. Die Ergebniswerte werden in ImageMatch ImageMatch ImageMatch ImageMatch imageMatch
abgelegt.
Folgende Matching-Kriterien (Mode Mode Mode Mode mode
) 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
ImageTemplate ImageTemplate ImageTemplate ImageTemplate imageTemplate
.
u und v werden so gewählt, dass alle Punkte des Templates erreicht
werden, i,j laufen über die RegionOfInterest RegionOfInterest RegionOfInterest RegionOfInterest regionOfInterest
.
An den Bildrändern werden nur die Teile von ImageTemplate ImageTemplate ImageTemplate ImageTemplate imageTemplate
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
ImageTemplate ImageTemplate ImageTemplate ImageTemplate imageTemplate
) sehr aufwendig.
Es ist daher wichtig, die Eingaberegion
(RegionOfInterest RegionOfInterest RegionOfInterest RegionOfInterest regionOfInterest
) 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.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Automatisch parallelisiert auf Tupelebene.
Parameter
Image Image Image Image image
(input_object) singlechannelimage(-array) →
object HImage HImage Hobject (byte)
Eingabebild.
RegionOfInterest RegionOfInterest RegionOfInterest RegionOfInterest regionOfInterest
(input_object) region →
object HRegion HRegion Hobject
Suchbereich im Eingabebild.
ImageMatch ImageMatch ImageMatch ImageMatch imageMatch
(output_object) image(-array) →
object HImage HImage Hobject * (byte)
Ergebnisbild: Werte des Matching-Kriteriums.
Mode Mode Mode Mode mode
(input_control) string →
HTuple HTuple Htuple (string) (string ) (HString ) (char* )
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"
Beispiel (HDevelop)
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)
Beispiel (C)
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);
Beispiel (HDevelop)
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)
Beispiel (HDevelop)
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)
Beispiel (HDevelop)
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)
Ergebnis
Sind die Parameterwerte korrekt, dann liefert exhaustive_match exhaustive_match ExhaustiveMatch ExhaustiveMatch ExhaustiveMatch
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.
Vorgänger
draw_region draw_region DrawRegion DrawRegion DrawRegion
,
draw_rectangle1 draw_rectangle1 DrawRectangle1 DrawRectangle1 DrawRectangle1
Nachfolger
local_max local_max LocalMax LocalMax LocalMax
,
threshold threshold Threshold Threshold Threshold
Alternativen
exhaustive_match_mg exhaustive_match_mg ExhaustiveMatchMg ExhaustiveMatchMg ExhaustiveMatchMg
Modul
Foundation