求两幅图像的峰值信噪比PSNR值和归一化相关系数NC值
根据给定文件的信息,本文将详细介绍如何计算两幅图像之间的峰值信噪比(Peak Signal-to-Noise Ratio,简称PSNR)以及归一化相关系数(Normalized Cross Correlation,简称NC)。这两个指标在图像处理领域非常常见,常用于评估图像的质量或相似度。 ### 峰值信噪比(PSNR) PSNR是一种衡量图像质量的标准之一,通常用于比较原始图像与压缩后的图像之间的差异。PSNR值越大,表示图像失真越小,质量越高。其定义公式如下: \[ PSNR = 10 \log_{10} \left(\frac{MAX_I^2}{MSE}\right) \] 其中: - \( MAX_I \) 是图像像素的最大可能值,对于8位图像来说,\( MAX_I = 255 \)。 - \( MSE \) 是均方误差(Mean Squared Error),表示两幅图像之间像素值差异的平方平均值。 #### 计算PSNR的步骤 1. **确定最大像素值**:对于8位灰度图像,最大像素值为255。 2. **计算均方误差**:通过下面的公式计算两幅图像的均方误差: \[ MSE = \frac{1}{mn} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1} (X(i,j) - Y(i,j))^2 \] 其中 \( X(i,j) \) 和 \( Y(i,j) \) 分别是原始图像和比较图像在同一位置的像素值。 3. **计算PSNR**:将计算得到的 \( MSE \) 代入到PSNR的公式中进行计算。 ### 归一化相关系数(NC) 归一化相关系数是一种衡量两幅图像相似度的方法,取值范围通常在-1到1之间。当NC值接近1时,表示两幅图像非常相似;当NC值接近0时,表示两幅图像几乎不相关;当NC值接近-1时,表示两幅图像是相反的。其定义公式如下: \[ NC = \frac{\sum (X - \bar{X}) (Y - \bar{Y})}{\sqrt{\sum (X - \bar{X})^2} \sqrt{\sum (Y - \bar{Y})^2}} \] 其中: - \( \bar{X} \) 和 \( \bar{Y} \) 分别是原始图像和比较图像的平均像素值。 - \( X - \bar{X} \) 和 \( Y - \bar{Y} \) 分别代表两幅图像减去各自的平均值。 #### 计算NC的步骤 1. **计算平均值**:分别计算原始图像和比较图像的平均像素值。 2. **计算差分**:对每幅图像的每个像素值减去该图像的平均像素值。 3. **计算分子和分母**:根据NC的定义公式计算分子部分和分母部分。 4. **计算NC值**:将上述计算结果代入NC的公式中得到最终的NC值。 ### 代码示例 以下是对给定文件中的代码进行解释和说明: #### PSNR函数实现 ```matlab function [psnr, mse] = psnr(X, Y) [m, n] = size(X); k = sum(sum((Y - X).^2)); mse = k / (m * n); psnr = 10 * log10(255^2 / mse); end ``` 此段代码实现了PSNR值的计算,其中 `X` 和 `Y` 分别代表两幅待比较的图像。首先计算了均方误差 `mse`,然后根据PSNR的定义公式计算了PSNR值。 #### NC函数实现 ```matlab function nc1 = nc(X, Y) XX = mean2(X); YY = mean2(Y); X1 = X - XX; Y1 = Y - YY; a = sum(sum(abs(X1) .* abs(Y1))); b = sqrt(sum(sum(X1.^2)) * sum(sum(Y1.^2))); nc1 = a / b; end ``` 此段代码实现了NC值的计算,其中 `X` 和 `Y` 分别代表两幅待比较的图像。首先计算了两幅图像的平均像素值,然后计算了归一化相关系数 `nc1`。 通过以上内容,我们可以了解到PSNR和NC的定义、计算方法及其在图像处理领域的应用。这两种方法能够有效地评估图像的质量和相似度,对于图像分析、图像压缩等领域具有重要的意义。
function psnratio=psnr(f1,f2)
%PSNRATIO=PSNR(F1,F2) RETURNS THE PEAR SIGNAL TO NOISE RATIO (d. f1 and f2 are
%the input vector, matrix, etc.
f1=f1(; % make the matrix to vector.
f2=f2(;
if length(f1) ~= length(f2)
errordlg('The length of input data doesnt agree!','Signal to Noise Ratio, SNR');
else
Noise = sum( ((f1-f2).*(f1-f2)) );
if Noise == 0
snratio = 'inf';
else
psnratio=10*log10( (length(f1)*max(f1)^2)/Noise );
end
end
%%%%%%%求PSNR
function [psnr,mse]=psnr(X,Y) % 对double类型的处理 求彩色的可以求平均
[m,n]=size(X);
k=sum(sum((Y-X).^2));
mse=k/m*n;
psnr=10*log10(255^2/mse);
%%%%%%% 求nc
function nc1=nc(X,Y) %X是原始图像,Y是提取的水印信息,必须是double类型
XX=mean2(X);
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页