ClassesClassesClassesClasses | | | | Operators

depth_from_focusdepth_from_focusDepthFromFocusdepth_from_focusDepthFromFocusDepthFromFocus (Operator)

Name

depth_from_focusdepth_from_focusDepthFromFocusdepth_from_focusDepthFromFocusDepthFromFocus — Extract depth using mutiple focus levels.

Signature

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)

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

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

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

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

void HOperatorSetX.DepthFromFocus(
[in] IHUntypedObjectX* MultiFocusImage, [out] IHUntypedObjectX*Depth, [out] IHUntypedObjectX*Confidence, [in] VARIANT Filter, [in] VARIANT Selection)

IHImageX* HImageX.DepthFromFocus(
[out] IHImageX*Confidence, [in] VARIANT Filter, [in] VARIANT Selection)

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)

Description

The operator depth_from_focusdepth_from_focusDepthFromFocusdepth_from_focusDepthFromFocusDepthFromFocus extracts the depth using a focus sequence. The images of the focus sequence have to passed as a multi channel image (MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage). The depth for each pixel will be returned in DepthDepthDepthDepthDepthdepth as the channel number. The parameter ConfidenceConfidenceConfidenceConfidenceConfidenceconfidence returns a confidence value for each depth estimation: The larger this value, the higher the confidence of the depth estimation is.

depth_from_focusdepth_from_focusDepthFromFocusdepth_from_focusDepthFromFocusDepthFromFocus selects the pixels with the best focus of all focus levels. The method used to extract these pixels is specified by the parameters FilterFilterFilterFilterFilterfilter and SelectionSelectionSelectionSelectionSelectionselection.

For the parameter FilterFilterFilterFilterFilterfilter, you can choose between the values 'highpass'"highpass""highpass""highpass""highpass""highpass" and 'bandpass'"bandpass""bandpass""bandpass""bandpass""bandpass". To determine the focus within the image a high- or a bandpass filter can be applied. The larger the filter response, the more in focus is the image at this location. Compared to the highpass filter, the bandpass filter suppresses high frequencies. This is useful in particular in images containing strong noise.

Optionally, you can smooth the filtered image using the mean filter by passing two additional integer values for the mask size in the parameter FilterFilterFilterFilterFilterfilter (e.g., ['highpass'"highpass""highpass""highpass""highpass""highpass", 7, 7]). This blurs the in-focus region with neighboring pixels and thus allows to bridge small areas with no texture within the image. Note, however, that this smoothing does not suppress noise in the original image, since it is applied only after high- or bandpass filtering.

The parameter SelectionSelectionSelectionSelectionSelectionselection determines how the optimum focus level is selected. If you pass the value 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum""next_maximum", the closest focus maximum in the neighborhood is used. In contrast, if you pass the value 'local'"local""local""local""local""local", the focus level is determined based on the focus values of all focus levels of the pixel. With 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum""next_maximum", you typically achieve a slightly smoothed and more robust result.

This additional smoothing is useful if no telecentric lenses are used to take the input images. In this case, the position of an object will slightly shift within the sequence. By adding appropriate smoothing, this effect can be partially compensated.

Attention

If MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage contains more than 255 channels (focus levels), DepthDepthDepthDepthDepthdepth is clipped at 255, i.e. depth values higher than 255 are ignored.

If the filter mask for FilterFilterFilterFilterFilterfilter is specified with even values, the routine uses the next larger odd values instead (this way the center of the filter mask is always explicitly determined).

If SelectionSelectionSelectionSelectionSelectionselection is set to 'local'"local""local""local""local""local" and FilterFilterFilterFilterFilterfilter is set to 'highpass'"highpass""highpass""highpass""highpass""highpass" or 'bandpass'"bandpass""bandpass""bandpass""bandpass""bandpass", depth_from_focusdepth_from_focusDepthFromFocusdepth_from_focusDepthFromFocusDepthFromFocus can be executed on OpenCL devices. If smoothing is enabled, the same restrictions and limitations as for mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage apply.

Parallelization

Parameters

MultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImageMultiFocusImagemultiFocusImage (input_object)  multichannel-image(-array) objectHImageHImageHImageHImageXHobject (byte)

Multichannel gray image consisting of multiple focus levels.

DepthDepthDepthDepthDepthdepth (output_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject * (byte)

Depth image.

ConfidenceConfidenceConfidenceConfidenceConfidenceconfidence (output_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject * (byte)

Confidence of depth estimation.

FilterFilterFilterFilterFilterfilter (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong) (BSTR / Hlong) (char* / Hlong)

Filter used to find sharp pixels.

Default value: 'highpass' "highpass" "highpass" "highpass" "highpass" "highpass"

Suggested values: 'highpass'"highpass""highpass""highpass""highpass""highpass", 'bandpass'"bandpass""bandpass""bandpass""bandpass""bandpass", 3, 5, 7, 9

SelectionSelectionSelectionSelectionSelectionselection (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Method used to find sharp pixels.

Default value: 'next_maximum' "next_maximum" "next_maximum" "next_maximum" "next_maximum" "next_maximum"

List of values: 'local'"local""local""local""local""local", 'next_maximum'"next_maximum""next_maximum""next_maximum""next_maximum""next_maximum"

List of values (for compute devices): 'local'"local""local""local""local""local"

Example (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);

Possible Predecessors

compose2compose2Compose2compose2Compose2Compose2, compose3compose3Compose3compose3Compose3Compose3, compose4compose4Compose4compose4Compose4Compose4, add_channelsadd_channelsAddChannelsadd_channelsAddChannelsAddChannels, read_imageread_imageReadImageread_imageReadImageReadImage, read_sequenceread_sequenceReadSequenceread_sequenceReadSequenceReadSequence

Possible Successors

select_grayvalues_from_channelsselect_grayvalues_from_channelsSelectGrayvaluesFromChannelsselect_grayvalues_from_channelsSelectGrayvaluesFromChannelsSelectGrayvaluesFromChannels, mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, thresholdthresholdThresholdthresholdThresholdThreshold

See also

count_channelscount_channelsCountChannelscount_channelsCountChannelsCountChannels

Module

3D Metrology


ClassesClassesClassesClasses | | | | Operators