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

上传人:b****7 文档编号:23616660 上传时间:2023-05-19 格式:DOCX 页数:34 大小:523.99KB
下载 相关 举报
数字图像处理实验报告基于Matlab.docx_第1页
第1页 / 共34页
数字图像处理实验报告基于Matlab.docx_第2页
第2页 / 共34页
数字图像处理实验报告基于Matlab.docx_第3页
第3页 / 共34页
数字图像处理实验报告基于Matlab.docx_第4页
第4页 / 共34页
数字图像处理实验报告基于Matlab.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

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

《数字图像处理实验报告基于Matlab.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告基于Matlab.docx(34页珍藏版)》请在冰豆网上搜索。

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

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

 

华东师范大学

电子工程系

 

2017.6

 

实验1:

图像灰度级修正

【实验目的】

掌握常用的图像灰度级修正方法(灰度变换法和直方图均衡化),加深对直方图的理解。

观察图像的增强效果,对灰度级修正前后的图像加以比较。

【实验内容】

1)编程实现图像的灰度变换,改变图像的输入、输出映射参数范围(线性拉伸和反比);

2)修改参数gamma值(大于、小于、等于1),观察处理结果;

3)对图像直方图作均衡化处理,显示均衡前后的图像及其直方图。

【实验代码】

original=imread('lena.bmp');

linstr=imadjust(original,[0.30.7],[01]);%线性拉伸

opposite=imadjust(original,[01],[10]);%反比

above=imadjust(original,[01],[01],2);%gamma>1

equal=imadjust(original,[01],[01],1);%gamma=1

below=imadjust(original,[01],[01],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([025602000]);

【输出图像】

【实验思考】

根据以下图片以及实验结果可知gamma>1时图像整体变暗,灰度级整体变小;gamma<1时图像整体变亮,灰度级整体变小;而gamma=1时,图像维持不变。

实验2:

图像的平滑滤波

【实验目的】

平滑的目的是减少噪声对图像的影响。

掌握线性滤波和中值滤波两种最典型、最常用的图像平滑方法,对输出结果加以比较、加深理解。

【实验内容】

  1)编写并调试窗口为3×3、5×5的平滑滤波函数;如[111;111;111]/9、[121;242;121]/16等)

  2)编写并调试窗口为3×3、5×5的中值滤波函数。

  3)比较均值滤波和中值滤波的优缺点,分析窗口尺寸对滤波结果的影响。

附:

可供参考的Matlab函数有imnoise、imfilter、medfilt2

【实验代码】

functionfliter

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=[121;242;121]/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中值滤波');

%标准平均滤波函数

functionNewbuf=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)的像素值

forx=(m-1)/2+1:

M+(m-1)/2

fory=(m-1)/2+1:

N+(m-1)/2

fors=-(m-1)/2:

(m-1)/2

fort=-(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);

%加权平均滤波函数

functionNewbuf=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);

%根据公式计算出处理后g(x,y)的像素值

forx=(m-1)/2+1:

M+(m-1)/2

fory=(m-1)/2+1:

N+(m-1)/2

fors=-(m-1)/2:

(m-1)/2

fort=-(m-1)/2:

(m-1)/2

g(x,y)=g(x,y)+W(s+(m+1)/2,t+(m+1)/2)*f(x+s,y+t);

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);

Newbuf=uint8(Im);

%中值滤波函数

functionNewbuf=MedianFilter(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);

forx=(m-1)/2+1:

M+(m-1)/2

fory=(m-1)/2+1:

N+(m-1)/2

j=1;

fors=-(m-1)/2:

(m-1)/2

fort=-(m-1)/2:

(m-1)/2

a(j)=f(x+s,y+t);%将窗口里的二维元素变成一维元素

j=j+1;

end

end

g(x,y)=SeekMid(a,m);

end

end

Im(1:

M,1:

N)=g((m-1)/2+1:

M+(m-1)/2,(m-1)/2+1:

N+(m-1)/2);

Newbuf=uint8(Im);

%找出中值函数

functionmid=SeekMid(winbuf,m)

%mid排序后的中值

%winbuf待排序窗口

%m窗口大小

%采用冒泡排序方法将窗口像素值从小到大排列,返回中间像素值

fori=1:

m*m-1

fork=1:

m*m-i

ifwinbuf(k)>winbuf(k+1)

temp=winbuf(k);

winbuf(k)=winbuf(k+1);

winbuf(k+1)=temp;

end

end

end

mid=winbuf((m*m+1)/2);

【输出图像】

【实验思考】

1.比较均值滤波和中值滤波的优缺点

均值滤波可以减小图像灰度级的“sharp”变化,可以降低噪声,但是降噪的同时也使边缘部分变得模糊,还可以平滑伪轮廓,去除图像中的不相关的小于掩模尺寸的细节。

