数学形态学图像处理的基本运算实现及分析
- 格式:doc
- 大小:2.35 MB
- 文档页数:7
图像处理中的数学形态学算法在车牌识别中的应用随着车辆数量的不断增加,车牌识别技术在交通管理、安防监控、停车场管理等领域中扮演着重要的角色。
而在车牌识别技术中,数学形态学算法作为一种重要的图像处理工具,具有很高的应用价值。
本文将重点探讨数学形态学算法在车牌识别中的应用,以及其在该领域中的优势和挑战。
一、数学形态学算法简介数学形态学算法是一种基于形状和结构分析的图像处理方法,其基本原理是利用集合论中的膨胀和腐蚀运算来分析图像中的形状和结构特征。
其中,膨胀操作可以扩张图像中的目标物体,而腐蚀操作可以收缩图像中的目标物体。
这些基本的形态学操作可以通过组合和重复应用来提取图像中的目标物体,并进行形状分析和特征提取。
二、数学形态学算法在车牌识别中的应用1. 车牌定位车牌识别的第一步是车牌的定位,即从整个图像中准确定位车牌的位置。
数学形态学算法可以通过腐蚀和膨胀操作来消除图像中的噪声,提取出车牌的边界信息。
通过应用腐蚀和膨胀操作,可以得到一系列形状和尺寸各异的区域,而其中包含车牌的区域往往具有明显的矩形或正方形特征。
因此,通过对这些区域进行形态学分析和筛选,可以有效地定位车牌的位置。
2. 车牌字符分割车牌字符分割是车牌识别的关键步骤之一,其中车牌上的字符需要被正确分割出来以方便后续的字符识别。
数学形态学算法可以通过腐蚀和膨胀操作来分离车牌上的字符,消除字符之间的干扰。
通过应用腐蚀操作,可以收缩车牌上的字符区域,使得字符之间的间隔增大;而通过应用膨胀操作,则可以扩张字符区域,使得字符之间的间隔变小。
通过选择合适的腐蚀和膨胀操作的组合方式,可以有效地实现车牌字符的分割。
3. 车牌字符识别车牌字符识别是车牌识别的最后一步,其中车牌上的字符需要被分析和识别出来。
数学形态学算法可以通过应用开运算和闭运算操作来修复和增强字符区域的形态特征,从而提高字符识别的准确性。
开运算可以消除字符区域之外的噪声,平滑字符区域的边界;而闭运算则可以填充字符区域中的空洞,增强字符区域的连通性。
形态学的原理以及应用场景(含源码)转自:摘要:形态学一般指生物学中研究动物和植物结构的一个分支。
用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具。
基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。
形态学图像处理的基本运算有:•膨胀和腐蚀(膨胀区域填充,腐蚀分割区域)•开运算和闭运算(开运算去除噪点,闭运算填充内部孔洞)•击中与击不中•顶帽变换,黑帽变换形态学的应用:消除噪声、边界提取、区域填充、连通分量提取、凸壳、细化、粗化等;分割出独立的图像元素,或者图像中相邻的元素;求取图像中明显的极大值区域和极小值区域;求取图像梯度在讲各种形态学操作之前,先来看看结构元素:膨胀和腐蚀操作的核心内容是结构元素。
(后面的开闭运算等重要的也是结构元素的设计,一个合适的结构元素的设计可以带来很好的处理效果OpenCV里面的API介绍:Mat kernel = getStructuringElement(int shape,Size ksize,Point anchor);一,腐蚀和膨胀腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。
•膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域(是求局部最大值的操作)•腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域(是求局部最小值的操作)膨胀与腐蚀能实现多种多样的功能,主要如下:1、消除噪声2、腐蚀分割(isolate)出独立的图像元素,膨胀在图像中连接(join)相邻的元素。
3、寻找图像中的明显的极大值区域或极小值区域4、求出图像的梯度opencv中膨胀/腐蚀API:(两者相同)void dilate/erode( const Mat& src, //输入图像(任意通道的)opencv实现:Mat src1 = imread("D:/opencv练习图片/腐蚀膨胀.png");图片膨胀:图片[图片上传中...(image-e5cbf7-1637738882548-13)]1️⃣ 腐蚀操作的原理就是求局部最小值的操作,并把这个最小值赋值给参考点指定的像素。
数学形态学兴起于20世纪60年代,是一种新型的非线性算子,它着重研究图像的几何结构,由于视觉信息理解都是基于对象几何特性的,因此它更适合视觉信息的处理和分析,这类相互作用由两种基本运算腐蚀和膨胀及它们的组合运算来完成。
数学形态学为在图像识别、显微图像分析、医学图像、工业图像、机器人视觉方面都有十分重要的应用。
本设计运用MATLAB把一幅图像二值化,并进行膨胀、腐蚀、开启、闭合等处理,这些算法分别能够使图像边缘扩大物体中的空洞;边缘缩小消除小且无意义的物体;保持原目标的大小与形态的同时,填充凹陷,弥合孔洞和裂缝;用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不改变其面积。
关键字:膨胀;腐蚀;开启;闭合1设计目的与要求 (1)1.1设计目的 (1)1.2设计要求 (1)2 MATLAB平台 (2)2.1MATLAB简介 (2)2.2MATLAB的应用 (2)3设计原理 (3)3.1膨胀 (3)3.2腐蚀 (3)3.3开启与闭合 (5)3.4阈值 (5)4设计方案 (6)4.1设计思想 (6)4.2设计流程 (6)5代码实现 (7)6仿真与结果分析 (8)6.1仿真 (6)6.2结果分析 (11)结论 (12)参考文献 (13)二值图像的处理程序设计—形态学处理1设计目的与要求1.1设计目的(1)了解膨胀、腐蚀、开启、闭合四种方法对二值图像的影响,及它们在数字图处理中的应用。
(2)进一步熟悉MATLAB运用和图像处理的知识,加深对图像二值化处理1.2课程设计要求利用所学的数字图像处理技术,自己设计完成对一副灰度图像的形态学运算(膨胀、腐蚀及其组合运算);对一副灰度图像的分块处理运算。
具体要求:(1)熟悉和掌握MATLAB程序设计方法;(2)学习和熟悉MATLAB图像处理工具箱;(3)学会运用MATLAB工具箱对图像进行处理和分析;(4)能对图像jpg格式进行打开、保存、另存、退出等功能操作;(5)利用所学数字图像处理技术知识、MA TLAB软件对图像进行腐蚀,膨胀,开运算,闭运算。
实验三图像形态学处理一.实验目的及要求1.利用MATLAB研究二值形态学图像处理常用算法;2.掌握MATLAB形态学图像处理基本操作函数的使用方法;3.了了解形态学的基本应用。
二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.膨胀与腐蚀(Dilation and Erosion)(1)对简单二值图像进行膨胀与腐蚀clear all, close allBW = zeros(9,10);BW(4:6,4:7) = 1;BWSE = strel('square',3)BW1 = imdilate(BW,SE)BW2 = imerode (BW,SE)figure(1),subplot(1,2,1), imshow(BW), title(' Original Image ');subplot(1,2,2), imshow(BW1), title(' Dilated Image ');figure(2),subplot(1,2,1), imshow(BW), title(' Original Image ');subplot(1,2,2), imshow(BW2), title(' Eroded Image ');修改参数:clear all, close allBW = zeros(9,10);BW(4:8,4:8) = 1;BWSE = strel('square',3)BW1 = imdilate(BW,SE)BW2 = imerode (BW,SE)figure(1),subplot(1,2,1), imshow(BW), title(' Original Image ');subplot(1,2,2), imshow(BW1), title(' Dilated Image ');figure(2),subplot(1,2,1), imshow(BW), title(' Original Image ');subplot(1,2,2), imshow(BW2), title(' Eroded Image ');(2)对文本图像进行膨胀与腐蚀clear all, close allI = imread('C:\Users\Administrator\Desktop\broken_text.tif'); SE = [0,1,0;1,1,1;0,1,0]BW1 = imdilate(I, SE);BW2 = imerode (I, SE);figure(1),subplot(1,2,1), imshow(I), title(' Original Image ');subplot(1,2,2), imshow(BW1), title(' Dilated Image ');figure(2),subplot(1,2,1), imshow(I), title(' Original Image ');subplot(1,2,2), imshow(BW2) , title(' Eroded Image ');修改参数:clear all, close allI = imread('C:\Users\Administrator\Desktop\broken_text.tif'); SE = [0,0,0;0,0,0;0,0,0]BW1 = imdilate(I, SE);BW2 = imerode (I, SE);figure(1),subplot(1,2,1), imshow(I), title(' Original Image '); subplot(1,2,2), imshow(BW1), title(' Dilated Image '); figure(2),subplot(1,2,1), imshow(I), title(' Original Image '); subplot(1,2,2), imshow(BW2) , title(' Eroded Image ');2. 开、闭运算(Open and Close)clear all, close allI = imread('cameraman.tif');bw = ~im2bw(I,graythresh(I));se = strel('disk',5);bw2 = imopen(bw,se);subplot(1,2,1), imshow(bw), title('Thresholded Image')subplot(1,2,2), imshow(bw2), title('After opening')bw3 = imclose(bw,se);figure;subplot(1,2,1), imshow(bw), title('Thresholded Image')subplot(1,2,2), imshow(bw3), title('After Closing')修改参数:clear all, close allI = imread('cameraman.tif');bw = ~im2bw(I,graythresh(I));se = strel('disk',8);bw2 = imopen(bw,se);subplot(1,2,1), imshow(bw), title('Thresholded Image')subplot(1,2,2), imshow(bw2), title('After opening')bw3 = imclose(bw,se);figure;subplot(1,2,1), imshow(bw), title('Thresholded Image')subplot(1,2,2), imshow(bw3), title('After Closing')3. 击中/击不中变换(hit-and-miss operation)clear all, close allbw = [0 0 0 0 0 00 0 1 1 0 00 1 1 1 1 00 1 1 1 1 00 0 1 1 0 00 0 1 0 0 0]interval = [0 -1 -11 1 -10 1 0]bw2 = bwhitmiss(bw,interval)subplot(1,3,1), imshow(bw), title(' Original Image ');subplot(1,3,2), imshow(interval), title(' Interval Image ');subplot(1,3,3), imshow(bw2) , title('after hit/miss transformation');修改参数:clear all, close allbw = [0 0 0 0 0 00 0 1 1 0 00 1 1 1 1 00 1 1 1 1 00 0 1 1 0 00 0 1 0 0 0]interval = [0 0 00 1 00 1 0]bw2 = bwhitmiss(bw,interval)subplot(1,3,1), imshow(bw), title(' Original Image ');subplot(1,3,2), imshow(interval), title(' Interval Image ');subplot(1,3,3), imshow(bw2) , title('after hit/miss transformation')4.细化与骨架抽取clear all, close allBW = ~ imread('logo.tif');BW1 = bwmorph(BW,'thin',Inf);BW2 = bwmorph(BW,'skel',Inf);subplot(1,3,1), imshow(BW), title(' Original Image ');subplot(1,3,2), imshow(BW1), title(' Thinned Image ');subplot(1,3,3), imshow(BW2), title(' Image skeleton');help bwmorph(二)用MATLAB二值数学形态学函数编程提取’rice.gif’图像中的物体边界。
数学形态学图像处理的基本运算实现及分析
一、基本原理
数学形态学是一种应用于图像处理和模式识别领域的新的方法。
它的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像进行分析和识别的目的。
数学形态学的数学基础和所用语言是集合论。
数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。
另一方面,数学形态学的算法具有天然的并行实现的结构。
1、基本运算
数学形态学的基本运算有四个:膨胀、腐蚀、开启和关。
如用A 表示图像集合,B 表示结构元素,形态学运算就是用B 对A 进行操 作。
A 被
B 膨胀,记为A ⊕B ,⊕为膨胀算子,膨胀的定义为
A B ⊕ˆ{|[()]}x x B A =≠∅
该式表明的膨胀过程是B 首先做关于原点的映射,然后平移x 。
A 被B 的膨胀是B 被所有x 平移后与A 至少有一个非零公共元素。
A 被
B 腐蚀,记为A ⊙B ,⊙为腐蚀算子,腐蚀的定义为
A B Θˆ{|[()]}x x B A =≠∅
也就是说,A 被B 的腐蚀的结果为所有使B 被x 平移后包含于A 的点x 的集合。
换句话说,用B 来腐蚀A 得到的集合是B 完全包括在A 中时B 的原点位置的集合。
膨胀和腐蚀并不互为逆运算,所以它们可以级连结合使用。
例如,利用同一个结构元素B ,先对图像腐蚀然后膨胀其结果,或先对图像膨胀然后瘸蚀其结果,前一种运算称为开运算,后一种运算称为关运算。
它们也是数学形态学中的重要运算。
开启的运算符为o ,A 用B 来开启写作AoB ,其定义为:
A o ()
B A B B =Θ⊕
关的运算符为·,A 用B 来关写作A ·B ,其定义为:
A ·()
B A B B =⊕Θ
开和关两种运算都可以去除比结构元素小的特定图像细节,同时保证不产生全局的几何失真。
开运算可以把比结构元素小的椒盐噪声滤除,切断细长搭接而起到分离作用。
关运算可使比结构元素小的缺口或孔填补上,搭接短的间断而起到连通作用。
2、实际应用
近年来,数学形态学在图像处理方面得到了日益广泛的应用。
下面主要就数学形态学在边缘检测、骨架提取等方面的应用做简要介绍。
集合A 的边界记为β(A),可以通过下述算法提取边缘:设B 是一个合适的结构元素,首先令A 被B 腐蚀,然后求集合A 和它的腐蚀的差。
如下式所示:
()()A A A B β=-Θ
下解释了边缘提取的过程。
它表示了一个简单的二值图像,一个结构元素和用以上公式得出的结果。
图 (b)中的结构元素是最常用的一种,但它决不是唯一的。
如果采用一个5×5全“1”的结构元素,可得到一个二到三个像素宽的边缘。
应注意的是,当集合B 的原点处在集合的边界时,结构元素的一部分位于集合之外。
这种条件下的通常的处理是约定集合边界外的值为0。
利用形态学方法提取一个区域的骨格可以用腐蚀和开运算表示。
也就是,A 的骨骼记为S(A),骨骼化可以表示如下:
0()()K
k k S A S A ==
和
0(){()[)]}K
k S A A kB A kB B ==
Θ-Θ
其中B 是结构元素,()A kB Θ表示对A 连续腐蚀k 次。
下图的解释说明了以上讨论的概念。
第一列显示了原始集合(顶部)和通过结构元素B 两次腐蚀的图形。
由于再多一次对A 的腐蚀将产生空集,所以选取K =2。
第二列显示了第一列通过B 的开运算而得到的图形。
以上结果可以通过以前讨论过的开运算拟合性质加以解释。
第三列仅仅显示出第一列与第二列的差别。
第四列包含两个部分骨骼及最后的结果(第四列的底部)。
最后的骨骼不但比所要求的更粗,而且相比较更重要,它是不连续的。
形态学给出了就特定图形侵蚀和空缺的描述。
形态学给出了就特定图形侵蚀和空缺的描述。
通常,骨骼必须最大限度的细化、相连、最小限度的腐蚀。
第五列显示了0()S A 、1()S A B ⊕以及
22(()2)())S A B S A B B ⊕=⊕⊕。
最后一列显示了图像A 的重构。
可知,A 就是第五列中膨胀骨骼子集的“并”。
二、源程序
1、膨胀
bw = imread('text.png');
se = strel('line',11,90);%生成线形的结构元素
bw2 = imdilate(bw,se);%对图像进行膨胀
subplot(121), imshow(bw), title('原始图像') ;
subplot(122), imshow(bw2), title('膨胀后的图像') ;
2、腐蚀
originalBW = imread('circles.png');
se = strel('disk',11);%生成圆盘形的结构元素
erodedBW = imerode(originalBW,se);%对图像进行腐蚀
subplot(121), imshow(originalBW), title('原始图像');
subplot(122), imshow(erodedBW); title('腐蚀后的图像');
3、开
BW1 = imread('circbw.tif'); %读取图像
subplot(121), imshow(BW1); title('原始的图像');
se = strel('rectangle',[40 30]); %生成矩形结构元素
BW2 = imopen(BW1,SE);%对图像直接进行开运算
subplot(122), imshow(BW2); title('开运算后的图像');
4、关
originalBW = imread('circles.png');
subplot(121), imshow(originalBW); title('原始的图像'); se = strel('disk',10);
closeBW = imclose(originalBW,se);
subplot(122), imshow(closeBW); title('关运算后的图像') 5、边缘检测
BW1 = imread('circbw.tif');
BW2 = bwperim(BW1,8);
subplot(121), imshow(BW1) ; title('原始图像');
subplot(122), imshow(BW2) ; title('边缘检测后的图像');
6、骨架提取
BW1 = imread('circbw.tif');
BW2 = bwmorph(BW1,'skel',Inf);
subplot(121), imshow(BW1) ; title('原始图像');
subplot(122), imshow(BW2) ; title('骨架提取后的图像');
三、程序运行结果
1、膨胀
2、腐蚀
3、开
4、关
5、边缘检测
6、骨架提取
四、程序运行结果分析
从以上运行结果可以分析得到各操作的功能结果如下。
1、膨胀
扩展边界。
2、腐蚀
收缩边界。
3、开
平滑轮廓,切除狭区,去除小的孤岛及突刺。
4、关
平滑轮廓,联络小狭区,纵向细化沟渠,并且去除小洞。
5、边缘检测
提取图像边界上的点集。
6、骨架提取
找到图像的骨骼。
五、总结及收获
数学形态学对图像的处理具有直观上的简明性和数学上的严谨性,在定量描述图像的形态特征上具有独特的优势,为基于形状细节进行图像处理提供了强有力的手段。
建立在集合理论基础上的数学形态学,主要通过选择相应的结构元素采用膨胀、腐蚀、开启、闭合4种基本运算的组合来处理图像。
数学形态学在图像处理中的应用广泛,有许多实用的算法,但在每种算法中结构元素的选取都是一个重要的问题。