• 求图像的信噪比PSNR


      图像的信噪比是衡量一幅图片质量好坏的重要指标。图像的信噪比应该等于信号与噪声的功率谱之比,但功率谱不好计算,可以用信号与噪声的方差之比来估算。首先计算所有像素的局部方差,将局部方差的最大值认为是信号的方差,最小值是噪声的方差,求出比值,再转换成dB数,最后用经验公式修正。

      均方差定义为:

      mathit{MSE} = frac{1}{mn}sum_{i=0}^{m-1}sum_{j=0}^{n-1} ||I(i,j) - K(i,j)||^2

      峰值信噪比定义为:

      mathit{PSNR} = 10 cdot log_{10} left( frac{mathit{MAX}_I^2}{mathit{MSE}} 
ight) 
= 20 cdot log_{10} left( frac{mathit{MAX}_I}{sqrt{mathit{MSE}}} 
ight)

      其中MAXI是表示图像点颜色的最大数值,如果每个采样点用8位表示,那么就是255。更为通用的表示是,如果每个采样点用B位线性脉冲编码调制表示,那么MAXI就是

              2^B-1

      对于每点有RGB三个值的彩色图像来说,峰值信噪比的定义类似,只是均方差所有方差之和除以图像尺寸再除以3。

      图像压缩中典型的信噪比在20~40dB之间,越高越好。

      

     1 #include <cv.h>
     2 #include <highgui.h>
     3 #include <math.h>
     4 #include <stdio.h>
     5 
     6 int main(int argc, char* argv[])
     7 {
     8     if(argc<2)
     9     {
    10         printf("Usage: main <image-file-name>/n/7");
    11         exit(0);
    12     }
    13     IplImage* img = cvLoadImage(argv[1],-1);
    14     int height=img->height;
    15     int width=img->width;
    16     int step=img->widthStep;
    17     uchar *data=(uchar *)img->imageData;
    18     int i,j;
    19     double sum=0;
    20     for(i=0;i<height;i++) 
    21     {
    22         for(j=0;j<width;j++) 
    23         {
    24             sum+=data[i*step+j];
    25         }
    26     }
    27     double mean=0;
    28     mean=sum/(width*height);
    29     double mse=0;
    30     for(i=0;i<height;i++) 
    31     {
    32         for(j=0;j<width;j++) 
    33         {
    34             mse+=(data[i*step+j]-mean)*(data[i*step+j]-mean);
    35         }
    36     }
    37     mse=mse/(width*height);
    38     double psnr=0;
    39     psnr=10*log10(255*255/mse);
    40     printf("sum  is: %lf
    ",sum);
    41     printf("mean is: %lf
    ",mean);
    42     printf("mse  is: %lf
    ",mse);
    43     printf("psnr is: %lf
    ",psnr);
    44     cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE); 
    45     cvShowImage(argv[1], img );    
    46     cvWaitKey(0);
    47     cvDestroyWindow(argv[1]);
    48     cvReleaseImage(&img );
    49     return 0;
    50 }
  • 相关阅读:
    [网站设计]网站设计的流程
    教你几招如何看透一个人
    难得迷茫
    java 日期 加减 运算
    第01章 SQL Server数据库基础 读后感
    [网站设计]如何设计一个成功的网站
    [网站设计] 素材网罗
    转载个人毕业5年职业感想
    SWTDesigner
    [存档]asp.net夜话之十一:web.config详解收藏
  • 原文地址:https://www.cnblogs.com/yongjiuzhizhen/p/3454626.html
Copyright © 2020-2023  润新知