数字图像处理实验报告基于Word文件下载.docx
《数字图像处理实验报告基于Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告基于Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
gamma>
1'
subplot(3,3,5);
imshow(equal);
gamma=1'
subplot(3,3,6);
imshow(below);
gamma<
subplot(3,3,7);
imhist(original);
原图像直方图'
histequal=histeq(original);
%对图像均衡化
subplot(3,3,8);
imshow(histequal);
均衡后的图像'
subplot(3,3,9);
imhist(histequal);
均衡图像的直方图'
axis([025602000]);
【输出图像】
【实验思考】
根据以下图片以及实验结果可知gamma>
1时图像整体变暗,灰度级整体变小;
1时图像整体变亮,灰度级整体变小;
而gamma=1时,图像维持不变。
实验2:
图像的平滑滤波
平滑的目的是减少噪声对图像的影响。
掌握线性滤波和中值滤波两种最典型、最常用的图像平滑方法,对输出结果加以比较、加深理解。
1)编写并调试窗口为3×
3、5×
5的平滑滤波函数;
如[111;
111;
111]/9、[121;
242;
121]/16等)
2)编写并调试窗口为3×
5的中值滤波函数。
3)比较均值滤波和中值滤波的优缺点,分析窗口尺寸对滤波结果的影响。
附:
可供参考的Matlab函数有imnoise、imfilter、medfilt2
functionfliter
I=imread('
%原始图像读取
J=imnoise(I,'
salt&
pepper'
;
%含噪图像加椒盐噪声
subplot(2,3,1);
imshow(J);
含噪图像'
Newbuf1=AverageFilter(J,256,256,3);
%3×
3标准平均,调用均值滤波函数
subplot(2,3,2);
imshow(Newbuf1);
3×
3标准平均'
Newbuf2=AverageFilter(J,256,256,5);
%5×
5标准平均,调用均值滤波函数
subplot(2,3,3);
imshow(Newbuf2);
5×
5标准平均'
W=[121;
121]/16;
%设置加权平均掩膜
Newbuf3=WeighFilter(J,W,256,256,3);
3加权平均,调用加权平均函数
subplot(2,3,4);
imshow(Newbuf3);
3加权平均'
Newbuf4=MedianFilter(J,256,256,3);
3中值滤波,调用中值滤波函数
subplot(2,3,5);
imshow(Newbuf4);
3中值滤波'
Newbuf5=MedianFilter(J,256,256,5);
5中值滤波,调用中值滤波函数
subplot(2,3,6);
imshow(Newbuf5);
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行(或列)的像素值复制到边界,以填充边界
M+(m-1)/2,1:
(m-1)/2)=Oldbuf(:
1:
(m-1)/2);
M+(m-1)/2,N+(m-1)/2:
N+m-1)=Oldbuf(:
N-(m-1)/2:
f(1:
(m-1)/2,(m-1)/2+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:
g(x,y)=g(x,y)+f(x+s,y+t)*1/(m*m);
end
Im(1:
N)=g((m-1)/2+1:
N+(m-1)/2);
%将double型转换为uint8型才可以用imshow正常显示
Newbuf=uint8(Im);
%加权平均滤波函数
functionNewbuf=WeighFilter(Oldbuf,W,M,N,m)
%W掩模
%m掩模模板窗口大小
%将与边界相邻的(m-1)/2行(或列)的像素值复制到边界,以填充边界f((m-1)/2+1:
g(x,y)=g(x,y)+W(s+(m+1)/2,t+(m+1)/2)*f(x+s,y+t);
%中值滤波函数
functionNewbuf=MedianFilter(Oldbuf,M,N,m)
%M、N含噪图像矩阵像素行、列
%m中值滤波窗口大小
j=1;
a(j)=f(x+s,y+t);
%将窗口里的二维元素变成一维元素
j=j+1;
g(x,y)=SeekMid(a,m);
%找出中值函数
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
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('
subplot(2,4,1);
imshow(I);
原始图像'
rob=RobertFilter(I);
subplot(2,4,2);
imshow(rob);
Robert算子滤波结果'
R1=I+rob;
la1=LimitAmplitude(R1);
subplot(2,4,6);
imshow(la1);
Robert算子增强结果'
a2=[-1-2-1;
000;
121];
b2=[-101;
-202;
-101];
sob=SobelFilter(I,a2,b2);
subplot(2,4,3);
imshow(sob);
Sobel算子滤波结果'
R2=I+sob;
la2=LimitAmplitude(R2);
subplot(2,4,7);
imshow(la2);
Sobel算子增强结果'
%s=[010;
1-41;
010];
s=[111;
1-81;
111];
lap=LapFilter(I,s);
cal=Calibration(lap);
subplot(2,4,4);
imshow(cal);
Laplace算子滤波结果'
lap=uint8(lap);
lapr=I-lap;
lapr3=LimitAmplitude(lapr);
subplot(2,4,8);
imshow(lapr3);
Laplace算子增强结果'
%Robert算子滤波
functionrob=RobertFilter(F)
a1=[-10;
01];
b1=[0-1;
10];
%Robert算子模板
[M,N]=size(F);
f=zeros(M+1,N+1);
N)=F(1:
M,N+1:
N+1)=F(:
N:
f(M+1:
M+1,1:
N)=F(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(:
)));
N)=g(1:
rob=uint8(Im);
%Sobel算子滤波
functionsob=SobelFilter(F,sx,sy)
%sx,sy为Sobel算子模板
[m,n]=size(sx);
f=zeros(M+m-1,N+n-1);
M+(m-1)/2,(n-1)/2+1:
N+(n-1)/2)=F(1:
(n-1)/2)=F(:
(n-1)/2);
M+(m-1)/2,N+(n-1)/2:
N+m-1)=F(:
N-(n-1)/2:
(m-1)/2,(n-1)/2+1:
M+m-1,(n-1)/2+1:
N+(n-1)/2)=F(M-(m-1)/2:
g=zeros(M+m-1,N+n-1);
forx=(m-1)/2+1:
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;
N+(n-1)/2);
sob=uint8(Im);
%Laplace算子滤波
functionlap=LapFilter(F,S)
[m,n]=size(S);
gs=S.*mod;
g(x,y)=sum(gs(:
));
lap=Im;
%限幅函数
functionla=LimitAmplitude(F)
f=uint8(F);
[M,N]=size(f);
iff(x,y)>
=255;
f(x,y)=255;
elseiff(x,y)<
=0
f(x,y)=0;
elsef(x,y)=f(x,y);
%将灰度值限定在0到255之间
la=f;
%标定函数
functioncal=Calibration(F)
F=double(F);
m1=min(min(F));
fm(x,y)=F(x,y)-m1;
m2=max(max(fm));
Fm=double(fm);
fs(x,y)=255*(Fm(x,y)/m2);
cal=uint8(fs);
实验4:
图像的统计特性
观察序列图像帧内、帧间差值信号的分布曲线,理解图像在空间域和频率域上的统计特性及其在压缩中的重要性。
1)编写帧内统计函数,计算差值图像(同一行差值、同一列差值),观察统计分布曲线;
2)编写帧间统计函数,计算差值图像(相邻帧的差值),观察统计分布曲线(cla0/1或girl0/1)。
可供参考的Matlab函数有sum、cat、plot
functionEX4
oldbuf=imread('
I1=imread('
I2=imread('
newbuf1=Intrah(oldbuf,1);
%帧内水平差值统计特性
newbuf2=Intrah(oldbuf,0);
%帧内垂直差值统计特性
newbuf3=Inter(I1,I2);
帧间统计特性
imshow(oldbuf);
draw(newbuf1);
水平差值统计特性'
draw(newbuf2);
垂直差值统计特性'
imshow(I1);
CLA1'
imshow(I2);
CLA2'
draw(newbuf3);
帧间统计特性'
functionnewbuf=Intrah(oldbuf,pop2)%帧内统计函数
oldbuf=double(oldbuf);
[M,N]=size(oldbuf);
%防止溢出将数据类型从uint8型转换为double型
newbuf=zeros(1,511);
ifpop2==1
fori=1:
forj=1:
N-1
dH=oldbuf(i,j)-oldbuf(i,j+1);
%帧内水平灰度差值
newbuf(dH+256)=newbuf(dH+256)+1;
else
M-1
dV=oldbuf(i,j)-oldbuf(i+1,j);
newbuf(dV+256)=newbuf(dV+256)+1;
functionnewbuf=Inter(oldbuf,oldbuf1)%帧间统计函数
oldbuf1=double(oldbuf1);
dt=oldbuf(i,j)-oldbuf1(i,j);
%计算帧间差值
newbuf(dt+256)=newbuf(dt+256)+1;
functiondraw(D)
D=D/sum(D);
x=-255:
255;
plot(x,D);
axis([-1001000]);
%为了显示效果好缩小坐标轴范围
实验6:
方块编码
掌握方块编码的基本方法及压缩性能。
【实验内