CUDA小白 - NPP(9) 图像处理 Statistical Operations

2023-09-14 16:17:51

cuda小白
原始API链接 NPP

GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》

常见的NppStatus,可以看这里

本文主要介绍的是NPP的统计操作的一些接口。由于接口较多,所以同等类型的只会稍微一笔带过。
由于只是统计方面的一些操作,因此有些没有办法进行可视化展现。因此暂时仅介绍接口,如果后面有必要,或者有比较好的可视化idea,在进行补充。

sum

在这里插入图片描述
计算图像像素通道求和

/*
需要额外开辟空间,可以调用nppiSumGetBufferHostSize_XX_XXX来获取需要额外空间大小。
pSrc :           device source input uint8_t image
nSrcStep:        input step
oSizeROI:        sum roi
pDeviceBuffer:   scratch buffer
aSum:            Pointer to the computed sum
*/
NppStatus nppiSum_8u_C3R(const Npp8u *pSrc,
						 int nSrcStep,
						 NppiSize oSizeROI,
						 Npp8u *pDeviceBuffer,
						 Npp64f aSum[3]);
min/max

最小值(Min),最大值(Max),最小值索引(MinIndx),最大值索引(MaxIndx),最小最大值(MinMax),最小最大值索引(MinMaxIndx),由于接口较为类似,次数仅介绍Min以及MinIndx。

/*
函数参数不难理解,与Sum异曲同工,MinIndx可以同时返回最小值对应的图像位置
*/
NppStatus nppiMin_8u_C3R(const Npp8u *pSrc,
						 int nSrcStep,
						 NppiSize oSizeROI,
						 Npp8u *pDeviceBuffer,
						 Npp8u aMin[3]);
NppStatus nppiMinIndx_8u_C3R(const Npp8u *pSrc,
							 int nSrcStep,
							 NppiSize oSizeROI,
							 Npp8u *pDeviceBuffer,
							 Npp8u aMin[3],
							 int aIndexX[3],
							 int aIndexY[3]);		
mean / mean_StdDev

mean主要是计算图像的通道均值
在这里插入图片描述
mean_StdDev额外计算了一个
在这里插入图片描述

NppStatus nppiMean_8u_C3R(const Npp8u *pSrc,
						  int nSrcStep,
						  NppiSize oSizeROI,
						  Npp8u *pDeviceBuffer,
						  Npp64f aMean[3]);
NppStatus nppiMean_StdDev_8u_C3CR(const Npp8u *pSrc,
								  int nSrcStep,
								  NppiSize oSizeROI,
								  int nCOI,
								  Npp8u *pDeviceBuffer,
								  Npp64f *pMean,
								  Npp64f *pStdDev);
Image Norms

还是三个大类:Norm,NormDiff以及NormRel。第一个是针对单张图片进行的Norm操作,后两个是针对两张图片完成的Norm操作。归一化的方法也分为三种,Inf,L1和L2

/*
同样需要额外的计算空间申请
*/
NppStatus nppiNorm_L1_8u_C3R(const Npp8u *pSrc,
							 int nSrcStep,
							 NppiSize oSizeROI,
							 Npp64f aNorm[3],
							 Npp8u *pDeviceBuffer);
NppStatus nppiNormDiff_L1_8u_C3R(const Npp8u *pSrc1,
								 int nSrc1Step,
								 const Npp8u *pSrc2,
								 int nSrc2Step,
								 NppiSize oSizeROI,
								 Npp64f aNormDiff[3],
								 Npp8u *pDeviceBuffer);
NppStatus nppiNormRel_L1_8u_C3R(const Npp8u *pSrc1,
								int nSrc1Step,
								const Npp8u *pSrc2,
								int nSrc2Step,
								NppiSize oSizeROI,
								Npp64f aNormRel[3],
								Npp8u *pDeviceBuffer);
DotProd

在这里插入图片描述

NppStatus nppiDotProd_8u64f_C3R(const Npp8u *pSrc1,
								int nSrc1Step,
								const Npp8u *pSrc2,
								int nSrc2Step,
								NppiSize oSizeROI,
								Npp64f aDp[3],
								Npp8u *pDeviceBuffer);
CountInRange

计算通道的最小值和最大值

NppStatus nppiCountInRange_8u_C3R(const Npp8u *pSrc,
								  int nSrcStep,
								  NppiSize oSizeROI,
								  int aCounts[3],
								  Npp8u aLowerBound[3],
								  Npp8u aUpperBound[3],
								  Npp8u *pDeviceBuffer);
