两种常用的全参考图像质量评价指标--PSNR和SSIM
2015-11-18 16:26
483 查看
1.PSNR(Peak Signal to Noise Ratio)峰值信噪比:
MSE表示当前图像X和参考图像Y的均方误差(Mean Square Error),H、W分别为图像的高度和宽度;MSE=1H×W∑i=1H∑j=1W(X(i,j)−Y(i,j))2MSE=\frac{1}{H \times W} \sum_{i=1}^{H}\sum_{j=1}^{W} (X(i,j)-Y(i,j))^2 PSNR的单位是dB,数值越大表示失真越小。n为每像素的比特数,一般的灰度图像取8,即像素灰阶数为256.
PSNR=10log10((2n−1)2MSE)PSNR=10log_{10}(\frac{(2^n-1)^2}{MSE})PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即基于误差敏感的图像质量评价。由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响等),因而经常出现评价结果与人的主观感觉不一致的情况。
Matlab的函数代码实现如下:
function [ out ] = psnr( X,Y ) [ m,n ] = size( X ); mse = sum(( double(X(:)) - double(Y(:)) ).^2); mse = mse/(m*n); out = 10*log10((255*255)/mse); end
2.SSIM(Structural Similarity)结构相似性:
SSIM(Structural Similarity)结构相似性
μX\mu_X、μY\mu_Y分别表示图像X和Y的均值,σX\sigma_X、σY\sigma_Y分别表示图像X和Y的方差,σXY\sigma_{XY}表示图像X和Y的协方差,即μX=1H×W∑i=1H∑j=1WX(i,j)\mu_X=\frac{1}{H \times W} \sum_{i=1}^{H}\sum_{j=1}^{W} X(i,j)
σX=(1H×W−1∑i=1H∑j=1W(X(i,j)−μX)2)12\sigma_X=(\frac{1}{H \times W-1} \sum_{i=1}^{H} \sum_{j=1}^{W} (X(i,j)-\mu_X)^2)^{\frac{1}{2}}
σXY=1H×W−1∑i=1H∑j=1W(X(i,j)−μX)(Y(i,j)−μY)\sigma_{XY}=\frac{1}{H \times W-1} \sum_{i=1}^{H}\sum_{j=1}^{W} (X(i,j)-\mu_X)(Y(i,j)-\mu _Y)
SSIM分别从亮度、对比度、结构三方面度量图像相似性。
l(X,Y)=2μXμY+C1μ2X+μ2Y+C1l(X,Y)=\frac{2\mu_X\mu_Y+C_1}{\mu_X^2+\mu_Y^2+C_1}
c(X,Y)=2σXσY+C2σ2X+σ2Y+C2c(X,Y)=\frac{2\sigma_X\sigma_Y+C_2}{\sigma_X^2+\sigma_Y^2+C_2}
s(X,Y)=σXY+C3σXσY+C3s(X,Y)=\frac{\sigma_{XY}+C_3}{\sigma_X\sigma_Y+C_3}
C1C_1、C2C_2、C3C_3为常数,为了避免分母为0的情况,通常取C1=(K1∗L)2C1=(K1*L)^2, C2=(K2∗L)2C2=(K2*L)^2, C3=C22C3=\frac{C_2}{2}, 一般地K1=0.01, K2=0.03, L=255. 则
SSIM(X,Y)=l(X,Y)∗c(X,Y)∗s(X,Y)SSIM(X,Y)=l(X,Y)*c(X,Y)*s(X,Y)SSIM取值范围[0,1],值越大,表示图像失真越小.
SSIM的特殊形式如下:
SSIM(X,Y)=(2μXμY+C1)(2σXY+C2)(μ2X+μ2Y+C1)(σ2X+σ2Y+C2) SSIM(X,Y)=\frac{(2\mu_X\mu_Y+C_1)(2\sigma_{XY}+C_2)}{(\mu_X^2+\mu_Y^2+C_1)(\sigma_X^2+\sigma_Y^2+C_2)}
MSSIM(Mean Structural Similarity )平均结构相似性
在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用加权计算每一窗口的均值、方差以及协方差,权值wijw_{ij}满足∑i∑jwij=1\sum_i\sum_jw_{ij}=1,通常采用高斯核,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性MSSIM:μX=∑i=1H∑j=1WwijX(i,j)\mu_X=\sum_{i=1}^{H}\sum_{j=1}^{W}
w_{ij}X(i,j)
σX=(∑i=1H∑j=1Wwij(X(i,j)−μX))12\sigma_X=(\sum_{i=1}^{H}\sum_{j=1}^{W}
w_{ij}(X(i,j)-\mu_X))^{\frac{1}{2}}
σXY=∑i=1H∑j=1Wwij(X(i,j)−μX)(Y(i,j)−μY)\sigma_{XY}=\sum_{i=1}^{H}\sum_{j=1}^{W}
w_{ij}(X(i,j)-\mu_X)(Y(i,j)-\mu_Y)
MSSIM=1N∑k=1NSSIM(xk,yk)MSSIM=\frac{1}{N}\sum_{k=1}^{N}SSIM(x_k,y_k)
Matlab的函数实现代码如下:
function [mssim, ssim_map] = ssim_index(img1, img2, K, window, L) C1 = (K(1)*L)^2; C2 = (K(2)*L)^2; window = window/sum(sum(window)); img1 = double(img1); img2 = double(img2); mu1 = filter2(window, img1, 'valid'); mu2 = filter2(window, img2, 'valid'); mu1_sq = mu1.*mu1; mu2_sq = mu2.*mu2; mu1_mu2 = mu1.*mu2; sigma1_sq = filter2(window, img1.*img1, 'valid') - mu1_sq; sigma2_sq = filter2(window, img2.*img2, 'valid') - mu2_sq; sigma12 = filter2(window, img1.*img2, 'valid') - mu1_mu2; if (C1 > 0 & C2 > 0) ssim_map = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))./((mu1_sq + mu2_sq + C1).*(sigma1_sq + sigma2_sq + C2)); else numerator1 = 2*mu1_mu2 + C1; numerator2 = 2*sigma12 + C2; denominator1 = mu1_sq + mu2_sq + C1; denominator2 = sigma1_sq + sigma2_sq + C2; ssim_map = ones(size(mu1)); index = (denominator1.*denominator2 > 0); ssim_map(index) = (numerator1(index).*numerator2(index))./(denominator1(index).*denominator2(index)); index = (denominator1 ~= 0) & (denominator2 == 0); ssim_map(index) = numerator1(index)./denominator1(index); end mssim = mean2(ssim_map); return
相关文章推荐
- 计算机视觉、数字图像处理等领域相关资源
- YAML 简单介绍
- 5 个免费的受欢迎的 SQLite 管理工具
- 来聊聊apply和call
- 首只私募完成进入备案
- jQuery中的wrap()方法
- webservice与restful
- Android蓝牙通信
- Android自动化测试工具——Monkey
- CURL PHP POST raw data
- Android ViewStub的用法
- 《深入理解Java虚拟机》笔记一
- 【bzoj4060】[Cerc2012]Word equations 字符串
- Restful API 原理以及实现
- 自定义VIEW 流量统计 圆形圈
- 转(子页面刷新父页面)
- 数学口袋精灵app(小学生四则运算app)开发需求
- 示波器使用
- 如何控制递归的深度
- abstract修饰符