convol_imageconvol_imageConvolImageConvolImage (Operator)

Name

convol_imageconvol_imageConvolImageConvolImage — Berechnung der Korrelation eines Bildes mit einer linearen Maske.

Signatur

convol_image(Image : ImageResult : FilterMask, Margin : )

Herror convol_image(const Hobject Image, Hobject* ImageResult, const char* FilterMask, const char* Margin)

Herror T_convol_image(const Hobject Image, Hobject* ImageResult, const Htuple FilterMask, const Htuple Margin)

void ConvolImage(const HObject& Image, HObject* ImageResult, const HTuple& FilterMask, const HTuple& Margin)

HImage HImage::ConvolImage(const HTuple& FilterMask, const HTuple& Margin) const

HImage HImage::ConvolImage(const HString& FilterMask, const HString& Margin) const

HImage HImage::ConvolImage(const char* FilterMask, const char* Margin) const

HImage HImage::ConvolImage(const wchar_t* FilterMask, const wchar_t* Margin) const   (Nur Windows)

static void HOperatorSet.ConvolImage(HObject image, out HObject imageResult, HTuple filterMask, HTuple margin)

HImage HImage.ConvolImage(HTuple filterMask, HTuple margin)

HImage HImage.ConvolImage(string filterMask, string margin)

Beschreibung

convol_imageconvol_imageConvolImageConvolImageConvolImage berechnet die Korrelation des Eingabebildes ImageImageImageImageimage mit einer Filtermaske. Die Filtermatrix, die durch FilterMaskFilterMaskFilterMaskFilterMaskfilterMask definiert ist, kann dabei entweder aus einer Datei oder einem Tupel generiert werden. Es kann bei der Filterung zwischen verschiedenen Randbehandlungen (MarginMarginMarginMarginmargin) gewählt werden: Grauwert Bildpunkte außerhalb der Bildränder werden als konstant (mit dem angegebenen Grauwert) angenommen. 'continued' Fortsetzung der Randpunkte. 'cyclic' zyklische Fortsetzung der Bildränder. 'mirrored' Spiegelung der Bildpunkte an den Bildrändern. Für alle Positionen im Bild wird die Korrelation des Bildes mit der gegebenen FFiltermaske berechnet. Ein evtl. auftretender Über- bzw. Unterlauf von Grauwerten wird beschnitten. Falls Filter verwendet werden, die negative Ausgabewerte erzeugen (z.B. Ableitungsfilter), sollte das Eingabebild ein Bild vom Typ int2 oder real sein.

Der Bezugspunkt der Filtermatrix, d.h. das Pixel, das an der Position liegt, für die gerade die Korrelation berechnet wird, wird wie folgt bestimmt: Erst wird die Region aller Filterpixel bestimmt, die ein Gewicht ungleich 0 haben. Dann wird der Schwerpunkt dieser Region berechnet und gerundet. Dieser Wert ist der Bezugspunkt der Filtermatrix.

Wird in FilterMaskFilterMaskFilterMaskFilterMaskfilterMask ein Dateiname übergeben, wird die Filtermatrix aus einer Textdatei mit folgender Struktur eingelesen: <Matrixgröße> <Inverser Gewichtungsfaktor> <Matrix> In der ersten Zeile steht die Größe der Filtermatrix, die durch zwei Zahlen (durch Leerzeichen getrennt) angegeben wird (z.B. 3 3 für 3 x 3). Dabei ist die erste Zahl die Höhe der Filtermaske und die zweite Zahl ihre Breite. In der nächsten Zeile steht eine ganze Zahl, durch die das Ergebnis der Matrizenberechnung für einen Bildpunkt dividiert wird. Ab der nächsten Zeile steht die Filtermatrix, die durch ganze Zahlen (getrennt durch Leerzeichen) angegeben wird. Pro Textzeile wird eine Matrixzeile angegeben. Die Dateiendung für die Filtermatrix ist in HALCON 'fil'. Diese kann beim Aufruf weggelassen werden. Soll die Filtermaske aus einem Tupel generiert werden, muss das in FilterMaskFilterMaskFilterMaskFilterMaskfilterMask übergebene Tupel ebenfalls dem oben beschriebenen Format genügen, mit dem Unterschied, dass in diesem Fall kein Zeilenumbruch notwendig ist.

