当前位置:首页 > MATLAB数字图像处理实验报告
《数字图像处理》实验报告
实验功能:
一、 图像的预处理,读入彩色图像将其灰度化 二、 绘制直方图 三、 直方图均衡化
四、 Butterworth低通滤波器 五、 几何变换 六、 彩色图像分离
2013 年 11 月 2 日
目 录
程序整体功能介绍:
我们这实验主要实现了六个功能,用软件系统自带函数和自己写的函数实现将彩色图像灰度化、绘制直方图、直方图均衡化、Butterworth低通滤波器、几何变换、彩色图像分离。 子功能的理论介绍
实验一,图像的预处理,读入彩色图像将其灰度化 灰度图像是数组矩阵,矩阵的值表示灰度浓淡。使用灰度变换函数来实现彩色图像的灰度化,灰度变换函数形式:s=T(r),r代表图像f中的灰度,s表示图像g中的灰度值,两者在图像中处于相同的坐标(x,y)
imwrite(rgb2gray(PS),'PicSampleGray.bmp');将彩色图片灰度化并保存,这个函数把输入灰度图像的窄范围扩展到输出灰度后的数据存入数组 实验二,绘制直方图
灰度直方图是灰度级的函数,直方图定义离散函数h(rk)=nk,rk是【0,G】间隔内第k级灰度,nk为图像中出现rk这种灰度的像素数。用h(rk)的所有元素除
PS=rgb2gray(PS),灰度化
以图像中像素总数,就可以简单的得到归一化直方图。对于整数图像k=0,1,2,3,…,L-1,可用p(rk)表示灰度级rk出现的概率。
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置 end
figure,bar(0:255,GP,'g') ,%绘制直方图 实验三,直方图均衡化
直方图均衡化实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值得数量相等。当灰度级为离散值时,我们利用处理直方图来实现图像均衡化。利用公式sk=T(rk)=?pr(rj)=?j?0j?0kknjn,j=0,1,2,…,L-1—代表给定图像的灰度值直方图,在归一化图中,各个值大致是图像取灰度级的概率,k=0,1,2,3,…,L-1,sk是输出的图像灰度值,对应输入图像的灰度值为rk for i=1:256 for j=1:i
S1(i)=GP(j)+S1(i); %计算Sk end end
S2=round((S1*256)+0.5); %将Sk归到相近级的灰度 for i=1:256
GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率
实验四,Butterworth低通滤波器
n阶的布特沃斯低通滤波器具有从滤波中心到D0的距离的截止频率,传递函数为:H(u,v)=
1,D0为整数,D(u,v)为点(u,v)到滤波
1?[D(u,v)/D0]2n器中心的距离。与理想低通滤波器不同,布特沃斯低通滤波器的传递函数在D点没有尖锐的不连续。在实验中我们使用的是2阶布特沃斯低通滤波器,用傅里叶函数将数组转换为矩阵,再计算低通滤波器传递函数g=fft2(f); % 傅立叶变换
g=fftshift(g); % 转换数据矩阵 [M,N]=size(g);
nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器 d0=50;
m=fix(M/2); n=fix(N/2); for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h1=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数 result1(i,j)=h1*g(i,j); 实验五,几何变换
几何变换改变了图像中像素间的空间关系,可以使图像变大、变小、旋转等。实验中我们设计了放大1.5倍、缩小0.8倍装置后图像功能。几何变换主要是通过坐标点变换、仿射变换等来实现,假设(w,z)和(x,y)是两个空间的坐标系统,分别为输入空间和输出空间,几何坐标变换可定义为输入空间点到输出空间点的映射:(x,y)=T{(w,z)},T{·}叫做正向变换或正向映射。仿射变换是从一个向量空间变换到另一个向量空间,由线性部分组成,表示成矩阵相乘部分、加法部分、偏移部分。变换公式?x?a11y?=?wz? ??a21a12? +?b1a22??b2?,这个公式可以写成
?xy?=?wz?T,T为仿射矩阵,重要的仿射变换包括缩放、旋转、平移、裁剪
和反射,为了实现不同的种类的变换,可以设置不同的T的值。
实验六,彩色图像分离
一幅RGB图像就是M?N?3大小的彩色像素的数组,其中每个彩色像素点都是在特定空间位置的彩色图像所对应的红、绿、蓝三个分量。分量图像的数据类决定了它们的取值范围,如果一幅RGB图像的数据类是double,那么取值范围就是[0,1],类似的,对于unit8和unit16类的RGB图像,取值范围分别是
[0,255],[0,65535],用来表达这些分量图像像素值得比特数决定了一幅RGB图像的比特深度。fR、fG、fB分别表示三幅RGB分量图像,RGB图像就是利用cat操作将这些分量图像组合而成的彩色图像:rab.image=cat(3,fR,fG,fB).
子程序的实现(程序)
图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg'); %读入JPG彩色图像文件
imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存 PS=rgb2gray(PS); %灰度化后的数据存入数组 imshow(PS) %显示出来
%二,绘制直方图
[m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置 end
figure,bar(0:255,GP,'g') %绘制直方图 title('原图像直方图') xlabel('灰度值') ylabel('出现概率') %三,直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i
S1(i)=GP(j)+S1(i); %计算Sk end end
S2=round((S1*256)+0.5); %将Sk归到相近级的灰度 for i=1:256
GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率 end
figure,bar(0:255,GPeq,'b') %显示均衡化后的直方图 title('均衡化后的直方图') xlabel('灰度值') ylabel('出现概率');
%四,Butterworth低通滤波器 I= imread('1.jpg'); figure;
subplot(1,2,1); imshow(I);
title('test1.jpg'); f=double(I);
g=fft2(f); % 傅立叶变换 g=fftshift(g); % 转换数据矩阵 [M,N]=size(g);
nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器 d0=50;
m=fix(M/2); n=fix(N/2); for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h1=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数 result1(i,j)=h1*g(i,j); end end
result1=ifftshift(result1); J2=ifft2(result1); J3=uint8(real(J2)); subplot(1,2,2);
共分享92篇相关文档