IPP图像处理常用函数说明

专栏目录

一、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,并允许将更精确的值恢复为11
2^(-3) = 1.375。

4、官网开发手册

官网地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPP(Integrated Performance Primitives)是Intel开发的一套高性能数学和信号处理函数库,可以用于加速图像处理算法。OpenCV库中包含了IPP模块,可以使用IPP库来加速一些OpenCV函数处理速度。下面是使用IPP模块加速OpenCV函数的一般步骤: 1. 引入IPP库:在代码中引入IPP库头文件,例如: ```c++ #include "ipp.h" ``` 2. 初始化IPP库:在代码中初始化IPP库,例如: ```c++ IppStatus status = ippInit(); if (status != ippStsNoErr) { // 初始化IPP库失败 } ``` 3. 加速OpenCV函数:在代码中使用IPP函数加速OpenCV函数,例如: ```c++ cv::Mat src, dst; // 加载图像到src中 IppiSize size = { src.cols, src.rows }; IppiWarpAffineParams params = { ... }; // 设置warpAffine参数 IppStatus status = ippiWarpAffine_8u_C3R(src.data, src.step, dst.data, dst.step, size, params, ippBorderRepl); if (status != ippStsNoErr) { // warpAffine处理失败 } // 处理dst图像 ``` 在这个示例中,ippiWarpAffine_8u_C3R函数IPP库中的一个图像变换函数,可以替代OpenCV库中的warpAffine函数。通过使用IPP库的函数,可以加速图像变换的处理速度。 需要注意的是,并不是所有的OpenCV函数都可以使用IPP模块加速。一些OpenCV函数已经使用了其他优化模块进行了优化,或者不适合使用IPP模块加速。在使用IPP模块加速OpenCV函数之前,需要仔细考虑是否适合使用IPP模块,并进行性能测试以验证加速效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值