学 生 实 验 报 告
实 验 课 名 称: 数字图像处理
实验项目名称: 形态学处理
专 业 名 称: 交通信息工程
班
学
级: 24020804
号: 23
学 生 姓 名: 邢洪伟
教 师 姓 名: 丁爱玲
2011 年 5 月 23 日
实验日期: 2011 年 5 月 23 日
实验室名称:
2404
一.实验名称:
图像的形态学处理
二.实验目的与要求:
1.充分掌握图像形态学处理的原理与方法;
2. 充分了解图像形态学方法的应用。
三.实验内容:
1. 任意读取一幅图像;
2. 对所读入的图像进行开、闭运算等二值形态学处理
四.实验设备与软件环境:
一台电脑和 Matlab、VC++环境
五.源程序:
close all
I=imread('car1.jpg');
figure,subplot(3,2,1),imshow(I);title('原始图像','Color','r');% 显示原始图像
%图像预处理
Im1=rgb2gray(I);
subplot(3,2,3),imshow(Im1);title('灰度图','Color','r');
subplot(3,2,4),imhist(Im1);title('灰度图的直方图','Color','r');% 显示图像的直方图
%图像增强
Tiao=imadjust(Im1,[0.19,0.78],[0,1]); % 调整图像
subplot(3,2,5),imshow(Tiao);title('增强灰度图','Color','r');
subplot(3,2,6),imhist(Tiao);title('增强灰度图的直方图','Color','r');
%边缘检测
Im2=edge(Im1,'sobel',0.15,'both'); % 使用 sobel 算子进行边缘检测
figure(2),subplot(2,2,1),imshow(Im2);title('sobel 算子实现边缘检测','Color','r')
%图像腐蚀
se=[1;1;1];
Im3=imerode(Im2,se); % 图像腐蚀
figure(2),subplot(2,2,2),imshow(Im3);title('腐蚀效果图','Color','r');
se=strel('rectangle',[25,25]); % 创建由指定形状的结构元素,矩形
%图像平滑
Im4=imclose(Im3,se); % 对图像实现闭运算,闭运算能平滑图像的轮廓
figure(2),subplot(2,2,3),imshow(Im4);title('平滑图像的轮廓','Color','r');
%移除小对象
Im5=bwareaopen(Im4,2000); % 删除小面积图形
只适合该车牌图像
%%%
that have fewer than P pixels,
figure(2),subplot(2,2,4),imshow(Im5);title('移除小对象','Color','r');
%车牌定位
[y,x,z]=size(Im5);
Im6=double(Im5);
Blue_y=zeros(y,1);%创建元素为零的数组或矩阵 y*1
%%%% 统计每行中灰度值为 1 的像素点个数
for i=1:y
bwareaopen 函数:
removes from a binary image all connected components (objects)
% 参数的选择与具体的图像有关。此参数
% 行数
for j=1:x
if(Im6(i,j,1)==1)
Blue_y(i,1)= Blue_y(i,1)+1; % 根据 Im6 的 y 值确定
end
end
end
% 确定多少行。 从中间最大值往上、下两边搜索,确定边界
[temp MaxY]=max(Blue_y);% 垂直方向车牌区域确定。找出灰度值为 1 的最多一行
PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1))
%%% 像素点个数大于 5 的才是车牌区域
PY1=PY1-1;
%%% 从下往上,寻找起始行 PY1
end
PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2PX1))
PX2=PX2-1;
end
PX1=PX1-1;% 对车牌区域的校正
PX2=PX2+1;
dw=I(PY1:PY2-6,PX1:PX2 ,:);
figure(3),subplot(2,2,2),imshow(dw),title('定位剪切后的彩色车牌图像','Color','r')
b=rgb2gray(dw);
figure(3);subplot(2,2,3),imshow(b),title('1.车牌灰度图像','Color','r')
%车牌图二值化
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3); % T 为设定的二值化的阈值
d=(double(b)>=T); % d 为二值图像
figure(3);subplot(2,2,4),imshow(d),title('1.车牌二值图像','Color','r')
六.运行结果与分析:
七.实验中遇到的问题、解决方法及体会:
通过本次实验,对车牌的处理流程有了跟深刻的理解,把前面的知识
串了一边,图像预处理,图像增强,边缘检测,图像平滑,图像平滑,
移除小对象,车牌定位,车牌图二值化,对 matlab 的编程更熟悉了一点,
但还是遇到各种各样的问题,通过查询各种资料解决,获益良多。