halcon算子详解——add_image

函数签名:

add_image(Image1, Image2 : ImageResult : Mult, Add : )

功能说明:

两图像逐像素相加

详细描述:

本算子将两幅图像进行相加。输入图像(Image1,Image2)的灰度值(g1,g2)按照如下方式进行转化:

如果发生数值溢出,则灰度值将被裁剪。注意这种情况在图像类型为cyclic(循环)和direction(方向)时不会发生。结果图像保存在ImageResult中。

可以在一次调用中处理多张图像。在这种情况下,两个输入图像参数中包含的图像数相同,这些图像会被按对进行处理。每一对输入图像产生一个输出图像。

请注意本算子的运行时间因不同的控制参数而异。本算子对经常使用的组合进行了特别优化。对于类型为byte,int2,uint2和int4类型的图像,使用的是SIMD(单指令多数据)技术进行了优化。这些特别优化在实际应用中被系统参数'mmx_enable'控制(参见set_system)。如果'mmx_enable'被设置为'true'(并且SIMD指令集是可用的),则内部计算使用SIMD技术进行。

对于byte,int1,int2,uint2,int4,real,direction,cyclic和complex类型的图像,本算子可以在OpenCL设备上执行。然而,对于OpenCL1.0,所有的设备都只支持单精度浮点型数据,且不是所有的舍入模式都支持,因此,OpenCL实现产生的结果和标量实现或者SIMD实现产生的结果可能有些微差异。

注意事项:

注意,由SIMD技术带来的加速在大的、紧凑的输入区域达到顶峰。在极少数情况下,使用SIMD技术的执行时间比不使用SIMD技术的执行时间明显要长,这取决于输入区域以及硬件的性能。在这种情况下,可以通过调用set_system(::'mmx_enable','false':)来避免使用SIMD技术。

并行化:

  • 支持OpenCL计算设备
  • 多线程类型:可重入(非独占并行运行算子)
  • 多线程作用域:全局(可以从任何线程调用)
  • 在tuple(元组)级别自动并行
  • 在channel(通道)级别自动并行
  • 在domain(域)级别自动并行

参数说明:

Image1(输入对象)

数据描述 (多通道)图像(数组)
数据类型 对象(byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *等被计算设备支持的类型
意义 输入图像(数组)1
默认值
建议值
限制

Image2(输入对象)

数据描述 (多通道)图像(数组)
数据类型 对象(byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *等被计算设备支持的类型
意义 输入图像(数组)2
默认值
建议值
限制

ImageResult(输出对象)

数据描述 (多通道)图像(数组)
数据类型 对象(byte / int1 / int2 / uint2 / int4 / int8 / real / direction / cyclic / complex)
意义 加法运算的结果图像(数组)
默认值
建议值
限制

Mult(输入控制参数)

数据描述 数值
数据类型 (real / integer)
意义 灰度值拉伸因子
默认值 0.5
建议值 0.2, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 5.0
限制 -255.0 ≤ Mult ≤ 255.0
最小增量 0.001
建议增量 0.1

Add(输入控制参数)

数据描述 数值
数据类型 (real / integer)
意义 灰度提升值
默认值 0.5
建议值 0, 64, 128, 255, 512
限制 -512.0 ≤ Add ≤ 512.0
最小增量 0.01
建议增量 1.0

结果:

参数都正确的情况下本算子返回值为2(H_MSG_TRUE)。输入为空的情况下(无可获得的输入图像),该算子的行为通过算子set_system(::'no_object_result',:)来设置。如有必要,该算子会触发异常。

你可能感兴趣的:(halcon算子详解——add_image)