convol_imageconvol_imageConvolImageConvolImageconvol_image卷积图像(算子)

名称

convol_imageconvol_imageConvolImageConvolImageconvol_image — 计算图像与任意滤波掩模之间的相关。

签名

convol_image(Image : ImageResult : FilterMask, Margin : )

Herror convol_image(const Hobject Image, Hobject* ImageResult, const char* FilterMask, const char* Margin)

Herror T_convol_image(const Hobject Image, Hobject* ImageResult, const Htuple FilterMask, const Htuple Margin)

void ConvolImage(const HObject& Image, HObject* ImageResult, const HTuple& FilterMask, const HTuple& Margin)

HImage HImage::ConvolImage(const HTuple& FilterMask, const HTuple& Margin) const

HImage HImage::ConvolImage(const HString& FilterMask, const HString& Margin) const

HImage HImage::ConvolImage(const char* FilterMask, const char* Margin) const

HImage HImage::ConvolImage(const wchar_t* FilterMask, const wchar_t* Margin) const   ( Windows only)

static void HOperatorSet.ConvolImage(HObject image, out HObject imageResult, HTuple filterMask, HTuple margin)

HImage HImage.ConvolImage(HTuple filterMask, HTuple margin)

HImage HImage.ConvolImage(string filterMask, string margin)

def convol_image(image: HObject, filter_mask: MaybeSequence[Union[int, float, str]], margin: Union[int, float, str]) -> HObject

描述

convol_imageconvol_imageConvolImageConvolImageConvolImageconvol_image 计算输入图像 ImageImageImageImageimageimage 与任意线性滤波掩模之间的相关性。通过 FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 指定的滤波掩模可从文件加载,或作为元组传递。图像边界处理可选择多种选项(MarginMarginMarginMarginmarginmargin): gray value 假设图像边界外的像素保持恒定(采用指定灰度值)。 'continued' 图像边界处的灰度值延续。 'cyclic' 图像边界处的循环延续。 'mirrored' 图像边界处像素的镜像反射。 在所有图像位置,均计算图像与滤波掩模之间的相关性。若发生溢出或下溢,则对所得灰度值进行截断。因此,若使用会产生负输出值的滤波器(如导数滤波器),则输入图像应为 int2 或 real 类型。

掩模的参考像素(即位于当前图像位置且用于计算相关性的像素)确定方法如下:首先计算所有权重不为 0 的掩模像素区域,随后计算该区域的中心点并进行四舍五入处理。此点即为掩模的参考点。

如果在 FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 中指定了文件名,则滤波掩模将从具有以下结构的文本文件中读取: <掩模尺寸> <掩模的逆权重> <矩阵> 第一行包含滤波掩模的尺寸,由两个以空格分隔的数字表示(例如 3 3 表示 3×3)。其中第一个数字定义滤波掩模的高度(行数),第二个数字定义其宽度(列数)。下一行包含掩模的逆权重,即特定图像位置相关系数需除以的系数。后续行以整数或浮点数形式(空格分隔)呈现滤波掩模,文件中每行对应掩模的一行数据。滤波掩模的默认HALCON文件扩展名为'fil'。调用算子时无需指定该扩展名。若需从元组计算滤波掩模,FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 中的元组结构须符合上述描述,但此时省略换行符。

例如,假设我们想要使用以下滤波掩模:

如果滤波掩模需要从文件生成,则该文件应如下所示:

3 3 16 1 2 1 2 4 2 1 2 1

相反地,若需从元组生成滤波掩模,则必须向 FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 传递以下元组:

[3,3,16,1,2,1,2,4,2,1,2,1]

为方便起见,在 FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 中可以传递两个向量代替矩阵:

[MaskHeight,MaskWidth,Weight,V1,V2]

这两个向量的外积构成滤波矩阵:

例如,上述矩阵也可传递为:

[3,3,16,1,2,1,1,2,1]

如果 FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask 是可分离的(系统会自动检测),convol_imageconvol_imageConvolImageConvolImageConvolImageconvol_image 将采用一种特殊实现方式,其运行速度远快于使用不可分离掩模进行滤波的情况。

'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" 设置为 'true'"true""true""true""true""true"(且SIMD指令集可用),则 bytereal 图像的内部计算将采用 SIMD 技术执行。若 'sse41_enable'"sse41_enable""sse41_enable""sse41_enable""sse41_enable""sse41_enable" 设置为 'true'"true""true""true""true""true"(且 SIMD 指令集可用),则 int2uint2 图像的内部计算将采用 SIMD 技术执行。若 'avx_enable'"avx_enable""avx_enable""avx_enable""avx_enable""avx_enable" 设置为 'true'"true""true""true""true""true"(且 SIMD 指令集可用),则 real 图像的内部计算将采用 AVX SIMD 技术执行。

注意

请注意,convol_imageconvol_imageConvolImageConvolImageConvolImageconvol_image 并非计算图像与给定滤波掩模的卷积,而是计算相关性,即它直接使用给定的滤波掩模,而非该滤波掩模的镜像版本。

当使用 3x3 或 5x5 矩形滤波掩模并采用 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored" 边界处理时,convol_imageconvol_imageConvolImageConvolImageConvolImageconvol_image 可在 OpenCL 设备上执行。

请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章

执行信息

参数

ImageImageImageImageimageimage (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / int2 / uint2 / real)

将计算相关性的图像。

ImageResultImageResultImageResultImageResultimageResultimage_result (输出对象)  multichannel-image(-array) objectHImageHObjectHImageHobject * (byte / int2 / uint2 / real)

相关性结果。

FilterMaskFilterMaskFilterMaskFilterMaskfilterMaskfilter_mask (输入控制)  filename.read(-array) HTupleMaybeSequence[Union[int, float, str]]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

滤波掩模作为文件名或元组。

默认值: 'sobel' "sobel" "sobel" "sobel" "sobel" "sobel"

建议值: 'sobel'"sobel""sobel""sobel""sobel""sobel", 'laplace4'"laplace4""laplace4""laplace4""laplace4""laplace4", 'lowpas_3_3'"lowpas_3_3""lowpas_3_3""lowpas_3_3""lowpas_3_3""lowpas_3_3"

文件扩展名: .fil

MarginMarginMarginMarginmarginmargin (输入控制)  string HTupleUnion[int, float, str]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)

边界处理。

默认值: 'mirrored' "mirrored" "mirrored" "mirrored" "mirrored" "mirrored"

值列表(用于计算设备):'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored"

建议值: 'mirrored'"mirrored""mirrored""mirrored""mirrored""mirrored", 'cyclic'"cyclic""cyclic""cyclic""cyclic""cyclic", 'continued'"continued""continued""continued""continued""continued", 0, 30, 60, 90, 120, 150, 180, 210, 240, 255

模块

基础