depth_from_focusdepth_from_focusDepthFromFocusDepthFromFocus (Operator)

Name

depth_from_focusdepth_from_focusDepthFromFocusDepthFromFocus — Bestimmung der Tiefe aus mehreren Fokusebenen.

Signatur

depth_from_focus(MultiFocusImage : Depth, Confidence : Filter, Selection : )

Herror depth_from_focus(const Hobject MultiFocusImage, Hobject* Depth, Hobject* Confidence, const char* Filter, const char* Selection)

Herror T_depth_from_focus(const Hobject MultiFocusImage, Hobject* Depth, Hobject* Confidence, const Htuple Filter, const Htuple Selection)

void DepthFromFocus(const HObject& MultiFocusImage, HObject* Depth, HObject* Confidence, const HTuple& Filter, const HTuple& Selection)

HImage HImage::DepthFromFocus(HImage* Confidence, const HTuple& Filter, const HTuple& Selection) const

HImage HImage::DepthFromFocus(HImage* Confidence, const HString& Filter, const HString& Selection) const

HImage HImage::DepthFromFocus(HImage* Confidence, const char* Filter, const char* Selection) const

HImage HImage::DepthFromFocus(HImage* Confidence, const wchar_t* Filter, const wchar_t* Selection) const   (Nur Windows)

static void HOperatorSet.DepthFromFocus(HObject multiFocusImage, out HObject depth, out HObject confidence, HTuple filter, HTuple selection)

HImage HImage.DepthFromFocus(out HImage confidence, HTuple filter, HTuple selection)

HImage HImage.DepthFromFocus(out HImage confidence, string filter, string selection)

Beschreibung

depth_from_focusdepth_from_focusDepthFromFocusDepthFromFocusDepthFromFocus bestimmt aus mehreren Bildern einer Fokusserie die Tiefe. Die Bilder der Fokusserie werden dabei als ein mehrkanaliges Bild in MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage übergeben. Die Tiefe für jeden Bildpunkt wird als die Nummer des Kanals in DepthDepthDepthDepthdepth zurückgeben. Der Parameter ConfidenceConfidenceConfidenceConfidenceconfidence gibt die Sicherheit an, mit der die Tiefe für die Bildpunkte geschätzt werden konnte. Große Werte bedeuten dabei eine große Zuverlässigkeit der Schätzung.

Es wird dasjenige Pixel einer Fokusebene ausgewählt, das lokal am schärfsten ist. Das verwendete Verfahren wird über die Parameter FilterFilterFilterFilterfilter und SelectionSelectionSelectionSelectionselection festgelegt.

Dem Parameter FilterFilterFilterFilterfilter können die Werte 'highpass'"highpass""highpass""highpass""highpass" und 'bandpass'"bandpass""bandpass""bandpass""bandpass" übergeben werden. Um die Schärfe im Bild zu bestimmen, kann entweder ein Highpassfilter oder ein Bandpassfilter verwendet werden. Je größer der resultierende Wert ist, desto schärfer ist das Bild an dieser Stelle. Beim Bandpassfilter werden - im Vergleich zum Highpassfilter - die ganz hohen Frequenzen unterdrückt. Dies ist z.B. bei stark verrauschten Bildern nützlich.

Das gefilterte Bild kann optional noch mit dem Mittelwertfilter geglättet werden, indem man zwei zusätzliche Integer-Werte für die Maskengröße im Parameter FilterFilterFilterFilterfilter übergibt (z.B. ['highpass'"highpass""highpass""highpass""highpass", 7, 7]). Dadurch wird die Schärfeinformation über die benachbarten Pixel "verschmiert", so dass texturlose Bereiche im Bild überbrückt werde können. Bitte beachten Sie, dass diese Glättung kein Rauschen in den Originalbildern unterdrückt, da sie erst nach der High- oder Bandpassfilterung angewendet wird.

Der Parameter SelectionSelectionSelectionSelectionselection bestimmt, wie die optimale Fokusebene ausgewählt wird. Wenn der Wert 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum" übergeben wird, wird das nächstliegende Schärfemaximum in der Umgebung jedes Pixels verwendet. Bei 'local'"local""local""local""local" werden dagegen die für das Pixel ermittelten Schärfewerte aller Fokusebenen verwendet. Mit 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum" erhält man i.d.R. ein etwas robusteres und leicht geglättetes Ergebnis.