中值滤波器的主要功能是使具有不同灰度的点看起来更接近它的相邻点,去除那些相对于其邻域像素更亮或更暗、且区域小于n2/2的孤立像素集。

中值滤波对降低某些类型的随机噪声性能优异,模糊程度低。

在处理椒盐噪声时,均值滤波使图像变得模糊,并且噪声去除性能很差,而中值滤波的效果却很好。

显然,中值滤波比均值滤波更适合去除椒盐噪声。

2.分析窗口尺寸对滤波结果的影响

窗口尺寸越大,图像越模糊,图像边缘和与掩膜大小接近的细节受到的影响也越大

实验3:

图像的锐化处理

【实验目的】

锐化的目的是加强图像的边界和细节,熟悉Robert、Sobel和Laplace算子进行检测,使图像特征(如边缘、轮廓等)进一步增强并突出。

【实验内容】

 1)编写Robert算子滤波函数;

 2)编写Sobel算子滤波函数;

 3)编写Laplace算子滤波函数;

 4)编写限幅和标定函数,给出增强后的图像。

【实验代码】

functionEX3

I=imread('rice.bmp');

subplot(2,4,1);imshow(I);title('原始图像');

rob=RobertFilter(I);

subplot(2,4,2);imshow(rob);title('Robert算子滤波结果');

R1=I+rob;

la1=LimitAmplitude(R1);

subplot(2,4,6);imshow(la1);title('Robert算子增强结果');

a2=[-1-2-1;000;121];

b2=[-101;-202;-101];

sob=SobelFilter(I,a2,b2);

subplot(2,4,3);imshow(sob);title('Sobel算子滤波结果');

R2=I+sob;

la2=LimitAmplitude(R2);

subplot(2,4,7);imshow(la2);title('Sobel算子增强结果');

%s=[010;1-41;010];

s=[111;1-81;111];

lap=LapFilter(I,s);

cal=Calibration(lap);

subplot(2,4,4);imshow(cal);title('Laplace算子滤波结果');

lap=uint8(lap);

lapr=I-lap;

lapr3=LimitAmplitude(lapr);

subplot(2,4,8);imshow(lapr3);title('Laplace算子增强结果');

%Robert算子滤波

functionrob=RobertFilter(F)

a1=[-10;01];

b1=[0-1;10];%Robert算子模板

[M,N]=size(F);

f=zeros(M+1,N+1);

f(1:

M,1:

N)=F(1:

M,1:

N);

f(1:

M,N+1:

N+1)=F(:

N:

N);

f(M+1:

M+1,1:

N)=F(M:

M,:

);%边界填充

g=zeros(M+1,N+1);

forx=1:

M

fory=1:

N

mod=[f(x,y)f(x,y+1);f(x+1,y)f(x+1,y+1)];

gsx=a1.*mod;

gsy=b1.*mod;

g(x,y)=abs(sum(gsx(:

)))+abs(sum(gsy(:

)));

end

end

Im=zeros(M,N);

Im(1:

M,1:

N)=g(1:

M,1:

N);

rob=uint8(Im);

%Sobel算子滤波

functionsob=SobelFilter(F,sx,sy)

%sx,sy为Sobel算子模板

[M,N]=size(F);

[m,n]=size(sx);

f=zeros(M+m-1,N+n-1);

f((m-1)/2+1:

M+(m-1)/2,(n-1)/2+1:

N+(n-1)/2)=F(1:

M,1:

N);

f((m-1)/2+1:

M+(m-1)/2,1:

(n-1)/2)=F(:

1:

(n-1)/2);

f((m-1)/2+1:

M+(m-1)/2,N+(n-1)/2:

N+m-1)=F(:

N-(n-1)/2:

N);

f(1:

(m-1)/2,(n-1)/2+1:

N+(n-1)/2)=F(1:

(m-1)/2,:

);

f(M+(m-1)/2:

M+m-1,(n-1)/2+1:

N+(n-1)/2)=F(M-(m-1)/2:

M,:

);%边界填充

g=zeros(M+m-1,N+n-1);

forx=(m-1)/2+1:

M+(m-1)/2

fory=(n-1)/2+1:

N+(n-1)/2

mod=[f(x-1,y-1)f(x-1,y)f(x-1,y+1);f(x,y-1)f(x,y)f(x,y+1);f(x+1,y-1)f(x+1,y)f(x+1,y+1)];

gsx=sx.*mod;

gsy=sy.*mod;

g(x,y)=abs(sum(gsx(:

)))+abs(sum(gsy(:

)));

end

end

Im=zeros(M,N);

Im(1:

M,1:

N)=g((m-1)/2+1:

M+(m-1)/2,(n-1)/2+1:

N+(n-1)/2);

sob=uint8(Im);

%Laplace算子滤波

functionlap=LapFilter(F,S)

