数字图像处理实验报告基于Matlab
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东师范大学
电子工程系
2017、6
实验1:图像灰度级修正
【实验目的】
掌握常用的图像灰度级修正方法(灰度变换法与直方图均衡化),加深对直方图的理解。观察图像的增强效果,对灰度级修正前后的图像加以比较。
【实验内容】
1)编程实现图像的灰度变换,改变图像的输入、输出映射参数范围(线性拉伸与反比);
2)修改参数gamma值(大于、小于、等于1),观察处理结果;
3)对图像直方图作均衡化处理,显示均衡前后的图像及其直方图。
【实验代码】
original=imread('lena、bmp');
linstr=imadjust(original,[0、3 0、7],[0 1]);%线性拉伸
opposite=imadjust(original,[0 1],[1 0]); %反比
above=imadjust(original,[0 1],[0 1],2); %gamma>1
equal=imadjust(original,[0 1],[0 1],1); %gamma=1
below=imadjust(original,[0 1],[0 1],0、5); %gamma<1
subplot(3,3,1);imshow(original);title('原图像');
subplot(3,3,2);imshow(linstr);title('线性拉伸');
subplot(3,3,3);imshow(opposite);title('反比');
subplot(3,3,4);imshow(above);title('gamma>1');
subplot(3,3,5);imshow(equal);title('gamma=1');
subplot(3,3,6);imshow(below);title('gamma<1');
subplot(3,3,7);imhist(original);title('原图像直方图');
histequal=histeq(original);%对图像均衡化
subplot(3,3,8);imshow(histequal);title('均衡后的图像');
subplot(3,3,9);imhist(histequal);title('均衡图像的直方图');
axis([0 256 0 2000]);
【输出图像】
【实验思考】
根据以下图片以及实验结果可知gamma>1时图像整体变
暗,灰度级整体变小;gamma<1时图像整体变亮,灰度级整体
变小;而gamma=1时,图像维持不变。
实验2:图像的平滑滤波
【实验目的】
平滑的目的就是减少噪声对图像的影响。掌握线性滤波与中
值滤波两种最典型、最常用的图像平滑方法,对输出结果加以
比较、加深理解。
【实验内容】
1)编写并调试窗口为3×3、5×5的平滑滤波函数;如[1 1 1;1 1 1 ;1 1 1]/9、[1 2 1;2 4 2;1 2 1]/16等)
2)编写并调试窗口为3×3、5×5的中值滤波函数。
3)比较均值滤波与中值滤波的优缺点,分析窗口尺寸对滤波结果的影响。
附:可供参考的Matlab函数有imnoise、imfilter、medfilt2
【实验代码】
function fliter
I = imread('lena、bmp'); %原始图像读取
J = imnoise(I,'salt & pepper',0、02); %含噪图像加椒盐噪声
subplot(2,3,1);imshow(J);title('含噪图像');
Newbuf1=AverageFilter(J,256,256,3);%3×3标准平均,调用均值滤波函数
subplot(2,3,2);imshow(Newbuf1);title('3×3标准平均');
Newbuf2=AverageFilter(J,256,256,5);%5×5标准平均,调用均值滤波函数
subplot(2,3,3);imshow(Newbuf2);title('5×5标准平均');
W=[1 2 1;2 4 2;1 2 1]/16; %设置加权平均掩膜
Newbuf3=WeighFilter(J,W,256,256,3);%3×3加权平均,调用加权平均函数
subplot(2,3,4);imshow(Newbuf3);title('3×3加权平均');
Newbuf4=MedianFilter(J,256,256,3);%3×3中值滤波,调用中值滤波函数
subplot(2,3,5);imshow(Newbuf4);title('3×3中值滤波');
Newbuf5=MedianFilter(J,256,256,5);%5×5中值滤波,调用中值滤波函数subplot(2,3,6);imshow(Newbuf5);title('5×5中值滤波');
%标准平均滤波函数
function Newbuf=AverageFilter(Oldbuf,M,N,m)
%Newbuf 滤波后图像矩阵
%Oldbuf 含噪图像矩阵
%M、N 含噪图像像素矩阵行、列
%m 均值滤波窗口大小
f=zeros(M+m-1,N+m-1);
%将原图像像素复制到f矩阵上,空出(m-1)/2大小的边界
f((m-1)/2+1:M+(m-1)/2,(m-1)/2+1:N+(m-1)/2)=Oldbuf(1:M,1:N);
%将与边界相邻的(m-1)/2行(或列)的像素值复制到边界,以填充边界
f((m-1)/2+1:M+(m-1)/2,1:(m-1)/2)=Oldbuf( : ,1:(m-1)/2);
f((m-1)/2+1:M+(m-1)/2,N+(m-1)/2:N+m-1)=Oldbuf( : ,N-(m-1)/2:N); f(1:(m-1)/2,(m-1)/2+1:N+(m-1)/2)=Oldbuf(1:(m-1)/2, : );
f(M+(m-1)/2:M+m-1,(m-1)/2+1:N+(m-1)/2)=Oldbuf(M-(m-1)/2:M, : ); g=zeros(M+m-1,N+m-1);
Im=zeros(M,N);
%根据公式计算出处理后g(x,y)的像素值
for x=(m-1)/2+1:M+(m-1)/2
for y=(m-1)/2+1:N+(m-1)/2
for s=-(m-1)/2:(m-1)/2
for t=-(m-1)/2:(m-1)/2
g(x,y)=g(x,y)+f(x+s,y+t)*1/(m*m);
end
end
end
end
Im(1:M,1:N)=g((m-1)/2+1:M+(m-1)/2,(m-1)/2+1:N+(m-1)/2);
%将double型转换为uint8型才可以用imshow正常显示
Newbuf=uint8(Im);
%加权平均滤波函数
function Newbuf=WeighFilter(Oldbuf,W,M,N,m)
%Newbuf 滤波后图像矩阵
%Oldbuf 含噪图像矩阵
%W 掩模
%M、N 含噪图像像素矩阵行、列
%m 掩模模板窗口大小
f=zeros(M+m-1,N+m-1);
%将原图像像素复制到f矩阵上,空出(m-1)/2大小的边界
f((m-1)/2+1:M+(m-1)/2,(m-1)/2+1:N+(m-1)/2)=Oldbuf(1:M,1:N);
%将与边界相邻的(m-1)/2行(或列)的像素值复制到边界,以填充边界
f((m-1)/2+1:M+(m-1)/2,1:(m-1)/2)=Oldbuf( : ,1:(m-1)/2);
f((m-1)/2+1:M+(m-1)/2,N+(m-1)/2:N+m-1)=Oldbuf( : ,N-(m-1)/2:N);