数字图像处理 作业1汇总.docx
《数字图像处理 作业1汇总.docx》由会员分享,可在线阅读,更多相关《数字图像处理 作业1汇总.docx(30页珍藏版)》请在冰豆网上搜索。
![数字图像处理 作业1汇总.docx](https://file1.bdocx.com/fileroot1/2023-5/31/dd2aa653-7a22-49cd-8f13-b02a30259f7e/dd2aa653-7a22-49cd-8f13-b02a30259f7e1.gif)
数字图像处理作业1汇总
数字图像处理
报告标题:
01
报告编号:
课程编号:
学生姓名:
截止日期:
上交日期:
摘要
(1)编写函数计算灰度图像的均方误差(MSE)、信噪比(SNR)、峰值信噪比(PSNR)、平均绝对误差(MAE);
(2)编写函数对灰度图像经行降采样,直接消除像素以及消除像素前进行简单平滑滤波;(3)编写函数对图像进行放大,分别使用像素直接复制和双线性插值的方法:
(4)编写函数用题目给出的量化步骤Q去量化灰度图像,并给出相应的MSE和直方图;(5)编写函数对灰度图像执行直方图均衡化,显示均衡前后的直方图。
同时,熟悉使用MATLAB,并且熟练操作对图像进行各种修改变换等。
KEYWORD:
MATLABMSE、PSNR直方图量化
技术探讨
数字图像处理是基于Matlab来实现的,由于Matlab独特的功能和对矩阵,图像,函数灵活的处理,因而用于图像的处理相当的方便。
task1
均方误差(MSE),信噪比(SNR),峰值信噪比(PSNR),平均绝对误差(MAE)。
可以使用使用for循环语句,分别计算图像MSE/SNR/PSNR/MAE,具体的计算公式见附录代码,下面只附运算原理代码
均方误差(MSE):
sum=sum+(a(i,j)-b(i,j))^2;MSE=sum/(M*N)
信噪比(SNR):
sum2=sum2+a(i,j)^2;SNR=10*log10(sum2/MSE)
峰值信噪比(PSNR):
sum=sum+(a(i,j)-b(i,j))^2;PSNR=10*log10(255^2/MSE)
平均绝对误差(MAE):
sum=sum+a(i,j)+b(i,j);MAE=sum/(M*N)
在每次对同一个图像处理时它们的均方误差(MSE),信噪比(SNR),峰值信噪比(PSNR),平均绝对误差(MAE)都会有所不同,因为它是原图像与加噪后的图像比较,而电脑的每次操作都会对加噪过得图像有影响。
task3
按比例缩小灰度图像
(1)直接消除像素点:
I1=g(1:
m:
end,1:
m:
end);I1为缩小后的图像,g为原图。
(2)先平滑滤波再消除像素点:
滤波函数,g=imfilter(I,w,'corr','replicate');
task4
对图像的放大运用了pixelrepetition法以及双线性插值法:
它有三种插值法:
即最近邻插值(pixelrepetition)、双线性插值、双三次插值(缩放倍数为0.5);缩放与放大由给定的参数来确定。
;缩放与放大由给定的参数来确定。
而缩小则同样适用I1=g(1:
m:
end,1:
m:
end);
而放大的代码为“J=imresize(I,m,'nearest');%使用pixelrepetition法”和“J=imresize(I,m,'bilinear');%使用双线性插值法”
放大倍数更改m值即可
task4
对图像的量化,使用“J=histeq(I,x);”,x为可变的量化步长
task5
灰度图像的量化和直方图均衡化直接调用函数。
“J=histeq(I)”“imhist(I,64)”
结果:
图像的结果
Task1
mse=0.0426psnr=61.8377SNR=68.5982MAE=262.2853
mse=0.0443psnr=61.6711SNR=73.3907MAE=262.2102
处理给定的测试图像“Lena”,以其原始的形式和加过噪声之后的形式。
(用其他图像代替)
Task2
编写MATLAB函数通过两种不同的方法抽取一幅灰度图像从原来的大小到给定的输出尺寸:
(用其他图像代替)
处理给定的测试图像“LivingRoom”,按给定比例系数缩小:
2:
1,4:
1,8:
1,16:
1
(a)直接消除像素
(b)消除像素前进行初步的图像滤波)
Task3
编写MATLAB函数通过两种不同的方法放大一幅灰度图像从原来的大小到给定的输出尺寸
(a)像素重复
(b)双线性插值[内插]
用上述方法将Task2放大回原尺寸
并对使用MATLAB方法对原图像以及放大后的图像计算均方误差和峰值信噪比
(a)像素重复
2:
1时MSE=2.6753e+003PSNR=13.8571
4:
1时MSE=2.4600e+003PSNR=14.2214
8:
1时MSE=2.4696e+003PSNR=14.2045
16:
1时MSE=2.0887e+003PSNR=14.9321
(b)双线性插值[内插]
2:
1时MSE=3.3733e+003PSNR=12.8503
4:
1时MSE=2.6291e+003PSNR=13.9327
8:
1时MSE=2.4658e+003PSNR=14.2113
16:
1时MSE=2.4248e+003PSNR=14.2840
在相同尺寸减少率下,确定哪些组合缩小/放大的方法能提供最小均方误差以及最大峰值信噪比
最小均方误差最大最大峰值信噪比
(a)像素重复
16:
1时MSE=2.0887e+003PSNR=14.9321
(b)双线性插值[内插]
16:
1时MSE=2.4248e+003PSNR=14.2840
Task4
编写MATLAB函数以量化步长Q来量化(数字转换)灰度图像。
以量化步长Q=2,4,816,32,64,128处理给定的测试图像“Lena”(用其他图像代替)
不同量化步长Q量化后的图像的对比
对每一个量化步长显示量化的图像以及它相应的直方图。
显示测试图像及其直方图。
量化后的图像的直方图对比
对Task1用MATLAB编写的方法计算原始以及量化(数字转换)图像的均方误差
Q=2时MSE=8.6904e+003
Q=4时MSE=6.7394e+003
Q=8时MSE=5.3419e+003
Q=16时MSE=4.8395e+003
Q=32时MSE=4.7529e+003
Q=64时MSE=4.7060e+003
Q=128时MSE=4.6526e+003
Task5
编写MATLAB函数对图像“Fig0316
(1)(top_left)”和图像“Fig0316(4)(bottom_left)”分别地进行直方图均衡,并在直方图均衡前后显示图像的直方图(用其他图像代替)
结果探讨
Task1
在每次对同一个图像处理时它们的均方误差(MSE),信噪比(SNR),峰值信噪比(PSNR),
平均绝对误差(MAE)都会有所不同,因为它是原图像与加噪后的图像比较,而电脑的每次操作都会对加噪过得图像有影响。
给原图像加入高斯噪音,则可看出SNR与PSNR的变化,因为其实评价噪声的;MSE可以评价数据的变化程度,MSE的值越小,说明数据具有更好的精确度。
MAE是将各次测量的绝对误差取绝对值后再求平均值。
Task2
对原图像直接消除像素的降采样和经过平滑滤波后得到的降采样采样对比来看,经过平滑滤波后,图像模糊一些,但灰度值变化更加平滑,整体效果好于直接消除像素
Task3
pixelrepetition(像素重复)和双线性插值法对图像的缩放,其处理效果相近,但从MSE和PSNR值来看,双线性插值法更好。
但运算时间较长
将缩小后的图像再放大,还原效果都较好
Task4
可以看出,对图像进行量化后,随着量化步长越大,图像越接近原图;当Q=2时,图像几乎全白,而直方图灰度值也极端的集中在0和250两个值上。
随着量化步长增加,图像细节几个方面均有明显转变,而直方图灰度值也逐渐向着整个灰度级数覆盖,最后集中于10到250之间
Task5
第一幅图,绘制其直方图可以看到直方图灰度值主要集中在100到150之间,均衡化后灰度值覆盖整个灰度级数。
第二幅图图相比相对亮一些,绘制其直方图可以看到直方图灰度值主要集中在60到120以及200到250之间,均衡化后灰度值覆盖整个灰度级数。
附录:
程序列表
第一题:
均方误差(MSE):
sum=sum+(a(i,j)-b(i,j))^2;MSE=sum/(M*N)
峰值信噪比(PSNR)sum=sum+(a(i,j)-b(i,j))^2;PSNR=10*log10(255^2/MSE)
计算MSE;PSNR;
clearall;
closeall;
I=imread('C:
\Users\DarkSelee\Desktop\bbpg');%录入图像
figure
(1),imshow(I);
X=rgb2gray(I);%将真彩色图像转换为灰度图像。
[heightwidth]=size(X);
X=im2double(X);
A=imnoise(X,'gaussian',0,0.05);%加高斯噪声
figure
(2),imshow(A);
%利用两组for循环,即可实现计算
sigma1=0;
fori=1:
height
forj=1:
width
sigma1=sigma1+(X(i,j)-A(i,j))^2;
end
end
mse=(sigma1/(height*width))%均方误差
psnr=10*log10((255^2)/mse)%峰值信噪比
信噪比(SNR)sum2=sum2+a(i,j)^2;SNR=10*log10(sum2/MSE)
计算SNR;
clearall;
closeall;
J=imnoise(I,'gaussian');%加噪声
a=double(I);
b=double(J);
[M,N]=size(I);
sum=0;
%先计算出MSE
fori=1:
M;
forj=1:
N;
sum=sum+(a(i,j)-b(i,j))^2;
end;
end;
MSE=sum/(M*N)
sum2=0;
%同上,利用两组for循环,即可实现计算
fori=1:
M;
forj=1:
N;
sum2=sum2+a(i,j)^2;
end;
end;
SNR=10*log10(sum2/MSE)
平均绝对误差(MAE)sum=sum+a(i,j)+b(i,j);MAE=sum/(M*N)
计算MAE;
J=imnoise(I,'gaussian');%加噪声
a=double(I);
b=double(J);
[M,N]=size(I);
sum=0;
fori=1:
M;
forj=1:
N;
sum=sum+a(i,j)+b(i,j);
end;
end;
MAE=sum/(M*N)
处理给定的测试图像,以其原始的形式和加过噪声之后的形式
clearall;
closeall;
I=imread('C:
\Users\DarkSelee\Desktop\aa.jpg');%读入图像
figure
(1),imshow(I);
X=rgb2gray(I);%将真彩色图像转换为灰度图像。
[heightwidth]=size(X);
X=im2double(X);
A=imnoise(X,'gaussian',0,0.05);%加高斯噪声
figure
(2),imshow(A);%显示图像
第二题
直接消除像素点
X=imread('C:
\Users\DarkSelee\Desktop\bb.jpg');%读图像
I=rgb2gray(X);
figure
(2);
m=imfilter(I,w,'corr','replicate');
subplot(3,2,1);imshow(I);title('原图')
subplot(3,2,3);M=g(1:
2:
end,1:
2:
end);%以2:
1的比例缩小M
imshow(I1);title('2:
1图')
subplot(3,2,4);M2=m(1:
4:
end,1:
4:
end);%以4:
1的比例缩
imshow(I2);title('4:
1图')
subplot(3,2,5);M3=m(1:
8:
end,1:
8:
end);%以8:
1的比例缩小
imshow(I3);title('8:
1图')
subplot(3,2,6);M4=m(1:
16:
end,1:
16:
end);%以16:
1的比例缩小
imshow(I4);title('16:
1图')
先滤波再消除像素点
X=imread('C:
\Users\DarkSelee\Desktop\bb.jpg');%读图像
I=rgb2gray(X);figure
(2);
m=[111;111;111]/9;%为领域平均模板,为缩小做处理
g=imfilter(I,w,'corr','replicate');%对原图像进行平滑滤波处理
subplot(3,2,1);imshow(I);
subplot(3,2,2);imshow(g);title('滤波后的图)
subplot(3,2,3);M1=m(1:
2:
end,1:
2:
end);%以2:
1的比例缩小
imshow(I1);title('2:
1图')
subplot(3,2,4);M2=m(1:
4:
end,1:
4:
end);%以4:
1的比例缩小
imshow(I2);title('4:
1图')
subplot(3,2,5);M3=m(1:
8:
end,1:
8:
end);%以8:
1的比例缩小
imshow(I3);title('8:
1图')
subplot(3,2,6);M4=m(1:
16:
end,1:
16:
end);%以16:
1的比例缩小
imshow(I4);title('16:
1图')
第三题
pixelrepetition法
2:
1的图像处理
A=imread('C:
\Users\DarkSelee\Desktop\bb.jpg');%读图像
I=rgb2gray(A);
figure
(1);
IM=I(1:
2:
end,1:
2:
end);
subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(IM);title('按2:
1缩小的图像');
J=imresize(I,2,'nearest');%使用pixelrepetition法
subplot(1,3,3);imshow(J);title('按1:
2放大的图像');
%负责运算MSE与PSNR的函数,与第一题代码一致
a=double(I);
b=double(J);
[M,N]=size(I);
sum=0;
fori=1:
M;
forj=1:
N;
sum=sum+(a(i,j)-b(i,j))^2;
end;
end;
MSE=sum/(M*N)
PSNR=10*log10(255^2/MSE)
双线性插值法
2:
1的图像处理
A=imread('C:
\Users\DarkSelee\Desktop\bb.jpg');%读图像
I=rgb2gray(A);
figure
(1);
IM=I(1:
2:
end,1:
2:
end);
subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(IM);title('按2:
1缩小的图像');
J=imresize(I,2,'bilinear');%使用双线性插值法
subplot(1,3,3);imshow(J);title('按1:
2放大的图像');
%负责运算MSE与PSNR的函数,与第一题代码一致
a=double(IM);
b=double(J);
[M,N]=size(I);
sum=0;
fori=1:
M;
forj=1:
N;
sum=sum+(a(i,j)-b(i,j))^2;
end;
end;
MSE=sum/(M*N)
PSNR=10*log10(255^2/MSE)
两题的4:
1、8:
1、16:
1的图像处理的代码
基本与2:
1的一致,只是将
“1=I(1:
2:
end,1:
2:
end);J=imresize(I,2,'bilinear');”分别替换为
“IM=(1:
4:
end,1:
4:
end);J=imresize(I,4,'bilinear');”
“IM=(1:
8:
end,1:
8:
end);J=imresize(I,8,'bilinear');”
“1M=I(1:
16:
end,1:
16:
end);J=imresize(I,16,'bilinear');”
即可
第四题
Q=2
clearall;
closeall;
A=imread('C:
\Users\DarkSelee\Desktop\dd.jpg');%读图像
I=rgb2gray(A);
figure;
J=histeq(I,2);
subplot(2,2,1);imshow(I);title('原始图像')
subplot(2,2,2);imhist(I);title('原始图像直方图')
subplot(2,2,3);imshow(J);title('量化后图像')
subplot(2,2,4);imhist(J);title('量化后图像直方图')
%计算MSE的代码,与第一题一致
[M,N]=size(I);
a=double(I);
b=double(J);
sum=0;
fori=1:
M;
forj=1:
N;
sum=sum+(a(i,j)-b(i,j))^2;
end;
end;
MSE=sum/(M*N)
Q=4、Q=8、Q=16、Q=32、Q=64、Q=128的图像处理的代码
基本Q=2的一致,只是将“J=histeq(I,2);”分别替换为
“J=histeq(I,4);”
“J=histeq(I,8);”
“J=histeq(I,16);”
“J=histeq(I,32);”
“J=histeq(I,64);”
即可
(下代码仅用作方便显示对比
B=histeq(A,2);B1=imhist(B);
C=histeq(A,4);C1=imhist(C);
D=histeq(A,8);D1=imhist(D);
E=histeq(A,16);E1=imhist(E);
F=histeq(A,32);F1=imhist(F);
G=histeq(A,64);G1=imhist(G);
H=histeq(A,128);H1=imhist(H);
subplot(4,2,1);imshow(B1);title('Q=2')
subplot(4,2,2);imshow(C1);title('Q=4')
subplot(4,2,3);imshow(D1);title('Q=8')
subplot(4,2,4);imshow(E1);title('Q=16')
subplot(4,2,5);imshow(F1);title('Q=32')
subplot(4,2,6);imshow(G1);title('Q=64')
subplot(4,2,7);imshow(H1);title('Q=128')
)
第五题
clearall;
closeall;
A=imread('C:
\Users\DarkSelee\Desktop\cc.png');%读图像Fig0316(4)(bottom_left)
I=rgb2gray(A);
J=histeq(I);%用直方图均衡来增强对比度
figure;
subplot(2,2,1);imshow(I);title('原始图像')
subplot(2,2,2);imshow(J);title('增强对比度后的图像')
subplot(2,2,3);imhist(I,64);title('原始直方图')
subplot(2,2,4);imhist(J,64);title('增强对比度后的直方图')