MaxEvery/MinEvery

三个通道的最值保存在pSrcDst中

NppStatus nppiMaxEvery_8u_C3IR(const Npp8u *pSrc,
							   int nSrcStep,
							   Npp8u * pSrcDst,
							   int nSrcDstStep,
						       NppiSize oSizeROI);
NppStatus nppiMinEvery_8u_C3IR(const Npp8u *pSrc,
							   int nSrcStep,
							   Npp8u *pSrcDst,
							   int nSrcDstStep,
							   NppiSize oSizeROI);
Integral / SqrIntegral / RectStdDev

积分图像
Integral主要实现的是,计算(0,0)到(i,j)的像素值和并且加上一个特殊的值,最终的结果存储在输出的(i,j)位置。因此如果输入的尺寸是WxH,在输出的尺寸是(W+1)x(H+1)。
在这里插入图片描述
SqrIntegral 则是计算的像素的平方和
在这里插入图片描述
RectStdDev则是计算积分图像的标准差(ROI区域内)
在这里插入图片描述

NppStatus nppiIntegral_8u32f_C1R(const Npp8u *pSrc,
								 int nSrcStep,
								 Npp32f *pDst,
								 int nDstStep,
								 NppiSize oROI,
								 Npp32f nVal);
NppStatus nppiSqrIntegral_8u32f_C1R(const Npp8u *pSrc,
								    int nSrcStep,
								    Npp32f *pDst,
								    int nDstStep,
								    NppiSize oROI,
								    Npp32f nVal);
NppStatus nppiRectStdDev_32f_C1R(const Npp32f *pSrc,
								 int nSrcStep,
								 const Npp64f *pSqr,
								 int nSqrStep,
								 Npp32f *pDst,
								 int nDstStep,
								 NppiSize oSizeROI,
								 NppiRect oRect);
HistogramEven / HistogramRange

图像直方图统计

/*
nLevels:  level size
pHist:     the total number of pixels that fall into the range
pBuffer:   scratch buffer
*/
NppStatus nppiHistogramEven_8u_C3R(const Npp8u *pSrc,
								   int nSrcStep,
								   NppiSize oSizeROI,
								   Npp32s *pHist[3],
								   int nLevels[3],
								   Npp32s nLowerLevel[3],
								   Npp32s nUpperLevel[3],
								   Npp8u *pBuffer);

NppStatus nppiHistogramRange_8u_C3R(const Npp8u *pSrc,
									int nSrcStep,
									NppiSize oSizeROI,
									Npp32s *pHist[3],
									const Npp32s *pLevels[3],
									int nLevels[3],
									Npp8u *pBuffer);
Image Proximity

接口好多,没耐心看下去了!!!! 留个坑位

Image Quality Index

计算同尺寸的两张图的图像质量指数,《链接》
在这里插入图片描述

Error

MaximumError,AverageError,MaximumRelativeError,AverageRelativeError

/*
计算两张图像的最大绝对误差
需要额外的计算空间
*/
NppStatus nppiMaximumError_8u_C3R(const Npp8u *pSrc1,
								  int nSrc1Step,
								  const Npp8u *pSrc2,
								  int nSrc2Step,
								  NppiSize oSizeROI,
								  Npp64f *pError,
								  Npp8u *pDeviceBuffer);
NppStatus nppiAverageError_8u_C3R(const Npp8u *pSrc1,
								  int nSrc1Step,
								  const Npp8u *pSrc2,
								  int nSrc2Step,
								  NppiSize oSizeROI,
								  Npp64f *pError,
								  Npp8u *pDeviceBuffer);
NppStatus nppiMaximumRelativeError_8u_C3R(const Npp8u *pSrc1,
										  int nSrc1Step,
										  const Npp8u *pSrc2,
										  int nSrc2Step,
										  NppiSize oSizeROI,
										  Npp64f *pError,
										  Npp8u *pDeviceBuffer);
NppStatus nppiAverageRelativeError_8u_C3R(const Npp8u *pSrc1,
										  int nSrc1Step,
										  const Npp8u *pSrc2,
										  int nSrc2Step,
										  NppiSize oSizeROI,
										  Npp64f *pError,
										  Npp8u *pDeviceBuffer);
IQA