Angenommen, man möchte beispielsweise die Filtermaske

verwenden. Soll die Filtermaske aus einer Datei generiert werden, muss die Datei wie folgt aussehen:

3 3 16 1 2 1 2 4 2 1 2 1

Soll die Filtermaske dagegen aus einem Tupel generiert werden, muss für FilterMaskFilterMaskFilterMaskFilterMaskfilterMask folgendes Tupel übergeben werden:

[3,3,16,1,2,1,2,4,2,1,2,1]

Es ist außerdem möglich, zwei Vektoren anstelle einer Matrix in FilterMaskFilterMaskFilterMaskFilterMaskfilterMask zu übergeben:

[MaskHeight,MaskWidth,Weight,V1,V2]

Das äußere Produkt dieser beiden Vektoren bildet dann die Filtermatrix:

Das heißt, obige Matrix könnte auch wie folgt übergeben werden:

[3,3,16,1,2,1,1,2,1]

Ist FilterMaskFilterMaskFilterMaskFilterMaskfilterMask separierbar (dies wird automatisch detektiert), benutzt convol_imageconvol_imageConvolImageConvolImageConvolImage eine spezielle Implementierung, die signifikant schneller ist als die Filterung mit nicht separierbaren Masken.

Ist 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable" auf 'true'"true""true""true""true" gesetzt (und dieses SIMD Instruktionsset verfügbar), werden die internen Berechnungen für 'byte' und 'real' Bilder mit SIMD Technologie durchgeführt. Ist 'sse41_enable'"sse41_enable""sse41_enable""sse41_enable""sse41_enable" auf 'true'"true""true""true""true" gesetzt (und dieses SIMD Instruktionsset verfügbar), werden die internen Berechnungen für 'int2' und 'uint2' Bilder mit SIMD Technologie durchgeführt. Ist 'avx_enable'"avx_enable""avx_enable""avx_enable""avx_enable" auf 'true'"true""true""true""true" gesetzt (und dieses SIMD Instruktionsset verfügbar), werden die internen Berechnungen für 'real' Bilder mit AVX SIMD Technologie durchgeführt.

Achtung

Es ist zu beachten, dass convol_imageconvol_imageConvolImageConvolImageConvolImage nicht die Faltung des Eingabebildes mit der gegebenen Filtermaske berechnet, sondern die Korrelation. Die Filtermaske wird also nicht gespiegelt, sondern direkt verwendet.

convol_imageconvol_imageConvolImageConvolImageConvolImage kann bei Verwendung einer quadratischen 3x3 oder 5x5 Filtermaske und der Randbehandlung 'mirrored'"mirrored""mirrored""mirrored""mirrored" auf OpenCL Geräten ausgeführt werden.

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / int2 / uint2 / real)

Bilder, deren Korrelation mit der Filtermaske berechnet werden.

ImageResultImageResultImageResultImageResultimageResult (output_object)  multichannel-image(-array) objectHImageHImageHobject * (byte / int2 / uint2 / real)

Ergebnis der Korrelation.

FilterMaskFilterMaskFilterMaskFilterMaskfilterMask (input_control)  filename.read(-array) HTupleHTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

Filtermaske als Dateiname oder Tupel.

Defaultwert: 'sobel' "sobel" "sobel" "sobel" "sobel"

Wertevorschläge: 'sobel'"sobel""sobel""sobel""sobel", 'laplace4'"laplace4""laplace4""laplace4""laplace4", 'lowpas_3_3'"lowpas_3_3""lowpas_3_3""lowpas_3_3""lowpas_3_3"

Dateiendung: .fil

MarginMarginMarginMarginmargin (input_control)  string HTupleHTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

Randbehandlung.

Defaultwert: 'mirrored' "mirrored" "mirrored" "mirrored" "mirrored"

Werteliste (für Compute Devices): 'mirrored'"mirrored""mirrored""mirrored""mirrored"

Wertevorschläge: 'mirrored'"mirrored""mirrored""mirrored""mirrored", 'cyclic'"cyclic""cyclic""cyclic""cyclic", 'continued'"continued""continued""continued""continued", 0, 30, 60, 90, 120, 150, 180, 210, 240, 255

Modul

Foundation