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

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    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

    还是三个大类NormNormDiff以及NormRel。第一个是针对单张图片进行的Norm操作后两个是针对两张图片完成的Norm操作。归一化的方法也分为三种InfL1和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到ij的像素值和并且加上一个特殊的值最终的结果存储在输出的ij位置。因此如果输入的尺寸是WxH在输出的尺寸是W+1xH+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

    MaximumErrorAverageErrorMaximumRelativeErrorAverageRelativeError

    /*
    计算两张图像的最大绝对误差
    需要额外的计算空间
    */
    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

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

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    “CUDA小白 - NPP(9) 图像处理 Statistical Operations” 的相关文章