数字图像Word下载.docx
《数字图像Word下载.docx》由会员分享,可在线阅读,更多相关《数字图像Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
ifj>
=N
j=1;
i=i+k;
end
主程序(main.m)
clc
clearall
%warningoff
img=imread('
lena.bmp'
);
subplot(321);
imshow(img);
title('
原图(256x256)'
)
k=2;
n=7;
newimg1=chouyang(img,k,n);
subplot(322);
imshow(newimg1);
k=2,n=7'
k=4;
newimg2=chouyang(img,k,n);
subplot(323);
imshow(newimg2);
k=4,n=7'
newimg3=chouyang(img,k,n);
subplot(324);
imshow(newimg3);
k=6,n=7'
k=6;
newimg4=chouyang(img,k,n);
subplot(325);
imshow(newimg4);
k=8,n=7'
k=8;
newimg5=chouyang(img,k,n);
subplot(326);
imshow(newimg5);
k=8,n=4'
四:
实验结果
五:
实验心得
通过该实验,学习了如何用matlab读取图像并对图样抽样处理,了解了matlab数字图像处理的基本使用及方法
实验二图像灰度级修正
掌握常用的图像灰度级修正方法,即图象的灰度变换法和直方图均衡化法,加深对灰度直方图的理解。
观察图象的增强效果,对灰度级修正前后的图像加以比较。
编程实现图像的灰度变换。
改变图像输入、输出映射的灰度参数范围(拉伸和反比),观看图像处理结果。
对图像直方图均衡化处理,显示均衡前后的直方图和图像。
(1)functionnewimg=GrayEqualize(img)
%功能:
直方图均衡
%首先对原图像数据进行直方图统计,然后计算每一个k所对应的s值,求出直方图均衡
%化的变换表s(k),最后以原图像灰度值k作为地址,对每一像素进行变换,得出均衡化后
%的新图像存放在newbuf中。
%clc
%clearall
%img=imread('
[m,n]=size(img);
GP=zeros(1,256);
fork=0:
255
GP(k+1)=length(find(img==k))/(m*n);
Sk=zeros(1,256);
fori=1:
256
forj=1:
i
Sk(i)=GP(j)+Sk(i);
%计算Sk
Sk=round(Sk*255);
%将Sk归到相近级的灰度
newimg=zeros(m,n);
fori=0:
newimg(find(img==i))=Sk(i+1);
newimg=uint8(newimg);
(2)functionnewimg=GrayGamma(img,r)
伽马校正
%使用imadjust()进行伽马校正。
imadjust()函数的输入、输出灰度范围用空矩阵代
%替,那么这两个范围就会使用缺省值[0,1],这就意味着imadjust()函数不会改变图像
%的灰度范围,从而更好地观察r校正的效果。
m=size(img,1);
n=size(img,2);
c=1;
img=double(img)/255;
m
n
newimg(i,j)=c*img(i,j)^r;
newimg=uint8(newimg*255);
End
(3)functionnewimg=GrayTransfrom(img,a,b,c,d)
%该函数可以任意指定输入图像需要映射的灰度范围和
%指定输出图像所在的灰度范围。
%[a;
b]=stretchlim(img);
newimg=imadjust(img,[a;
b],[c;
d]);
%******************************************************
%灰度范围的线性变换
%m=size(img,1);
%n=size(img,2);
%fxy=double(img)/255;
%gxy=zeros(m,n);
%fori=1:
%forj=1:
%iffxy(i,j)<
a
%gxy(i,j)=c;
%elseiffxy(i,j)>
b
%gxy(i,j)=d;
%end
%gxy(i,j)=(d-c)/(b-a)*(fxy(i,j)-a)+c;
%newimg=uint8(gxy*255);
%****************************************************
主程序:
img0=imread('
figure
(1)
subplot(211),imshow(img0),title('
原灰度图(256x256)'
subplot(212),imhist(img0),title('
直方图'
a=0.1;
b=0.8
c=0;
d=1;
img1=GrayTransfrom(img0,a,b,c,d);
figure
(2)
subplot(211),imshow(img1),title('
灰度范围的线性变换'
subplot(212),imhist(img1),title('
gamma=2;
img2=GrayGamma(img0,gamma);
figure(3);
imshow(img2);
伽马为2校正后'
img3=GrayEqualize(img0);
figure(4);
subplot(211),imshow(img3);
直方图均衡化后'
subplot(212),imhist(img3);
实验结果:
本次实验是对图像处理的深入学习,实验中我们通过直方图伽玛校正对图像进行灰度级修正,均衡化后图比较模糊但是亮度饱和,伽玛校正后更清晰,对比更高
实验三图像的平滑滤波
学习如何对已被噪声污染的图像进行“净化”。
通过平滑处理,对结果图像加以比较,得出自己的实验结论。
编写并调试窗口尺寸为m×
m的平滑滤波函数。
m的中值滤波函数。
(1)functionnewimg=AverageFilter(img,m,hi)
%该函数实现的功能为:
用m×
m的滤波器模板对oldbuf数组的噪声图像进行线性
%滤波,即用窗口内m×
m个像素的平均灰度值来代替图像每个像素点的值,最后结
%果存放在newbuf数组中。
h1=ones(3,3)/9;
h2=[1/101/101/10;
1/101/51/10;
1/101/101/10];
h3=[1/161/81/16;
1/81/41/8;
1/161/81/16];
switch(hi)
case1
h=h1;
case2
h=h2;
case3
h=h3;
otherwise
disp('
错误:
hi只能为1,2,3'
[M,N]=size(img);
newimg=zeros(M,N);
img=[zeros((m-1)/2,N+(m-1));
zeros(M,(m-1)/2),img,zeros(M,(m-1)/2);
zeros((m-1)/2,N+(m-1))];
%补零
buf=img(i:
i+(m-1),j:
j+(m-1)).*h;
newimg(i,j)=sum(buf(:
));
(2)functionnewimg=MedianFilter(img,m)
%函数的功能为:
把oldbuf数组m×
m窗口内的象素值赋给winbuf,然后调用排
%队函数SeekMid(),把该函数在窗口中找到的中值放到newbuf数组中。
new=zeros(M,N);
j+(m-1));
new(i,j)=SeekMid(buf,m);
newimg=uint8(new);
(3)functionmid=SeekMid(winbuf,m)
%winbuf=[312;
4622;
897];
%m=3;
a=sort(winbuf(:
%升序排序
mid=a((m^2+1)/2);
%取中值
主程序:
im0=imread('
im0=imnoise(im0,'
gaussian'
0,0.001);
%添加高斯噪声,均值为0,方差为0.001
figure
(1);
imshow(im0);
受高斯噪声污染的原灰度图'
im=double(im0);
im1=AverageFilter(im,3,1);
figure
(2);
imshow(im1);
平滑线性滤波h1'
im2=AverageFilter(im,3,2);
imshow(im2);
平滑线性滤波h2'
im3=AverageFilter(im,3,3);
imshow(im3);
平滑线性滤波h3'
im4=MedianFilter(im,3);
figure(5);
imshow(im4);
中值滤波'
这个实验是上个实验的后续步骤,通过实验一我掌握了一副图像数字化的步骤,通过实验二掌握了对一副图像进行灰度变换的方法和步骤。
本次实验所做的是图像的平滑滤波,涉及到的函数有:
imnoise、imfilter。
Imnoise函数为Matlab中添加噪声的函数,我在程序中使用的噪声类型为:
gaussian(高斯噪声)。
Imfilter函数为Matlab中的滤波器函数
实验四图像的锐化处理
学习如何用锐化处理技术来加强图像的目标边界和图像细节,对图像进行梯度算子、拉普拉斯算子、Sobel算子设计,使图像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。
锐化处理技术可以在空间域中进行,也可以在频域中运用高通滤波技术进行处理。
编写Robert梯度滤波函数。
编写Sobel算子滤波函数。
编写拉普拉斯边缘增强滤波函数。
观察频域中用高低通滤波技术对图像进行的平滑和锐化处理。
(1)functionnewimg=ILPFilter(img,D0)
%功能:
对图像进行理想低通滤波处理,D0为截止频率
P=2*M;
Q=2*N;
img(P,Q)=0;
I=fft2(img);
I=fftshift(I);
%中心化
P
Q
d=sqrt((i-P/2)^2+(j-Q/2)^2);
ifd<
=D0
H=1;
else
H=0;
I(i,j)=I(i,j)*H;
I=ifftshift(I);
I=ifft2(I);
newimg=uint8(real(I(1:
M,1:
N)));
(2)functionnewimg=LapFilter(img)
用拉普拉斯算子对图像进行边缘增强滤波,最后结果存
%放在newimg数组中。
%figure
(1),imshow(img),title('
原灰度图'
%img=double(img);
m=3;
%img=uint8(img);
%figure
(2),imshow(img)
buf=img(i,j+1)+img(i+1,j)+img(i+2,j+1)+img(i+1,j+2);
newimg(i,j)=4*img(i+1,j+1)-abs(buf);
%figure
(2),imshow(newimg),title('
Laplace'
(3)functionnewimg=RobFilter(img)
用Robert梯度算法对图像进行锐化处理,最后结果存放
%在newimg数组中。
img=[img,zeros(M,1);
zeros(1,N+1)];
newimg(i,j)=abs(img(i,j)-img(i+1,j+1))+abs(img(i+1,j)-img(i,j+1));
(4)functionnewimg=SobFilter(img)
%该函数实现的功能为:
用Sobel算子对图像进行锐化滤波,
%最后结果存放在newimg数组中。
%im0=imread('
%figure
(1),imshow(im0),title('
%img=double(im0);
sx=[-1-2-1;
000;
121];
sy=[-101;
-202;
-101];
gx=img(i:
j+(m-1)).*sx;
gy=img(i:
j+(m-1)).*sy;
newimg(i,j)=abs(sum(gx(:
)))+abs(sum(gy(:
)));
%figure
(2),imshow(newimg)
figure
(1),imshow(im0),title('
im0=double(im0);
im1=RobFilter(im0);
figure
(2),imshow(im1),title('
Robert梯度滤波'
im2=SobFilter(im0);
figure(3),imshow(im2),title('
Sobel算子滤波'
im3=LapFilter(im0);
figure(4),imshow(im3),title('
拉普拉斯边缘增强'
im4=ILPFilter(im0,100);
%理想低通滤波
figure(5),imshow(im4),title('
频域法滤波'
本次实验着重图像的边缘处理,其中涉及的函数有:
edge、imfilter。
Edge函数为Matlab中的边缘检测函数,其用法为:
BW
=
edge(I)
采用I作为它的输入,并返回一个与I相同大小的二值化图像BW,在函数检测到边缘的地方为1。
Imfilter函数为滤波器函数,用法上次实验已经叙述过。
因为Edge函数的输入需要是一个灰度图像或者二值图像,所以先通过Rgb转灰度函数,将图像变为灰度图像,然后通过“Roberts”,“Sobel”算法对图像进行边缘检测,从实验结果的图像中可以看出,Sobel算子在检测丰富信息的图像时,效果更佳。
而在拉普拉斯变换前,给定好了一个模板,进行滤波后能看出,图像的边缘已经更加突出,达到了实验预期的效果
实验五图像的伪彩色处理
学习和掌握伪彩色处理基本方法,将灰度图像转换为多种颜色的彩色图像。
根据图像特点,了解伪彩色处理技术在实际中的应用。
编写密度分割函数,实现灰度图像的伪彩色显示。
编写灰度级彩色变换函数,实现灰度图像的伪彩色显示。
(1)functionnewimg=GrayColor(img)
按密度分割对灰度图像进行伪彩
%色图像处理,最后结果存放在newimg数组中。
newimg=zeros(M,N,3);
ifimg(i,j)<
64
newimg(i,j,1)=255;
newimg(i,j,2)=255;
newimg(i,j,3)=0;
elseifimg(i,j)>
=64&
img(i,j)<
128
newimg(i,j,1)=0;
newimg(i,j,3)=255;
=128&
192
newimg(i,j,2)=0;
=192
end
(2)functionnewimg=GrayColor2(img)
灰度级彩色变换
newimg(i,j,2)=img(i,j)*4;
newimg(i,j,3)=(img(i,j)-64)/4;
newimg(i,j,1)=(img(i,j)-128)*4;
newimg(i,j,2)=(img(i,j)-192)/4;
im1=GrayColor(im0);
多灰度伪彩色分割'
im2=GrayColor2(im0);
灰度级彩色变换'
实验六图像的几何变化
学习和掌握图像几何空间变换和灰度插值的基本方法,对图像进行相应的几何变换操作。
二;
编程实现图像的比例缩放。
编程实现图像任意角度的旋转变换。
分别用MATLAB函数提供的三种插值方法实现图像的缩放和旋转。
(1)functionnewimg=GeoRotate(img,theta)
移动滑动条改变图像的旋转角度,对图像进行旋转变换,
%最后结果存放在newimg数组中,theta为旋转角度。
i0=round(M/2);
j0=round(N/2);
theta=theta/180*pi;
T=[cos(theta)sin(theta)0;
-sin(theta)cos(theta)0;
001];
%旋转矩阵
b=zeros(M,N,2);
for