convol_image
— Berechnung der Korrelation eines Bildes mit einer linearen Maske.
convol_image(Image : ImageResult : FilterMask, Margin : )
convol_image
berechnet die Korrelation des Eingabebildes
Image
mit einer Filtermaske. Die Filtermatrix, die durch
FilterMask
definiert ist, kann dabei entweder aus einer Datei oder einem Tupel
generiert werden. Es kann bei der Filterung zwischen verschiedenen
Randbehandlungen (Margin
) 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 FilterMask
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
FilterMask
ü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 FilterMask
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
FilterMask
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 FilterMask
separierbar (dies wird automatisch detektiert),
benutzt convol_image
eine spezielle Implementierung, die
signifikant schneller ist als die Filterung mit nicht separierbaren
Masken.
Ist 'sse2_enable' auf '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' auf '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' auf 'true' gesetzt (und dieses SIMD Instruktionsset verfügbar), werden die internen Berechnungen für 'real' Bilder mit AVX SIMD Technologie durchgeführt.
Es ist zu beachten, dass convol_image
nicht die Faltung des
Eingabebildes mit der gegebenen Filtermaske berechnet, sondern die
Korrelation. Die Filtermaske wird also nicht gespiegelt, sondern
direkt verwendet.
convol_image
kann bei Verwendung einer quadratischen 3x3 oder 5x5
Filtermaske und der Randbehandlung '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.
Image
(input_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / real)
Bilder, deren Korrelation mit der Filtermaske berechnet werden.
ImageResult
(output_object) multichannel-image(-array) →
object (byte / int2 / uint2 / real)
Ergebnis der Korrelation.
FilterMask
(input_control) filename.read(-array) →
(string / integer / real)
Filtermaske als Dateiname oder Tupel.
Defaultwert: 'sobel'
Wertevorschläge: 'sobel' , 'laplace4' , 'lowpas_3_3'
Dateiendung: .fil
Margin
(input_control) string →
(string / integer / real)
Randbehandlung.
Defaultwert: 'mirrored'
Werteliste (für Compute Devices): 'mirrored'
Wertevorschläge: 'mirrored' , 'cyclic' , 'continued' , 0, 30, 60, 90, 120, 150, 180, 210, 240, 255
Foundation