专栏目录
一、IPP简介及windows下安装说明
二、IPP与Opencv配合使用
三、IPP图像处理函数命名格式
四、IPP图像处理常用函数说明
说明
1、版本
IPP2021
2、官网
图像处理开发者手册
一、阈值处理
1、函数原型
以就地操作单通道为例
IppStatus ippiThreshold_<mod>(Ipp<datatype>* pSrcDst,
int srcDstStep,
IppiSize roiSize,
Ipp<datatype> threshold,
IppCmpOp ippCmpOp);
2、计算公式
从公式可以看出,如果像素值满足条件,被设为阈值,否则保持不变。
3、Threshold_Val函数
(1)函数原型
IppStatus ippiThreshold_Val_<mod>(
Ipp<datatype>* pSrcDst,
int srcDstStep,
IppiSize roiSize,
Ipp<datatype> threshold,
Ipp<datatype> value,
IppCmpOp ippCmpOp);
(2)说明
Threshold_Val与Threshold的不同之处在于满足条件的像素,会被设置成固定值。
4、相关参数含义
(1)源图像指针和步长
pSrc,srcStep;
(2)roiSize
原始图像和目标图像ROI区域,函数仅处理ROI区域的像素
(3)ippCmpOp
为比较像素值和阈值而指定的操作。可以使用 "小于 "或 "大于 "的比较。
ippCmpOp=ippCmpGreater;
ippCmpOp=ippCmpLess;
5、官网开发手册
二、滤波函数
以中值滤波(FilterMedianBorder)为例
1、函数原型
IppStatus ippiFilterMedianBorder_<mod>(const Ipp<datatype>* pSrc,
int srcStep,
Ipp<datatype>* pDst,
int dstStep,
IppiSize dstRoiSize,
IppiSize maskSize,
IppiBorderType borderType,
Ipp<datatype> borderValue,
Ipp8u* pBuffer);
mod=8u_C1R
mod=16u_C1R
mod=16s_C1R
mod=32f_C1R
2、函数说明
函数使用ROI进行操作。
在使用这个函数之前,需要使用ippiFilterMedianBorderGetBufferSize函数计算工作缓冲区pBuffer的大小。
ippiFilterMedianBorder函数对一个图像ROI应用中值滤波器。锚单元是滤波核的中心。源图像ROI的大小等于目标图像ROI的大小dstRoiSize。
函数将目标缓冲区中的每个像素设置为被处理像素附近的所有源像素值的中值。
3、ippiFilterMedianBorderGetBufferSize函数
(1)函数说明
计算FilterMedianBorder函数的工作缓冲区(buffer)的大小。
ippiFilterMedianBorderGetBufferSize函数计算ippiFilterMedianBorder函数所需的外部工作缓冲区的大小(字节)。结果存储在参数pBufferSize中。
(2)相关参数
一共五个参数,前四个为输入参数,最后一个为输出参数
【1】dstRoiSize
目标ROI的大小
【2】maskSize
滤波核的尺寸
【3】dataType
源图像和目标图像的类型
【4】numChannels
图像通道数,1,3,4通道
【5】pBufferSize
指向外部工作缓冲区的计算大小的指针,单位是字节。
4、相关参数
(1)第七个参数
边界类型
【1】ippBorderConst
将边界的像素值设置成常量
【2】ippBorderRepl
复制边缘像素值
【3】ippBorderInMem
边界值由原图像中的像素值获得
(2)第八个参数
边界值borderValue
赋予恒定边框的像素的常量值。这个参数只适用于ippBorderConst边界类型。
pBorderValue[3],
pBorderValue[4]
指向常数的指针,用于分配给常数边界的像素。这个参数只适用于ippBorderConst边界类型。
(3)第九个参数
pBuffer:指向工作缓冲区的指针
5、官网开发手册
三、算数操作
以减法(Sub)为例。
1、函数原型
IppStatus ippiSub_<mod>(const Ipp<datatype>* pSrc1,
int src1Step,
const Ipp<datatype>* pSrc2,
int src2Step,
Ipp<datatype>* pDst,
int dstStep,
IppiSize roiSize,
int scaleFactor);
mod的类型
8u_C1RSfs
16u_C1RSfs
16s_C1RSfs
8u_C3RSfs
16u_C3RSfs
16s_C3RSfs
8u_AC4RSfs
16u_AC4RSfs
16s_AC4RSfs
8u_C4RSfs
16u_C4RSfs
16s_C4RSfs
2、函数说明
这个函数将源缓冲区pSrc1的像素值减去缓冲区pSrc2的相应像素值,并将结果放入目标缓冲区pDst。对于就地操作,pSrc中的值被减去pSrcDst中的值,结果被放入pSrcDst中。对于复杂数据,该函数同时处理像素值的实部和虚部。
3、相关参数
(1)原始图像
就地操作有一个参数,非就地操作有两个参数
pSrc,就地操作时,一张原图
pSrc1,pSrc2,非就地操作,两张原图
(2)步长
对应原图个数的步长,步长紧跟在图像指针后面
(3)pDst、dstStep
目标图像指针和步长,用于非就地操作时
(4)pSrcDst、srcDstStep
目标图像指针和步长,用于就地操作时
(5)roiSize
ROI尺寸
(6)scaleFactor
规模因子
整型结果的缩放
图像处理功能的默认值是对结果进行饱和处理,而不对其进行缩放。
一些对整数数据进行操作的图像处理函数使用整数scaleFactor对内部计算的输出结果进行缩放,这被指定为函数参数之一。这些函数在其名称中都有Sfs描述符。
比例因子可以是负的、正的或零。之所以应用缩放,是因为内部计算通常是以比输入和输出图像的数据类型更高的精度进行的。
即使使用了缩放,整数操作的结果也总是饱和于目标数据类型范围。
整数结果的缩放是通过在函数返回前将输出的像素值乘以2^(-scaleFactor)来完成的。这有助于保留输出数据的范围或其精度。通常情况下,正因子的缩放是通过移位操作来完成的。结果被四舍五入为最接近的偶数整数(见四舍五入模式)。
例如,输入值200的整数Ipp16s进行开方,运算结果等于32767,而不是40000,也就是说,结果是饱和的,不能恢复准确的值。用scaleFactor=1的因子对输出值进行缩放,得到的结果是20000,这不是饱和的,确切的值可以恢复为200002。因此,输出数据范围得以保留。
下面的例子显示了如何通过缩放的方式部分地保留精度。对输入值2进行整数平方根运算(没有缩放),结果等于1而不是1.414。用scaleFactor = -3的系数对内部计算的输出值进行缩放,得到的结果是11,并允许将更精确的值恢复为112^(-3) = 1.375。