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

news2024/11/25 11:45:34

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等
接口较多,按需索取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏平台能否进行定制开发?

游戏平台通常可以进行定制开发,以满足游戏开发商或发行商的特定需求。定制开发可以确保平台更好地适应特定游戏的要求和运营策略。以下是一些常见的定制开发方面: 用户界面和外观:定制平台的用户界面和外观,以符合游戏公司和游戏本…

冒泡排序及其优化

前言 本文将简单介绍冒泡排序及其优化版本,默认从小到大顺序 什么是冒泡排序 冒泡排序是一种简单且经典的排序算法。 基本思想: 是通过反复交换相邻的未按顺序排列的元素,将最小(或最大)的元素逐渐“浮”到正确位置…

MongoDB差异数据对比的快速指南

MongoDB是一种非关系型数据库,它以灵活的 JSON-like 文档的形式存储数据,这种特性使其在处理大量数据和实现快速开发时更具有优势。而由于其灵活的数据模型和强大的性能,MongoDB 被广泛应用在各种业务场景中。随着业务的发展和数据的增长&…

浅谈STL|STL函数对象篇

一.函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 特点 函数对象在使用时,可以像普通函数那…

【RocketMQ】消息的拉取

在上一讲中,介绍了消息的存储,生产者向Broker发送消息之后,数据会写入到CommitLog中,这一讲,就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位,有两种消费模式: 广播…

C语言——三子棋游戏

本文目录 三子棋游戏简介三子棋游戏功能说明游戏界面 C语言代码实现多个文件共同实现game.hgame.ctest.c 三子棋游戏实现逻辑分析编写test.c 文件实现menu()函数实现game()函数打印空棋盘选手落子判断输赢实现game()函数 源代码game.hgame.ctest.c 更多C语言实战项目&#xff0…

微信会员卡开发流程

功能需求: 通过微信第三方平台创建的模板小程序,想要实现用户在小程序支付一定金额后领取会员卡,领取会员卡后可给用户下发一定数量的优惠券,并且实现用户在小程序消费享受商品折扣。 开发流程: 一、了解微信的3个平…

AMS爆炸来袭,上线即巅峰

1.关于首发项目Antmons(AMS)空投结果 Gate.io Startup 首发项目Antmons代币AMS于Aug15th,AM 07:00开始下单,24小时内下单同等对待总共有15,950人下单,下单总价值超过1,000万美金分发系数约为0.001640495298341。根据上线规则AMS项目认购成功,…

67、数据源配置 及 配置多个数据源--C3P0 数据源 和 Hikari 数据源

★ Spring Boot如何选择DataSource数据源 优先级从高到低&#xff1a; HikariCP > Tomcat pooling DataSource > Commons DBCP2 如果要使用Tomcat pooling DataSource这种池化数据源&#xff0c; 那么可以用</exclusions>这个把HikariCP 排除掉&#xff0c;然后sp…

前端html原生页面兼容多端H5和移动端适配方案

目录 图片代码最后 图片 是一个注册页面 代码 自己查看效果 注意: 单位全部用rem这样才能保证兼容性适配多端&#xff0c;px转rem转换公式 1px 1/37.5rem 所以想要20px应该对应20/37.5 0.53rem <!DOCTYPE html> <html lang"en"><head><met…

生成随机数列向量并保存到不同的log文件中

随机数列要求 长度 10元素随机每个数列中有两个相同的元素生成到100个文本中每个文本数列数量为 1000 代码 import torch import pickle import numpy as np import os import shutil import loggingdef creat_logger(log_path,logging_name,suf_name):if not os.path.exists(…

免费知识管理系统,让企业管理文档数据更便捷

编者按&#xff1a;本文详细介绍了免费强大的低代码平台在构建知识管理系统方面的优势&#xff0c;并介绍了其知识管理系统独特的功能。只需轻松操作&#xff0c;即可体验到该平台带来的便捷与高效&#xff01;快来了解如何利用这一神奇的工具&#xff0c;让知识管理变得更加轻…

DataX实现Mysql与ElasticSearch(ES)数据同步

文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…

定制化图标——Element UI 组件图标替换指南

本篇博客将介绍如何在使用 Element UI 组件时对原生图标进行定制化替换&#xff0c;提供了适用于满足个性化需求的方法和技巧。 引言 Element UI 是一款基于 Vue.js 的流行 UI 组件库&#xff0c;在前端开发中得到广泛应用。然而&#xff0c;在使用 Element UI 的组件时&#…

java内存泄漏和内存溢出oom排查思路

1、可能出现 2、如何去进行排查 3、visualvm分析 4、Jprofile分析 案例

使用C#开发163邮件发送功能

创建SMTP服务器&#xff08;发送邮件需要SMTP服务器代发&#xff09; 这里介绍创建网易SMTP&#xff08;SMTP是邮件通讯格式&#xff09;服务器&#xff1a; 1.先注册一个163网易邮箱 2.注册成功后登陆该邮箱 3.在该邮箱中找到设置>POP3/SMTP/IMAP点击进入&#xff0c;如下…

【LeetCode-简单题】541. 反转字符串 II

文章目录 题目方法一&#xff1a;双指针 题目 方法一&#xff1a;双指针 题目的意思&#xff1a; 通俗一点说&#xff0c;每隔k个反转k个&#xff0c;末尾不够k个时全部反转&#xff1b; 需要注意右边界的取值 int r Math.min(l k -1,n-1);//取右边界与n-1的最小值 确定边界…

抖店什么类目容易起店?新开通的抖店,最好是从这几个类目做起

我是王路飞。 做抖店之前&#xff0c;你需要先考虑好自己要做什么类目&#xff0c;适合做什么类目。 如果你什么都不了解&#xff0c;单凭自己的个人喜好去确定类目&#xff0c;大概率是做不起来的。 因为你作为一个没有电商经验的新手&#xff0c;并没有足够的能力判断抖音…

2020南京站ICPC F Firworks - 概率 + 三分

几何分布&#xff1a;每次时间发生的概率互不影响 每次成功的概率是1 - &#xff08;1 - p&#xff09;^ k,所以期望就为1 / &#xff08;1 - &#xff08;1 - p&#xff09;^ k&#xff09;。 期望再乘以该次花费的时间就是在第k轮放烟花的答案&#xff0c;然后让我们求最小…

celery app control inspect python后台控制

i tasks.app.control.inspect() # 创建inspect对象&#xff0c;可以操作tasks的队列管理 i.active(safeNone) # Return list of tasks currently executed by workers. i.reserved(safeNone) # Return list of currently reserved tasks, not including scheduled/active c…