函数签名:
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',<Result>:)来设置。如有必要,该算子会触发异常。