KlassenKlassenKlassenKlassen | | | | Operatoren

cfa_to_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb (Operator)

Name

cfa_to_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb — Umwandlung eines einkanaligen Farbmosaikbildes in ein RGB-Bild.

Signatur

cfa_to_rgb(CFAImage : RGBImage : CFAType, Interpolation : )

Herror cfa_to_rgb(const Hobject CFAImage, Hobject* RGBImage, const char* CFAType, const char* Interpolation)

Herror T_cfa_to_rgb(const Hobject CFAImage, Hobject* RGBImage, const Htuple CFAType, const Htuple Interpolation)

Herror cfa_to_rgb(Hobject CFAImage, Hobject* RGBImage, const HTuple& CFAType, const HTuple& Interpolation)

HImage HImage::CfaToRgb(const HTuple& CFAType, const HTuple& Interpolation) const

HImageArray HImageArray::CfaToRgb(const HTuple& CFAType, const HTuple& Interpolation) const

void CfaToRgb(const HObject& CFAImage, HObject* RGBImage, const HTuple& CFAType, const HTuple& Interpolation)

HImage HImage::CfaToRgb(const HString& CFAType, const HString& Interpolation) const

HImage HImage::CfaToRgb(const char* CFAType, const char* Interpolation) const

void HOperatorSetX.CfaToRgb(
[in] IHUntypedObjectX* CFAImage, [out] IHUntypedObjectX*RGBImage, [in] VARIANT CFAType, [in] VARIANT Interpolation)

IHImageX* HImageX.CfaToRgb(
[in] BSTR CFAType, [in] BSTR Interpolation)

static void HOperatorSet.CfaToRgb(HObject CFAImage, out HObject RGBImage, HTuple CFAType, HTuple interpolation)

HImage HImage.CfaToRgb(string CFAType, string interpolation)

Beschreibung

cfa_to_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb wandelt ein einkanaliges Farbmosaikbild CFAImageCFAImageCFAImageCFAImageCFAImageCFAImage in ein RGB-Bild RGBImageRGBImageRGBImageRGBImageRGBImageRGBImage 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_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb bietet sich also hauptsächlich dann zur Verwendung an, wenn die Bilder nicht mit dem HALCON-Framegrabber-Interface (grab_imagegrab_imageGrabImagegrab_imageGrabImageGrabImage oder grab_image_asyncgrab_image_asyncGrabImageAsyncgrab_image_asyncGrabImageAsyncGrabImageAsync) eingezogen werden, sondern mit einer selbstgeschriebenen Funktionalität, die das Bild mit gen_image1gen_image1GenImage1gen_image1GenImage1GenImage1 oder gen_image1_externgen_image1_externGenImage1Externgen_image1_externGenImage1ExternGenImage1Extern 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 CFAImageCFAImageCFAImageCFAImageCFAImageCFAImage 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 CFATypeCFATypeCFATypeCFATypeCFATypeCFAType festgelegt werden kann. Dies erlaubt insbesondere die korrekte Umwandlung von Farbmosaikbildern, die aus einem größeren Bild ausgeschnitten worden sind (z.B. mit crop_partcrop_partCropPartcrop_partCropPartCropPart oder crop_rectangle1crop_rectangle1CropRectangle1crop_rectangle1CropRectangle1CropRectangle1).

Der Algorithmus, der zur Berechnung der RGB-Werte verwendet wird, wird mit InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation festgelegt. Für InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""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 InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear_dir'"bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir""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 InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear_enhanced'"bilinear_enhanced""bilinear_enhanced""bilinear_enhanced""bilinear_enhanced""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'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" auf 'true'"true""true""true""true""true" gesetzt wird (und die verwendete Hardware SIMD-Technologie unterstützt), wird die Berechnung für byte-Bilder für InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" und InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear_dir'"bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir" intern unter Verwendung von SIMD-Technologie durchgeführt.

cfa_to_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb kann für InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" und InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear_dir'"bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir""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.

Parallelisierung

Parameter

CFAImageCFAImageCFAImageCFAImageCFAImageCFAImage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte* / uint2*) *erlaubt für Compute Devices

Eingabebild.

RGBImageRGBImageRGBImageRGBImageRGBImageRGBImage (output_object)  multichannel-image(-array) objectHImageHImageHImageHImageXHobject * (byte / uint2)

Ausgabebild.

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

Art des Farbmosaiks.

Defaultwert: 'bayer_gb' "bayer_gb" "bayer_gb" "bayer_gb" "bayer_gb" "bayer_gb"

Werteliste: 'bayer_bg'"bayer_bg""bayer_bg""bayer_bg""bayer_bg""bayer_bg", 'bayer_gb'"bayer_gb""bayer_gb""bayer_gb""bayer_gb""bayer_gb", 'bayer_gr'"bayer_gr""bayer_gr""bayer_gr""bayer_gr""bayer_gr", 'bayer_rg'"bayer_rg""bayer_rg""bayer_rg""bayer_rg""bayer_rg"

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

Art der Interpolation.

Defaultwert: 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear"

Werteliste: 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear", 'bilinear_dir'"bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir""bilinear_dir", 'bilinear_enhanced'"bilinear_enhanced""bilinear_enhanced""bilinear_enhanced""bilinear_enhanced""bilinear_enhanced"

Ergebnis

cfa_to_rgbcfa_to_rgbCfaToRgbcfa_to_rgbCfaToRgbCfaToRgb 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>:)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

gen_image1_externgen_image1_externGenImage1Externgen_image1_externGenImage1ExternGenImage1Extern, gen_image1gen_image1GenImage1gen_image1GenImage1GenImage1, grab_imagegrab_imageGrabImagegrab_imageGrabImageGrabImage

Nachfolger

decompose3decompose3Decompose3decompose3Decompose3Decompose3

Siehe auch

trans_from_rgbtrans_from_rgbTransFromRgbtrans_from_rgbTransFromRgbTransFromRgb

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren