sub_imagesub_imageSubImageSubImagesub_image (算子)

名称

sub_imagesub_imageSubImageSubImagesub_image — 减两幅图像。

签名

sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )

Herror sub_image(const Hobject ImageMinuend, const Hobject ImageSubtrahend, Hobject* ImageSub, double Mult, double Add)

Herror T_sub_image(const Hobject ImageMinuend, const Hobject ImageSubtrahend, Hobject* ImageSub, const Htuple Mult, const Htuple Add)

void SubImage(const HObject& ImageMinuend, const HObject& ImageSubtrahend, HObject* ImageSub, const HTuple& Mult, const HTuple& Add)

HImage HImage::SubImage(const HImage& ImageSubtrahend, const HTuple& Mult, const HTuple& Add) const

HImage HImage::SubImage(const HImage& ImageSubtrahend, double Mult, double Add) const

static void HOperatorSet.SubImage(HObject imageMinuend, HObject imageSubtrahend, out HObject imageSub, HTuple mult, HTuple add)

HImage HImage.SubImage(HImage imageSubtrahend, HTuple mult, HTuple add)

HImage HImage.SubImage(HImage imageSubtrahend, double mult, double add)

def sub_image(image_minuend: HObject, image_subtrahend: HObject, mult: Union[int, float], add: Union[int, float]) -> HObject

描述

算子 sub_imagesub_imageSubImageSubImageSubImagesub_image 减两幅图像。输入图像 (ImageMinuendImageMinuendImageMinuendImageMinuendimageMinuendimage_minuendImageSubtrahendImageSubtrahendImageSubtrahendImageSubtrahendimageSubtrahendimage_subtrahend) 的灰度值 (g1,g2) 将按以下方式转换: g' := (g1 - g2) * Mult + Add 若发生溢出或下溢,数值将被截断。 请注意,循环和方向图像不存在此情况。

单次调用可处理多张图像。此时两个输入参数包含相同数量的图像,这些图像将成对进行处理。每处理一对图像,系统将生成一张输出图像。

请注意,算子的运行时间会因不同的控制参数而变化。对于常用组合,会采用特殊的优化方案。此外,针对 byte、int2 和 uint2 图像,还实现了采用 SIMD 技术的特殊优化方案。这些特殊优化的实际应用由系统参数 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" 控制(参见 set_systemset_systemSetSystemSetSystemSetSystemset_system)。若将 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" 设为 'true'"true""true""true""true""true"(且 SIMD 指令集可用),则内部计算将采用 SIMD 技术执行。

sub_imagesub_imageSubImageSubImageSubImagesub_image 可在 OpenCL 设备上执行,适用于 byteint1int2 uint2int4realdirectioncycliccomplex 图像。然而,由于 OpenCL 1.0 仅支持所有设备使用单精度浮点运算,且并非所有舍入模式均被支持,因此 OpenCL 实现可能会产生与标量或 SIMD 实现略有差异的结果。

注意

请注意,SIMD 技术获得的加速效果在大型、紧凑输入区域上最为显著。然而,在极少数情况下,根据输入区域和硬件性能的不同,使用 SIMD 技术执行 sub_imagesub_imageSubImageSubImageSubImagesub_image 可能比不使用时耗时显著增加。在这些情况下,可通过 set_system(::'mmx_enable','false':)set_system("mmx_enable","false")SetSystem("mmx_enable","false")SetSystem("mmx_enable","false")SetSystem("mmx_enable","false")set_system("mmx_enable","false") 来避免使用 SIMD 技术。

执行信息

参数

ImageMinuendImageMinuendImageMinuendImageMinuendimageMinuendimage_minuend (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *允许用于计算设备

被减数。

ImageSubtrahendImageSubtrahendImageSubtrahendImageSubtrahendimageSubtrahendimage_subtrahend (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *允许用于计算设备

减数。

ImageSubImageSubImageSubImageSubimageSubimage_sub (输出对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (byte / int1 / int2 / uint2 / int4 / int8 / real / direction / cyclic / complex)

通过减法运算获得的结果图像。

MultMultMultMultmultmult (输入控制)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

修正系数。

默认值: 1.0

建议值: 0.0, 1.0, 2.0, 3.0, 4.0

值范围: -255.0 ≤ Mult Mult Mult Mult mult mult ≤ 255.0

最小增量: 0.001

建议增量: 0.1

AddAddAddAddaddadd (输入控制)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

修正值。

默认值: 128.0

建议值: 0.0, 128.0, 256.0

值范围: -512.0 ≤ Add Add Add Add add add ≤ 512.0

最小增量: 0.01

建议增量: 1.0

示例(HDevelop)

read_image(Image1,'fabrik')
dev_display (Image1)
read_image(Image2,'monkey')
dev_display (Image2)
sub_image (Image1, Image2, Result, 1, 100)
dev_display (Result)

示例(C)

read_image(&Image1,"fabrik");
disp_image(Image1,WindowHandle);
read_image(&Image2,"monkey");
disp_image(Image2,WindowHandle);
sub_image(Image1,Image2,&Result,1.0,100.0);
disp_image(Result,WindowHandle);

示例(HDevelop)

read_image(Image1,'fabrik')
dev_display (Image1)
read_image(Image2,'monkey')
dev_display (Image2)
sub_image (Image1, Image2, Result, 1, 100)
dev_display (Result)

示例(HDevelop)

read_image(Image1,'fabrik')
dev_display (Image1)
read_image(Image2,'monkey')
dev_display (Image2)
sub_image (Image1, Image2, Result, 1, 100)
dev_display (Result)

示例(HDevelop)

read_image(Image1,'fabrik')
dev_display (Image1)
read_image(Image2,'monkey')
dev_display (Image2)
sub_image (Image1, Image2, Result, 1, 100)
dev_display (Result)

结果

如果参数正确,算子 sub_imagesub_imageSubImageSubImageSubImagesub_image 返回值 2 ( H_MSG_TRUE)。当输入为空(无可用输入图像)时的行为通过算子 set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) 进行设置。如有必要,则抛出异常。

可能的后继

dual_thresholddual_thresholdDualThresholdDualThresholdDualThresholddual_threshold

替代

mult_imagemult_imageMultImageMultImageMultImagemult_image, add_imageadd_imageAddImageAddImageAddImageadd_image

另见

add_imageadd_imageAddImageAddImageAddImageadd_image, mult_imagemult_imageMultImageMultImageMultImagemult_image, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold, check_differencecheck_differenceCheckDifferenceCheckDifferenceCheckDifferencecheck_difference

模块

基础