cfa_to_rgb
— Umwandlung eines einkanaligen Farbmosaikbildes in ein RGB-Bild.
cfa_to_rgb(CFAImage : RGBImage : CFAType, Interpolation : )
cfa_to_rgb
wandelt ein einkanaliges Farbmosaikbild
CFAImage
in ein RGB-Bild RGBImage
um.
Farbmosaikbilder werden typischerweise von Ein-Chip-CCD-Kameras
erzeugt. Die Transformation von Farbmosaikbild in RGB-Bild erfolgt
typischerweise auf der Kamera selbst oder wird vom Gerätetreiber des
verwendeten Framegrabbers durchgeführt. In manchen Fällen wird
allerdings vom Gerätetreiber das Farbmosaikbild ohne Verarbeitung
weitergereicht. In diesem Fall wird typischerweise im jeweiligen
HALCON-Framegrabber-Interface die Konversion in ein RGB-Bild
durchgeführt. Der Operator cfa_to_rgb
bietet sich also
hauptsächlich dann zur Verwendung an, wenn die Bilder nicht mit dem
HALCON-Framegrabber-Interface (grab_image
oder
grab_image_async
) eingezogen werden, sondern mit einer
selbstgeschriebenen Funktionalität, die das Bild mit
gen_image1
oder gen_image1_extern
an HALCON
übergibt.
Bei Ein-Chip-CCD-Kameras sorgt ein Farbmosaikfilter vor dem Sensor
für die Erzeugung (unterabgetasteter) Farbinformation. Der am
häufigsten verwendete Farbmosaikfilter ist der sog. Bayer-Filter.
Die Farbfilter vor den Sensorelementen des CCD-Chips haben hierbei
folgende Anordnung:
Jeder Grauwert des Eingabebildes CFAImage
entspricht der
Helligkeit des Pixels hinter dem entsprechenden Farbfilter. In der
obigen Anordnung entspricht also das Pixel (0,0) einem Grünwert, das
Pixel (0,1) einem Blauwert. Die Anordnung des Bayer-Filters wird
vollständig bestimmt durch die ersten zwei Elemente der ersten
Bildzeile, welche mit CFAType
festgelegt werden kann. Dies
erlaubt insbesondere die korrekte Umwandlung von Farbmosaikbildern,
die aus einem größeren Bild ausgeschnitten worden sind (z.B. mit
crop_part
oder crop_rectangle1
).
Der Algorithmus, der zur Berechnung der RGB-Werte verwendet wird,
wird mit Interpolation
festgelegt. Für
Interpolation
= 'bilinear' wird eine bilineare
Interpolation durchgeführt. Dieser Algorithmus ist sehr schnell,
führt aber typischerweise an starken Kanten zu
„reißverschlussartigen“ Artefakten und Farbartefakten. Für
Interpolation
= 'bilinear_dir' wird eine
modifizierte Variante der bilinearen Interpolation durchgeführt, die
zu weniger reißverschlussartigen Artefakten, speziell bei
horizontalen oder vertikalen Kanten im Bild, führen kann. Das
Ergebnis kann aber immer noch Farbartefakte an starken Kanten
enthalten. Die Laufzeit dieses Algorithmus' ist nur wenig länger
als die der bilinearen Interpolation. Für Interpolation
= 'bilinear_enhanced' wird eine verbesserte Version der
bilinearen Interpolation verwendet, die in den meisten Fällen
deutlich weniger reißverschlussartige Artefakte und Farbartefakte
erzeugt als die anderen beiden bilinearen Algorithmen. Die Laufzeit
dieses Algorithmus ist deutlich länger als die der anderen beiden
Algorithmen.
Falls 'mmx_enable' auf 'true' gesetzt wird (und
die verwendete Hardware SIMD-Technologie unterstützt), wird die
Berechnung für byte-Bilder für Interpolation
=
'bilinear' und Interpolation
=
'bilinear_dir' intern unter Verwendung von SIMD-Technologie
durchgeführt.
cfa_to_rgb
kann für Interpolation
=
'bilinear' und Interpolation
=
'bilinear_dir' auf OpenCL Geräten ausgeführt werden. Dabei
sollte die Breite des Eingabebildes ein vielfaches von vier (für
byte-Bilder) bzw. zwei (für uint2-Bilder) betragen, da die Berechnung
sonst um ein vielfaches langsamer ist.
CFAImage
(input_object) singlechannelimage(-array) →
object (byte* / uint2*) *erlaubt für Compute Devices
Eingabebild.
RGBImage
(output_object) multichannel-image(-array) →
object (byte / uint2)
Ausgabebild.
CFAType
(input_control) string →
(string)
Art des Farbmosaiks.
Defaultwert: 'bayer_gb'
Werteliste: 'bayer_bg' , 'bayer_gb' , 'bayer_gr' , 'bayer_rg'
Interpolation
(input_control) string →
(string)
Art der Interpolation.
Defaultwert: 'bilinear'
Werteliste: 'bilinear' , 'bilinear_dir' , 'bilinear_enhanced'
cfa_to_rgb
liefert den Wert 2 (H_MSG_TRUE), falls die Parameter
korrekt sind. Das Verhalten bei leerer Eingabe (keine Eingabebilder
vorhanden) lässt sich mittels
set_system(::'no_object_result', <Result>:)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
gen_image1_extern
,
gen_image1
,
grab_image
Foundation