数字图像处理实验报告-基于Matlab

  • 格式:docx
  • 大小:590.37 KB
  • 文档页数:22

下载文档原格式

  / 22
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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); 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);