KlassenKlassenKlassenKlassen | | | | Operatoren

exhaustive_matchexhaustive_matchExhaustiveMatchexhaustive_matchExhaustiveMatchExhaustiveMatch (Operator)

Name

exhaustive_matchexhaustive_matchExhaustiveMatchexhaustive_matchExhaustiveMatchExhaustiveMatch — Matching zwischen einem Template und einem Bild.

Signatur

exhaustive_match(Image, RegionOfInterest, ImageTemplate : ImageMatch : Mode : )

Herror exhaustive_match(const Hobject Image, const Hobject RegionOfInterest, const Hobject ImageTemplate, Hobject* ImageMatch, const char* Mode)

Herror T_exhaustive_match(const Hobject Image, const Hobject RegionOfInterest, const Hobject ImageTemplate, Hobject* ImageMatch, const Htuple Mode)

Herror exhaustive_match(Hobject Image, Hobject RegionOfInterest, Hobject ImageTemplate, Hobject* ImageMatch, const HTuple& Mode)

HImage HImage::ExhaustiveMatch(const HRegion& RegionOfInterest, const HImage& ImageTemplate, const HTuple& Mode) const

HImageArray HImageArray::ExhaustiveMatch(const HRegion& RegionOfInterest, const HImage& ImageTemplate, const HTuple& Mode) const

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

void HOperatorSetX.ExhaustiveMatch(
[in] IHUntypedObjectX* Image, [in] IHUntypedObjectX* RegionOfInterest, [in] IHUntypedObjectX* ImageTemplate, [out] IHUntypedObjectX*ImageMatch, [in] VARIANT Mode)

IHImageX* HImageX.ExhaustiveMatch(
[in] IHRegionX* RegionOfInterest, [in] IHImageX* ImageTemplate, [in] BSTR Mode)

static void HOperatorSet.ExhaustiveMatch(HObject image, HObject regionOfInterest, HObject imageTemplate, out HObject imageMatch, HTuple mode)

HImage HImage.ExhaustiveMatch(HRegion regionOfInterest, HImage imageTemplate, string mode)

Beschreibung

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.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte)

Eingabebild.

RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest (input_object)  region objectHRegionHRegionHRegionHRegionXHobject

Suchbereich im Eingabebild.

ImageTemplateImageTemplateImageTemplateImageTemplateImageTemplateimageTemplate (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte)

Dieser Bildbereich wird innerhalb von RegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestRegionOfInterestregionOfInterest mit ImageImageImageImageImageimage „gematcht“.

ImageMatchImageMatchImageMatchImageMatchImageMatchimageMatch (output_object)  image(-array) objectHImageHImageHImageHImageXHobject * (byte)

Ergebnisbild: Werte des Matching-Kriteriums.

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

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"

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)

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_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.

Vorgänger

draw_regiondraw_regionDrawRegiondraw_regionDrawRegionDrawRegion, draw_rectangle1draw_rectangle1DrawRectangle1draw_rectangle1DrawRectangle1DrawRectangle1

Nachfolger

local_maxlocal_maxLocalMaxlocal_maxLocalMaxLocalMax, thresholdthresholdThresholdthresholdThresholdThreshold

Alternativen

exhaustive_match_mgexhaustive_match_mgExhaustiveMatchMgexhaustive_match_mgExhaustiveMatchMgExhaustiveMatchMg

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren