zoukankan      html  css  js  c++  java
  • 求图像的信噪比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 }
  • 相关阅读:
    C#操作json
    sql server 2008 身份验证失败 18456
    MD5密码加密
    oracle dg 报错提示 涉及硬盘错误
    Rhel6.5 相关操作
    Centos6.9部署vnc
    Sqluldr2 libclntsh.so报错处理
    时钟服务器同步方法
    windows copy 和xcopy
    Linux 本地repo配置
  • 原文地址:https://www.cnblogs.com/yongjiuzhizhen/p/3454626.html
Copyright © 2011-2022 走看看