计算两张图像的图像质量
主要涉及的包括MSE,PSNR,SSIM,MS-SSIM等
接口较多,按需索取

更多推荐

长安链上线可视化敏捷测试工具v1.0版本

开发者对区块链底层平台进行初步的了解后,一项经常会涉及到的工作是对平台进行测试以考量其性能及稳定性是否符合自身使用需求。长安链推出了可视化UI操作界面的区块链敏捷测试工具v1.0版本,当前版本可对内置合约进行压测并生成网络拓扑图以验证组网方式。图1区块链性能测评平台是基于长安链2.3.0版本实现,用户在前端页面选择输入

计算机毕设项目之基于springboot+vue+mysql的大学生就业服务平台的设计与实现(内含源码+文档+教程)

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌🍅由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。🍅2023年-2024年最新计算机毕业设计本科选题大全汇总感兴趣的可以先收藏

简单介绍十款可以免费使用的API测试工具

API开发应该是后端开发最常见的工作,而调试和测试API是非常关键的,这篇文章简单介绍几款常用的工具以供大家参考。SoapUISoapUI是很老牌的工具的,在之前Webservice盛行的时候经常会用到。现在官方推出了Pro版本的ReadyAPI,但要收费,它功能更强大,但是太贵了。PostmanPostman是一款很

解锁汽车自动驾驶的密码:L0到L5六个等级全解析

引言随着智能网联汽车技术的快速发展,自动驾驶已成为汽车产业发展的重要方向。根据国际公认的标准,汽车自动驾驶可分为六个等级:L0级到L5级,等级越高意味着自动化程度越高。那么这六个等级具体有何区别呢?本文将详细介绍汽车自动驾驶的六个等级标准。自动驾驶的6个等级(L0-L5)L0级是完全的手动驾驶,驾驶员要完成汽车的全部操

【深度学习】ONNX模型多线程快速部署【基础】

【深度学习】ONNX模型CPU多线程快速部署【基础】提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论文章目录【深度学习】ONNX模型CPU多线程快速部署【基础】前言搭建打包环境python多线程并发简单教程基本教程ONNX模型多线程并发打包成可执行文件总结前言之前的内容已经尽可能简单、详细的介绍CP

智安新闻|智安网络亮相2023网安周!

一年一度的国家网络安全“顶级盛事”——2023年国家网络安全宣传周9月拉开帷幕,本次展览会以“网络安全为人民,网络安全靠人民”为主题,旨在通过展览及现场互动广泛宣传网络安全知识与技能,提升全民网络安全意识,共同构建网络安全重要的社会氛围。作为网络安全领域的专家,智安网络通过各种形式的互动和分享,与全体参与者共同探讨网络

Cento7 Docker安装Zabbix,定制自定义模板

1.先安装docker环境yum-yinstallyum-utilsdevice-mapper-persistent-datalvm2#导入docker安装库yum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.

华为HCIA(五)

Vlanid在802.1Q中高级ACL不能匹配用户名和源MAC2.4G频段被分为14个交叠的,错列的20MHz信道,信道编码从1到14,邻近的信道之间存在一定的重叠范围STA通过Probe获取SSID信息Snmp报文网络管理设备异常发生时会发送trap报文D类地址是组播地址,不能作为主机的IPv4地址路由表中没有MAC

MySQL性能优化——MYSQL执行流程

MySQL执行流程1-5如下图。MySQL的架构共分为两层:Server层和存储引擎层,Server层负责建立连接、分析和执行SQL。MySQL大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存

移动端适配以及多屏幕自适应方案

文章目录前言一、移动端适配问题二、meta-viewport标记三、rem字体适配四、vw和vh五、postcss转换插件总结前言本文主要记录适配移动端以及多屏幕的解决办法,还有postcss转换插件的编写。一、移动端适配问题在MDN中提到:在移动设备和其他窄屏设备中,某些内容在比普通屏幕更宽的虚拟窗口或视口中渲染页面

PC微信3.9.7内测版,更新功能一览(附下载)

之前小编发布了PC微信3.9.7的内测版本,不过大家没有内测权限,不能够安装体验,本次正式版终于来了,大家可以下载安装体验,和之前一样小编给大家介绍本次PC版微信更新的内容,感兴趣的朋友可以下载体验一下!1、聊天界面表情弹窗新增搜索表情功能大家比较期待的表情搜索功能终于上线了,大家以后聊天终于可以使用更加丰富的表情包了

热文推荐