[M,N]=size(F);

[m,n]=size(S);

f=zeros(M+m-1,N+n-1);

f((m-1)/2+1:

M+(m-1)/2,(n-1)/2+1:

N+(n-1)/2)=F(1:

M,1:

N);

f((m-1)/2+1:

M+(m-1)/2,1:

(n-1)/2)=F(:

1:

(n-1)/2);

f((m-1)/2+1:

M+(m-1)/2,N+(n-1)/2:

N+m-1)=F(:

N-(n-1)/2:

N);

f(1:

(m-1)/2,(n-1)/2+1:

N+(n-1)/2)=F(1:

(m-1)/2,:

);

f(M+(m-1)/2:

M+m-1,(n-1)/2+1:

N+(n-1)/2)=F(M-(m-1)/2:

M,:

);

g=zeros(M+m-1,N+n-1);

forx=(m-1)/2+1:

M+(m-1)/2

fory=(n-1)/2+1:

N+(n-1)/2

mod=[f(x-1,y-1)f(x-1,y)f(x-1,y+1);f(x,y-1)f(x,y)f(x,y+1);f(x+1,y-1)f(x+1,y)f(x+1,y+1)];

gs=S.*mod;

g(x,y)=sum(gs(:

));

end

end

Im=zeros(M,N);

Im(1:

M,1:

N)=g((m-1)/2+1:

M+(m-1)/2,(n-1)/2+1:

N+(n-1)/2);

lap=Im;

%限幅函数

functionla=LimitAmplitude(F)

f=uint8(F);

[M,N]=size(f);

forx=1:

M

fory=1:

N

iff(x,y)>=255;

f(x,y)=255;

elseiff(x,y)<=0

f(x,y)=0;

elsef(x,y)=f(x,y);%将灰度值限定在0到255之间

end

end

end

end

la=f;

%标定函数

functioncal=Calibration(F)

F=double(F);

[M,N]=size(F);

m1=min(min(F));

forx=1:

M

fory=1:

N

fm(x,y)=F(x,y)-m1;

end

end

m2=max(max(fm));

Fm=double(fm);

forx=1:

M

fory=1:

N

fs(x,y)=255*(Fm(x,y)/m2);

end

end

cal=uint8(fs);

【输出图像】

实验4:

图像的统计特性

【实验目的】

观察序列图像帧内、帧间差值信号的分布曲线,理解图像在空间域和频率域上的统计特性及其在压缩中的重要性。

【实验内容】

  1)编写帧内统计函数,计算差值图像(同一行差值、同一列差值),观察统计分布曲线;

  2)编写帧间统计函数,计算差值图像(相邻帧的差值),观察统计分布曲线(cla0/1或girl0/1)。

附:

可供参考的Matlab函数有sum、cat、plot

【实验代码】

functionEX4

oldbuf=imread('rice.bmp');

I1=imread('CLA1.bmp');

I2=imread('CLA2.bmp');

newbuf1=Intrah(oldbuf,1);%帧内水平差值统计特性

newbuf2=Intrah(oldbuf,0);%帧内垂直差值统计特性

newbuf3=Inter(I1,I2);帧间统计特性

subplot(2,3,1);imshow(oldbuf);title('原始图像');

subplot(2,3,2);draw(newbuf1);title('水平差值统计特性');

subplot(2,3,3);draw(newbuf2);title('垂直差值统计特性');

subplot(2,3,4);imshow(I1);title('CLA1');

subplot(2,3,5);imshow(I2);title('CLA2');

subplot(2,3,6);draw(newbuf3);title('帧间统计特性');

functionnewbuf=Intrah(oldbuf,pop2)%帧内统计函数

oldbuf=double(oldbuf);

[M,N]=size(oldbuf);%防止溢出将数据类型从uint8型转换为double型

newbuf=zeros(1,511);

ifpop2==1

fori=1:

M

forj=1:

N-1

dH=oldbuf(i,j)-oldbuf(i,j+1);%帧内水平灰度差值

newbuf(dH+256)=newbuf(dH+256)+1;

end

end

else

fori=1:

M-1

forj=1:

N

dV=oldbuf(i,j)-oldbuf(i+1,j);

newbuf(dV+256)=newbuf(dV+256)+1;

end

end

end

functionnewbuf=Inter(oldbuf,oldbuf1)%帧间统计函数

oldbuf=double(oldbuf);

oldbuf1=double(oldbuf1);

[M,N]=size(oldbuf);

newbuf=zeros(1,511);

fori=1:

M

forj=1:

N

dt=oldbuf(i,j)-oldbuf1(i,j);%计算帧间差值

newbuf(dt+256)=newbuf(dt+256)+1;

end

end

functiondraw(D)

D=D/sum(D);

x=-255:

255;

plot(x,D);

axi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1