sub_imagesub_imageSubImageSubImagesub_image (算子)
名称
sub_imagesub_imageSubImageSubImagesub_image — 减两幅图像。
签名
描述
算子 sub_imagesub_imageSubImageSubImageSubImagesub_image 减两幅图像。输入图像 (ImageMinuendImageMinuendImageMinuendImageMinuendimageMinuendimage_minuend 和 ImageSubtrahendImageSubtrahendImageSubtrahendImageSubtrahendimageSubtrahendimage_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 设备上执行,适用于 byte、int1、int2、
uint2、int4、real、direction、cyclic 和 complex 图像。然而,由于 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 技术。
执行信息
- 支持 OpenCL 计算设备。
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
- 在通道级别上自动并行化。
- 在域级别上自动并行化。
参数
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
模块
基础