河南科技大学本科毕业设计(论文)
Egray=imsubtract(Sgray,Bgray);
figure,imshow(Egray);title('增强黑白图像'); 输出黑白图像如图 3-4 所示:
图 3-4 增强后的黑白图像
§3. 3 图像边缘提取及二值化
§3.3.1 图像边缘提取
边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,边缘检测主要是精确定位边缘和抑制噪点,原理是:由于微分算子具有突出灰度变化的作用,对图像进行微分运算,在图像边缘处及其灰度变化较大,故该处微分计算值较高,可将这些为分支作为相应点的边缘强度,通过阈值判别来提取边缘点,即如果为分支大于阈值,则为边缘点。其基本步骤是首先利用边缘增强算子,突出图像中的局部边缘,然后定义像素的“边缘强度”,通过设置门限的方法提取边缘点集。
常用的传统边缘检测算子有 Robert 算子、Sobel 算子、Prewitt 算子、Laplace算子和Canny 算子。
16
河南科技大学本科毕业设计(论文)
Robets算子:边缘定位准确,但对噪声敏感,去噪声作用小,适合于边缘明显且噪声较小的图像分割;
Sobel算子:它是方向性的,在水平和垂直方向上形成了最强烈的边缘。Sobel算子不仅能检测边缘点,而且能抑制噪声影响,对灰度渐变和噪声较多的图像处理得较好;
Prewitt算子:与Sobel算子相比,对噪声抑制较弱;
Laplace算子:它是一个与方向无关的各向通行边缘检测算子,对细线和孤立点检测效果好,但边缘方向信息丢失,常产生双像素的边缘,对噪声有双倍加强作用,很少直接用于检测边缘;
Canny算子:边缘检测的方法是寻找图像梯度的局部极大值,它使用两个阈值来分别检测强边缘和弱边缘,而且仅当弱边缘和强边缘相连时,弱边缘才会包含在输出中。
通过实验图对几种边缘检测算子进行仿真(图3-5至3-8),可知: (1)Roberts算子定位比较准确,但由于不包括平滑,所以对噪声比较敏感。
(2) Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波,对噪声具有一定的抑制能力,但不能完全排除检测结果中出现伪边缘。该类算子对灰度渐变和具有噪声的图像处理比较好。其中Sobel算子比Prewitt算子更能抑制噪声的影响。
(3)Canny算子同样采用高斯函数对图像做平滑处理,因此具有较强的去噪能力,但同样存在容易平滑掉一些边缘信息。同时它所采用的一阶微分算子的方向性较好,因此边缘定位准确性较高。
边缘检测算子的实现代码:
I2=edge(I1,'Robert',0.09,'both');
Figure,imshow(I2);title(‘Robert算子’);
17
河南科技大学本科毕业设计(论文)
图 3-6 Robert算子
图 3-7 Prewitt算子
18
河南科技大学本科毕业设计(论文)
图 3-8 Sobel算子
图 3-9 Canny算子
通过边缘检测仿真结果图可见,几个边缘检测算子都可以较好的提取所需的车牌边缘。为了车牌的定位,希望车辆图像的车牌区域突现出来的同时,其它边缘能够很好的得到抑制。Canny算子提取边缘能有效地检测出车牌区域的纹理特征,所以,本次设计选用Canny算子。
19
河南科技大学本科毕业设计(论文)
§3.3.2 灰度图像二值化
灰度图像的二值化处理就是将图像上的点的灰度置为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,要进行二值图像的处理与分析,首先 要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。
本文采用的图像二值化最佳阈值计算方法如下:
Level=(fmax1-(fmax1-fmin1)/3)
式中Level为最佳阀值,fmax为最大灰度,fmin为最小灰度,将图像二值化:
fmax1=double(max(max(Egray))); %egray的最大值并输出双精度型 fmin1=double(min(min(Egray))); %egray的最小值并输出双精度型 level=(fmax1-(fmax1-fmin1)/3)/255; %获得最佳阈值
bw22=im2bw(Egray,level); %转换图像为二进制图像 bw2=double(bw22);
figure,imshow(bw2);title('图像二值化');%得到二值图像,如图 3-10:
20