实现matlab编程实现关于图像处理的一些简单的操作,加深对图像处理后图像性能评估的理解:
- clc; close all;
- X = imread('1.jpg');
- X=rgb2gray(X);
- Y=X;
- Y = imnoise(Y, 'salt & pepper');%添加椒盐噪声,也可以改成其他噪声
- A=fspecial('average',3); %生成系统预定义的3X3滤波器
- Z=filter2(A,Y)/255; %均值滤波
- %Z=medfilt2(Y,[3,3]);%中值滤波
- %A=fspecial('gaussian'); %高斯滤波卷积核
- %Z=filter2(A,Y)/255; %用生成的高斯序列进行滤波
- figure;
- subplot(1, 3, 1); imshow(X); title('原图像');
- subplot(1, 3, 2); imshow(Y); title('加噪声图像');
- subplot(1, 3, 3); imshow(Z); title('滤波后图像');
- X = double(X);
- Z = double(Z);
- D = Z-X;
- MSE = sum(D(:).*D(:))/numel(Z);%均方根误差MSE
- PSNR = 10*log10(255^2/MSE);%峰值信噪比
- MAE=mean(mean(abs(D)));%平均绝对误差
- w = fspecial('gaussian', 11, 1.5); %window 加窗
- K(1) = 0.01;
- K(2) = 0.03;
- L = 255;
- Z = double(Z);
- X = double(X);
- C1 = (K(1)*L)^2;
- C2 = (K(2)*L)^2;
- w = w/sum(sum(w));
- ua = filter2(w, Z, 'valid');%对窗口内并没有进行平均处理,而是与高斯卷积,
- ub = filter2(w, X, 'valid'); % 类似加权平均
- ua_sq = ua.*ua;
- ub_sq = ub.*ub;
- ua_ub = ua.*ub;
- siga_sq = filter2(w, Z.*Z, 'valid') - ua_sq;
- sigb_sq = filter2(w, X.*X, 'valid') - ub_sq;
- sigab = filter2(w, Z.*X, 'valid') - ua_ub;
- ssim_map = ((2*ua_ub + C1).*(2*sigab + C2))./((ua_sq + ub_sq + C1).*(siga_sq + sigb_sq + C2));
- MSSIM = mean2(ssim_map);
- display(MSE);%均方根误差MSE
- display(PSNR);%峰值信噪比
- display(MAE);%平均绝对误差
- display(MSSIM);%结构相似性SSIM
另外,常用于图像质量评价方法有:信噪比、峰值信噪比和结构相似性。
均方根误差
均方根误差在图像的质量评价中相当于一个中间的评价指标,很多后续的评价指标都是沿用均方根误差。均方根误差主要是评价已知图像和退化图像之间误差大小。其实这个指标跟最小二乘的原理多少有些类似,也跟统计知识的误差统计求标准差和方差是一样的。
其基本公式为:
RMSE = sqrt(1/mn * E(I - F))
其中,E(I - F) 是退化图像与真实图像之间每个像素的差值的平方和
峰值信噪比
一般峰值信噪比在图像的评价中使用的较多,公式为:
其中,MN是图形的大小,M*N,f 是真实图像,f∧是退化图像
结构相似度
结构相似度(SSIM)是来源于结构相似理论,用来测量两幅图像的结构相似性大小,其最大值为1。尤其反映了图像的轮廓,细节等的相似度。结构相似度可以表示为:
其中,l()表示亮度变化,c()表示差异变化,s()是结构变化。
其中,f 和g 表示两幅图像,uf 和 ug 表示图像的均值,σf和σg 表示它们的方差,σfg表示它们的协方差。C1,C2,C3为比较小的常数,用来确保分母不等于零。