Eine solche zusätzliche Glättung ist nützlich, wenn zur Aufnahme der Fokussequenz keine telezentrische Optik verwendet wird. In diesem Fall verändert sich die Position eines Punktes innerhalb der Sequenz leicht. Durch geeignete Wahl einer zusätzlichen Glättung kann dieser Effekt teilweise kompensiert werden.

Achtung

Besteht die Fokusserie MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage aus mehr als 255 Fokusleveln (Kanälen) so wird die Tiefe für Werte über 255 abgeschnitten, d.h. Tiefenwerte größer als 255 werden ignoriert.

Werden für die Filtermaske von FilterFilterFilterFilterfilter gerade statt ungerade Werte übergeben, verwendet die Routine an ihrer Stelle die nächstgrößeren ungeraden Werte (damit ist der Schwerpunkt der Filtermaske immer eindeutig bestimmt).

Wird SelectionSelectionSelectionSelectionselection auf 'local'"local""local""local""local" gesetzt und als FilterFilterFilterFilterfilter 'highpass'"highpass""highpass""highpass""highpass" oder 'bandpass'"bandpass""bandpass""bandpass""bandpass" gewählt, kann depth_from_focusdepth_from_focusDepthFromFocusDepthFromFocusDepthFromFocus auf OpenCL-Geräten ausgeführt werden. Wird die zusätzliche Glättung aktiviert, gelten die selben Einschränkungen und Voraussetzungen wie für mean_imagemean_imageMeanImageMeanImageMeanImage.

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

MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage (input_object)  multichannel-image(-array) objectHImageHImageHobject (byte)

Mehrkanaliges Graubild bestehend aus meheren Fokusebenen.

DepthDepthDepthDepthdepth (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (byte)

Tiefenbild.

ConfidenceConfidenceConfidenceConfidenceconfidence (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (byte)

Sicherheit der Tiefenschätzung.

FilterFilterFilterFilterfilter (input_control)  string(-array) HTupleHTupleHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong)

Filter, um scharfe Pixel zu finden.

Defaultwert: 'highpass' "highpass" "highpass" "highpass" "highpass"

Wertevorschläge: 'highpass'"highpass""highpass""highpass""highpass", 'bandpass'"bandpass""bandpass""bandpass""bandpass", 3, 5, 7, 9

SelectionSelectionSelectionSelectionselection (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Methode scharfe Pixel zu finden.

Defaultwert: 'next_maximum' "next_maximum" "next_maximum" "next_maximum" "next_maximum"

Werteliste: 'local'"local""local""local""local", 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum"

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

Beispiel (C++ (HALCON 5.0-10.0))

compose3(Focus0,Focus1,Focus2,&MultiFocus);
depth_from_focus(MultiFocus,&Depth,&Confidence,'highpass','next_maximum');
mean_image(Depth,&Smooth,15,15);
select_grayvalues_from_channels(MultiChannel,Smooth,SharpImage);
threshold(Confidence,HighConfidence,10,255);
reduce_domain(SharpImage,HighConfidence,ConfidentSharp);

Vorgänger

compose2compose2Compose2Compose2Compose2, compose3compose3Compose3Compose3Compose3, compose4compose4Compose4Compose4Compose4, add_channelsadd_channelsAddChannelsAddChannelsAddChannels, read_imageread_imageReadImageReadImageReadImage, read_sequenceread_sequenceReadSequenceReadSequenceReadSequence

Nachfolger

select_grayvalues_from_channelsselect_grayvalues_from_channelsSelectGrayvaluesFromChannelsSelectGrayvaluesFromChannelsSelectGrayvaluesFromChannels, mean_imagemean_imageMeanImageMeanImageMeanImage, binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, thresholdthresholdThresholdThresholdThreshold

Siehe auch

count_channelscount_channelsCountChannelsCountChannelsCountChannels

Modul

3D Metrology