找图像强度的二阶导数的零交叉点就能找到精确边缘点。 程序:
1 %边缘检测
2 grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界
3 subplot(3,4,6);imshow(grd);title('图像边缘提取');%输出图像边缘
输出:
图像边缘提取
STEP7:对得到图像作开操作进行滤波:
数学形态非线性滤波,可以用于抑制噪声,进行特征提取、边缘检测、图像分割等图像处理问题。腐蚀是一种消除边界点的过程,结果是使目标缩小,孔洞增大,因而可有效的消除孤立噪声点;膨胀是将与目标物体接触的所有背景点合并到物体中的过程,结果是使目标增大,孔洞缩小,可填补目标物体中的空洞,形成连通域。先腐蚀后膨胀的过程称为开运算,它具有消除细小物体,并在纤细处分离物体和平滑较大物体边界的作用;先膨胀后腐蚀的过程称为闭运算,具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。对图像做了开运算和闭运算,闭运算可以使图像的轮廓线更为光滑,它通常用来消掉狭窄的间断和长细的鸿沟,消除小的孔洞,并弥补轮廓线中的断裂。 程序:
1 2 3 4 5 6 7 8
%对得到图像作开操作进行滤波
bg1=imclose(grd,strel('rectangle',[5,25]));%取矩形框的闭运算
subplot(3,4,7);imshow(bg1);title('图像闭运算[5,25]');%输出闭运算的图像
bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算
subplot(3,4,8);imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像
bg2=imopen(bg3,strel('rectangle',[11,24]));%取矩形框的开运算
9 subplot(3,4,9);imshow(bg2);title('图像开运算[11,24]');%输出开运算的图像
bg4=imsubtract(bg3,bg2);%两幅图相减
subplot(3,4,10);imshow(bg4);title('增强车标图像');%输出增强车标图像
输出:
图像闭运算[5,25]图像开运算[5,19]图像开运算[11,24]增强车标图像
STEP8:进行图像重构。小波图像分解,消除车标下方白色图案,图像重构,只保留车标二值化图像。
程序:
1 %图像重构,只保留车标二指化数据
2 bg5=imreconstruct(imerode(bg4,strel('disk',5)),bg4);
3 subplot(3,4,11);imshow(bg5);title('车标二值化图像');%输出车标二值4 化图像
输出:
车标二值化图像
STEP9:保存二值化图像中车标坐标位置: 程序:
1 2 3 4 5 6 7
%保存白色车标坐标信息
[x0,y0]=find(bg6==1);%找出二值图片中白色的点 pos=[x0';y0'];%把对应白色点的坐标存放到POS中,第一行对应第i个坐标的x,第二行对应第i个坐标的y xmax=max(pos(1,:)); xmin=min(pos(1,:)); ymax=max(pos(2,:)); ymin=min(pos(2,:));
STEP10:根据车标位置,在原图上标示出车标: 程序:
1 2 3 4 5 6 7 8
y=xmin;x=ymin;,%起始坐标(颠倒的) w=ymax-ymin;h=xmax-xmin;%w为宽 h为长 initstate = [x y w h];
subplot(3,4,12);imshow('1.jpg'),title('车标标识效果图');
rectangle('Position',initstate,'LineWidth',1,'EdgeColor','r'); figure,imshow('1.jpg'),title('车标标识效果图');
rectangle('Position',initstate,'LineWidth',1,'EdgeColor','r');
输出:
车标标识效果图