zoukankan      html  css  js  c++  java
  • matlab实现PSNR

    @

    1.PSNR原理

    PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下:
    在这里插入图片描述
    这里的MAX通常是图像的灰度级,一般就是255了。

    2.PSNR的matlab实现代码

    将图像缩小再放大比较一下,下面是代码:

    close all;
    clear all;
    clc;
    
    img=imread('lena.jpg');
    [h w]=size(img);
    imgn=imresize(img,[floor(h/2) floor(w/2)]);
    imgn=imresize(imgn,[h w]);
    img=double(img);
    imgn=double(imgn);
    
    B=8;                %编码一个像素用多少二进制位
    MAX=2^B-1;          %图像有多少灰度级
    MES=sum(sum((img-imgn).^2))/(h*w);     %均方差
    PSNR=20*log10(MAX/sqrt(MES));           %峰值信噪比
    

    PSNR越高,图像和原图越接近。

    3.针对彩色图像的PSNR的matlab代码

    (a)可以将分别计算R,G,B三个通道总和,最后MSE直接在原公式上多除以3就行(opencv官方代码是这么做的,与matlab直接计算结果是一样的)。
    (b)将R,G,B格式转换为YCbCr,只计算Y分量(亮度分量),结果会比直接计算要高几个dB。
    贴代码,这里是将图片格式转成YCbCr(只计算Y分量):

    function [PSNR, MSE] = psnr(X, Y)
    %%%%%%%%%%%%%%%%%%%%%%%%%%%
    %
    % 计算峰值信噪比PSNR
    % 将RGB转成YCbCr格式进行计算
    % 如果直接计算会比转后计算值要小2dB左右(当然是个别测试)
    %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%
     if size(X,3)~=1   %判断图像时不是彩色图,如果是,结果为3,否则为1
       org=rgb2ycbcr(X);
       test=rgb2ycbcr(Y);
       Y1=org(:,:,1);
       Y2=test(:,:,1);
       Y1=double(Y1);  %计算平方时候需要转成double类型,否则uchar类型会丢失数据
       Y2=double(Y2);
     else              %灰度图像,不用转换
         Y1=double(X);
         Y2=double(Y);
     end
     
    if nargin<2    
       D = Y1;
    else
      if any(size(Y1)~=size(Y2))
        error('The input size is not equal to each other!');
      end
     D = Y1 - Y2; 
    end
    MSE = sum(D(:).*D(:)) / numel(Y1); 
    PSNR = 10*log10(255^2 / MSE);
    

    然后写主函数

     X= imread('C:UsersAdministratorDesktop
    oise_image.jpg');
     Y= imread('C:UsersAdministratorDesktopactruel_image.jpg');
     psnr(X, Y)
    
  • 相关阅读:
    JDBC 基本语法总结
    MySQL 基本语法
    mysql学习第三天练习(日期和时间函数)
    mysql学习第三天练习(流程控制函数)
    mysql学习第三天笔记
    mysql学习第二天函数
    mysql学习第一天select
    mysql学习第一天
    Java石头剪刀布小游戏
    Java万年历
  • 原文地址:https://www.cnblogs.com/xiegaosen/p/12004629.html
Copyright © 2011-2022 走看看