数学形态学的腐蚀和膨胀运算
- 格式:doc
- 大小:32.00 KB
- 文档页数:8
开运算(Opening Operation)是数学形态学(Mathematical Morphology)中的一种基本操作,用于图像处理和计算机视觉中。
这个操作的目的是通过两个结构元素之间的腐蚀(Erosion)和膨胀(Dilation)来处理二值图像。
具体来说,开运算由以下两个步骤组成:
1. 腐蚀(Erosion):使用一个结构元素,通过将结构元素在图像上滑动,只有当结构元素完全覆盖图像中的目标区域时,该像素才保留,否则被置为零。
腐蚀操作有助于去除图像中的小细节、噪声或边缘。
2. 膨胀(Dilation):使用相同的结构元素,同样通过滑动结构元素,如果结构元素覆盖了图像中的目标区域的任何部分,该像素就被置为1。
膨胀操作有助于连接被腐蚀分开的目标区域,填充空洞,并增加目标的大小。
开运算的效果是先进行腐蚀操作,再进行膨胀操作。
这种操作有助于平滑图像、去除小的对象并保留大的对象。
在图像分割、边缘检测和形态学滤波等领域中经常使用开运算来预处理图像。
数学表达式中,如果将图像表示为二值矩阵,开运算可以用下面的形式表示:Opening(A)=Dilation(Erosion(A))
其中,A是输入图像。
开运算的效果在很多情况下都能够提升图像质量,特别是在去除小目标或噪声的应用中常常使用。
膨胀与腐蚀对偶证明
膨胀与腐蚀是一对互为对偶的概念。
在数学中,对偶是指一个概念与它的对立面之间的关系。
对偶是一种反转的过程,通过它可以将一个概念转化成另一个概念。
在图像处理中,膨胀和腐蚀是两个重要的操作,它们可以用来改变图像的形态和结构。
膨胀是一种形态学操作,用来增强图像的亮度和粗细。
它将每个像素与它的邻域进行比较,并将像素的值设置为邻域的最大值。
这样做可以使图像中的白色区域变得更大和更连通。
腐蚀是一种形态学操作,用来减小图像的亮度和粗细。
它将每个像素与它的邻域进行比较,并将像素的值设置为邻域的最小值。
这样做可以使图像中的黑色区域变得更大和更连通。
膨胀和腐蚀是互为对偶的操作。
这意味着,对一个图像进行膨胀操作,然后对结果进行腐蚀操作,可以得到原始图像。
同样地,对一个图像进行腐蚀操作,然后对结果进行膨胀操作,也可以得到原始图像。
这对偶关系证明了膨胀和腐蚀是可以互相替代的操作。
膨胀和腐蚀是图像处理中常用的操作,它们可以用来改善图像的质量和结构,同时也可以用来提取图像中的关键信息。
通过理解它们的对偶关系,可以更好地掌握它们的应用和技巧。
- 1 -。
数学形态学及其应用数学形态学及其应用数学形态学是一种数学方法和理论,最早由法国数学家乌戈尔·乔尔丹(Ugo Cerletti)在20世纪60年代提出。
它基于拓扑学、代数学和概率论等学科的基本原理,研究对象是图像和信号等离散数据的形状和结构,并利用数学统计的方法对它们进行分析和处理。
随着计算机技术的发展和应用需求的增加,数学形态学已经成为图像处理、模式识别和计算机视觉等领域中的重要工具。
数学形态学的基本概念包括结构元素、腐蚀、膨胀、开运算和闭运算等。
结构元素是一个小的图像或信号,用来描述和刻画对象的特征。
腐蚀和膨胀是两种基本的形态学操作,它们可以对图像或信号进行形状的变化和结构的调整。
开运算和闭运算是由腐蚀和膨胀组合而成的操作,用来改善图像的质量和特征。
在数学形态学的基础上,还发展了很多衍生的操作和算法,如基本重建、灰度形态学和形态学滤波等。
数学形态学在图像处理中的应用非常广泛。
例如,在图像分割中,可以利用数学形态学的方法提取目标的边界和内部结构;在图像增强中,可以利用形态学处理方法去除图像中的噪声和不规则部分;在模式识别中,可以利用形态学算法提取和描述对象的特征;在计算机视觉中,可以利用形态学方法实现图像的匹配和配准等等。
数学形态学的应用不仅仅局限在图像领域,它还可以应用于信号处理、文本分析、医学影像等其他领域。
以图像分割为例,数学形态学可以通过结构元素的逐步腐蚀或膨胀操作来准确地提取目标的轮廓。
首先,选择合适的结构元素,使其大小和形状适应目标的尺寸和形态特征。
然后,通过不断的腐蚀操作,可以逐渐消除目标周围的无关细节,最终得到目标的边界。
类似地,通过不断的膨胀操作,可以填补和连接目标内部的空洞,并得到目标的内部结构。
通过这种方式,数学形态学可以实现对复杂图像的准确分割,为图像识别和分析提供了可靠的基础。
总之,数学形态学是一种重要的数学方法和理论,它在图像处理、模式识别和计算机视觉等领域中具有广泛的应用和深远的意义。
第6章腐蚀,膨胀,细化算法这一章的内容我认为是最有趣的。
还记得前言中那个抽取骨架的例子吗?现在我们就来看看它是如何实现的。
今天所讲的内容属于一门新兴的学科:数学形态学(Mathematical Morphology)。
说起来很有意思,它是法国和德国的科学家在研究岩石结构时建立的一门学科。
形态学的用途主要是获取物体拓扑和结构信息,它通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。
在图象处理中的应用主要是:(1)利用形态学的基本运算,对图象进行观察和处理,从而达到改善图象质量的目的;(2)描述和定义图象的各种几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。
限于篇幅,我们只介绍二值图象的形态学运算,对于灰度图象的形态学运算,有兴趣的读者可以阅读有关的参考书。
在程序中,为了处理的方便,还是采用256级灰度图,不过只用到了调色板中的0和255两项。
先来定义一些基本符号和关系。
1.元素设有一幅图象X,若点a在X的区域以内,则称a为X的元素,记作a∈X,如图6.1所示。
2.B包含于X设有两幅图象B,X。
对于B中所有的元素ai,都有ai∈X,则称B包含于(included in)X,记作B X,如图6.2所示。
3.B击中X设有两幅图象B,X。
若存在这样一个点,它即是B的元素,又是X的元素,则称B击中(hit)X,记作B↑X,如图6.3所示。
4.B不击中X设有两幅图象B,X。
若不存在任何一个点,它即是B的元素,又是X的元素,即B和X的交集是空,则称B不击中(miss)X,记作B∩X=Ф;其中∩是集合运算相交的符号,Ф表示空集。
如图6.4所示。
图6.1 元素图6.2 包含图6.3 击中图6.4 不击中5.补集设有一幅图象X,所有X区域以外的点构成的集合称为X的补集,记作X c,如图6.5所示。
显然,如果B∩X=Ф,则B在X的补集内,即B X c。
图6.5 补集的示意图6.结构元素设有两幅图象B,X。
Halcon形态学算子是用于图像处理的一种数学方法,主要用于提取和分析图像中的特定形状。
在Halcon中,形态学算子主要包括以下几种:1. 二值化(Binary Image):将图像转换为二值图像,即黑白图像。
常用的二值化方法有阈值法、自适应阈值法等。
2. 膨胀(Dilation):对二值图像进行膨胀操作,可以扩大图像中的白色区域。
膨胀操作可以通过结构元素来实现,结构元素的形状和大小决定了膨胀的效果。
3. 腐蚀(Erosion):对二值图像进行腐蚀操作,可以缩小图像中的白色区域。
腐蚀操作同样可以通过结构元素来实现,结构元素的形状和大小决定了腐蚀的效果。
4. 开运算(Opening):先进行腐蚀操作,再进行膨胀操作。
开运算可以消除小的白色区域,同时保持大的白色区域不变。
5. 闭运算(Closing):先进行膨胀操作,再进行腐蚀操作。
闭运算可以消除小的黑色区域,同时保持大的黑色区域不变。
6. 形态学梯度(Morphological Gradient):计算图像的灰度梯度信息,用于提取图像的边缘信息。
7. 顶帽变换(Top Hat Transformation):先进行腐蚀操作,再进行膨胀操作。
顶帽变换可以提取图像中的局部最大值信息。
8. 黑帽变换(Black Hat Transformation):先进行膨胀操作,再进行腐蚀操作。
黑帽变换可以提取图像中的局部最小值信息。
9. 形态学重建(Morphological Reconstruction):根据原始图像和形态学操作的结果,恢复原始图像的信息。
10. 形态学滤波器(Morphological Filters):通过形态学操作实现的滤波器,如平滑滤波器、边缘检测滤波器等。
在Halcon中,可以使用morphology模块中的函数来实现这些形态学算子。
摘要伴随着电子计算机技术的进步,通信技术日新月异的更新与发展,图像处理技术近年来得到突飞猛进的发展,并成功的应用到几乎所有与成像有关的领域,并发挥着相当重要的作用。
它利用计算机对数字图像进行一系列的操作,从而获得某种预期的结果,对图像进行处理时,经常运用图像处理技术以改善图像的质量。
现在图像处理仍然在不断的发展,延伸出更多的应用领域,相信数字图像处理技术的逐步发展定会让我们的信息生活变得更好。
在图像处理中,数学形态学的理论基础在数字图像信号处理领域中得到广泛应用,图像形态学的用途主要是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。
在图像处理中形态学主要应用是:(1)利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;(2)描述和定义图像的几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。
而腐蚀与膨胀是数学形态学最基本的算法,使得腐蚀与膨胀方法的研究价值得到更大的提升。
图像形态学腐蚀与膨胀方法在很多方面被应用,本文以图像的腐蚀与膨胀方法的理论分析为重点,围绕着其在众多图像处理方案中的出色表现,逐渐联系到图像的内容。
用多层次的介绍手法展现出图像腐蚀与膨胀方法研究的重要内涵。
本文主要的工作包括:(1)掌握Visual C++6.0软件的使用。
(2)深入学习图像形态学腐蚀与膨胀的基础理论,研究腐蚀与膨胀在图像处理中的应用。
(3)针对图像形态学腐蚀与膨胀方法进行研究,通过Visual C++6.0软件实现腐蚀与膨胀算法,掌握腐蚀与膨胀算法的实现过程。
本文集中阐述腐蚀与膨胀是如何进行水平腐蚀、垂直腐蚀、全方位腐蚀、水平膨胀、垂直膨胀、全方位膨胀、开运算以及闭运算的完成原理、步骤和它们的具体实现过程。
通过一系列的研究才能更加明确腐蚀与膨胀方法处理在图像信息处理的发展历程中发挥了不可替代的作用。
关键词:图像处理;数学形态学;腐蚀;膨胀AbstractWith the advance in computer technology, communication technology changes rapidly updated and developed, image processing technology has make a spurt of progress of development in recent years, and successfully applied to almost all domains related to the formation of image, and play a very important role. It uses the computer to carry out a series of operation on the digital image, so as to obtain some expected results, image processing often using image processing technology to improve the quality of the image. Now the image processing is still in constant development, extending more application fields, believe that the gradual development of the digital image processing technology will make our life better.In image processing, the theory foundation of mathematical morphology is applied widely in the field of digital image signal processing, use of image morphology is the main access to the object topology and structure information, some operational through the object and the structural elements of interaction, obtained the object state of nature. In image processing, morphological main applications are: (1) by using basic operation of morphology, were observed and the processing of the image, so as to achieve the purpose of improving the image quality. (2)The definition and description of image geometric parameters and characteristics, such as area, perimeter, connectivity, particle size, frame and direction etc.. The corrosion and expansion is the basic algorithm of mathematical morphology which makes the research value of corrosion and expansion method for the greater increase. Method of image morphology of corrosion and expansion is used in many aspects, this paper with the method of image corrosion expansion theory analysis as the key point, around its excellent performance in many images processing scheme, gradually linked to the content of the image. To show the image of corrosion and expansion method research important content of multi-level presentation techniques. The main work of this paper includes: (1) using Visual C++6.0 Software. (2) Study the basic theory and the expansion of the image morphology of corrosion depth, application and expansion of research in image processing corrosion. (3) According to a study on the method of image morphology of corrosion and expansion, realization of erosion and dilation algorithm by Visual C++6.0 Software, master the implementation process of erosion and dilation algorithm. This paper focuses on how the level of corrosion andexpansion of corrosion, a full range of vertical horizontal expansion, vertical expansion, a full range expansion, open operation and close operation to complete the principle, steps and their realization.Through the research to a series of more clear corrosion and expansion method has played an irreplaceable role in the development of image processing.Key words: Image processing; mathematical morphology; corrosion; expansion目录1 绪论 (1)1.1引言 (1)1.2课题研究现状 (1)1.3课题目的和意义 (2)2 开发环境VISUAL C++介绍 (3)2.1V ISUAL C++6.0介绍 (3)2.2V ISUAL C++软件平台介绍 (4)2.2.1单文档格式 (4)2.2.2界面板部分 (5)2.2.3程序控制部分 (5)2.3设计中的MFC介绍 (5)3 腐蚀与膨胀的基本原理 (7)3.1图像的腐蚀 (7)3.2图像的膨胀 (8)3.3开运算 (10)3.4闭运算 (11)4 图像腐蚀与膨胀处理 (12)4.1CDIB类库的建立 (12)4.1.1CDIB类库的功能 (12)4.1.2CDIB类的构造 (12)4.2图像腐蚀与膨胀处理的实现 (15)4.2.1水平腐蚀处理实现 (15)4.2.2垂直腐蚀处理实现 (17)4.2.3全方向腐蚀处理实现 (19)4.2.4水平膨胀处理实现 (22)4.2.5垂直膨胀处理实现 (24)4.2.6全方位膨胀处理实现 (26)5 实验结果及讨论 (29)5.1腐蚀处理结果 (29)5.2膨胀处理结果 (31)5.3开闭运算处理结果 (32)5.3结果讨论 (34)结论 (35)致谢 (37)参考文献 (38)附录A 英文原文 (39)附录B 汉语翻译 (47)1 绪论1.1 引言随着计算机技术的日益发展,图像信息已成为人类认识世界的重要知识来源,人们研究发现,人类从外界获得的信息约有75%来自图像。
先膨胀后腐蚀的运算解释说明以及概述1. 引言1.1 概述在图像处理和形态学图像分析领域,先膨胀后腐蚀的运算被广泛应用。
该运算是一种基于形态学思想的操作,它通过对图像进行膨胀和腐蚀两个步骤的组合操作,能够改变图像的形状、大小、结构等特征。
这种运算方法具有一定的特点和优势,已被证明在许多应用场景中具有重要价值。
1.2 文章结构本文将首先介绍先膨胀后腐蚀的运算的定义和原理,在此基础上详细解释其具体步骤,并提供实例进行说明。
接着,将探讨该运算在图像处理、形态学图像分析以及模式识别等领域中的应用。
同时,本文还会与其他相关运算进行比较分析,并对不同尺寸结构元素对先膨胀后腐蚀结果影响进行深入研究。
最后,通过总结与展望来评估先膨胀后腐蚀运算的局限性和未来发展趋势。
1.3 目的本文旨在深入探讨先膨胀后腐蚀的运算,全面了解其原理、特点和应用领域,以及与其他相关运算的比较分析。
通过本文的阐述,读者将能够理解并掌握先膨胀后腐蚀运算,并能在实际应用中灵活运用该方法。
对于图像处理、形态学图像分析以及模式识别等领域的研究人员和工程师而言,本文将为他们提供有价值的参考和指导。
以上是“1. 引言”部分的内容,请根据需要进行修改和补充。
2. 先膨胀后腐蚀的运算解释说明:2.1 膨胀操作定义与原理:膨胀是形态学图像处理中的基本运算之一,它可以用来增强图像中亮度较高的区域。
膨胀操作基于结构元素,通过将结构元素沿着图像的每个像素进行平移,并找出覆盖范围内的最大值作为输出像素的灰度值。
这意味着,通过膨胀操作,图像中亮度较高的区域将会逐渐扩展。
膨胀操作可以用数学形式描述如下:D = A ⊕B其中,D表示进行膨胀后所得到的图像,A表示待处理的原始图像,B表示结构元素。
2.2 腐蚀操作定义与原理:与膨胀相反,腐蚀是一种可以去除图像中亮度较低区域的操作。
它同样依赖于结构元素,并根据在覆盖范围内找出最小值作为输出像素的灰度值。
因此,通过连续进行多次腐蚀操作,亮度较低或细小的细节将会不断被消除。
数学形态学运算的实际应用
数学形态学是一种图像处理技术,可以在数字图像上实现各种形态学运算,如膨胀、腐蚀、开运算、闭运算、击中、击不中等。
这些运算可以应用于许多领域,以下是数学形态学运算的一些实际应用:
1.图像分割:可以通过膨胀、腐蚀操作实现图像分割,将图像中的前景和背景分离开来。
2.物体检测:可以利用击中、击不中操作实现物体检测,即在图像中找到特定的形状或颜色。
3.边缘检测:可以通过膨胀、腐蚀操作实现边缘检测,通过比较原图像和形态学处理后的图像,可以得到图像的边缘信息。
4.形态学重构:形态学重构是一种能够从形态学运算结果中提取有用信息的技术,常用于图像分割、边缘检测、形状提取等。
5.模式识别:可以利用形态学运算进行模式识别,即通过比较不同形态学处理后图像的差异,来实现对不同模式的识别和分类。
总之,数学形态学运算可以广泛应用于图像处理、计算机视觉、医学影像等领域,具有很强的实用性和应用前景。
图像处理中的数学形态学算法在车牌识别中的应用随着车辆数量的不断增加,车牌识别技术在交通管理、安防监控、停车场管理等领域中扮演着重要的角色。
而在车牌识别技术中,数学形态学算法作为一种重要的图像处理工具,具有很高的应用价值。
本文将重点探讨数学形态学算法在车牌识别中的应用,以及其在该领域中的优势和挑战。
一、数学形态学算法简介数学形态学算法是一种基于形状和结构分析的图像处理方法,其基本原理是利用集合论中的膨胀和腐蚀运算来分析图像中的形状和结构特征。
其中,膨胀操作可以扩张图像中的目标物体,而腐蚀操作可以收缩图像中的目标物体。
这些基本的形态学操作可以通过组合和重复应用来提取图像中的目标物体,并进行形状分析和特征提取。
二、数学形态学算法在车牌识别中的应用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️⃣ 腐蚀操作的原理就是求局部最小值的操作,并把这个最小值赋值给参考点指定的像素。
数学形态学的腐蚀和膨胀运算"形态学"是描述动植物形态和结构的一门生物学分支,这里借用来指一种图像处理的方法.图像处理的形态学方法是一种"数学形态学"方法,用来提取图像成分,并据此来对图像区域的形状进行表示和描述.它的数学语言是集合理论,其中的集合代表图像中物体的形状.图像处理中常用的数学形态学方法包括腐蚀,膨胀,开,闭,边缘提取和图像细化.我依次给出Visual C++源代码:/*************************************************************************** ErosionDIB()** Parameters:** HDIB hDib - objective DIB handle* BOOL bHori - erosion direction** Return Value:** BOOL - True is success, else False** Description:** This function do erosion with the specified direction*************************************************************************/BOOL ErosionDIB(HDIB hDib, BOOL bHori){// start wait cursorWaitCursorBegin();// Old DIB bufferif (hDib == NULL){WaitCursorEnd();return FALSE;}// only support 256 color imageWORD wBitCount = DIBBitCount(hDib);if (wBitCount != 8){WaitCursorEnd();return FALSE;}// new DIBHDIB hNewDIB = CopyHandle(hDib);if (! hNewDIB){WaitCursorEnd();return FALSE;}// source dib bufferLPBI TMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDib);if (! lpSrcDIB){WaitCursorBegin();return FALSE;}// New DIB bufferLPBI TMAPINFO lpbmi = (LPBITMAPINFO)GlobalLock(hNewDIB);if (! lpbmi){WaitCursorBegin();return FALSE;}// start erosion...LPSTR lpPtr;LPSTR lpTempPtr;LONG x,y;BYTE num, num0;int i;LONG lHeight = DIBHeight(lpSrcDIB);LONG lWidth = DIBWidth(lpSrcDIB);DWORD dwBufferSize = GlobalSize(lpSrcDIB);int nLineBytes = BytesPerLine(lpSrcDIB);if(bHori){for (y=0; y<lHeight; y++){lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes)+1; lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes)+1;for (x=1; x<lWidth-1; x++){num0 = num = 0 ;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num > num0)num0 = num;}*lpTempPtr=(unsigned char)num0;/*num=(unsigned char)*lpPtr;if (num==0){*lpTempPtr=(unsigned char)0;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num==255){*lpTempPtr=(unsigned char)255;break;}}}else*lpTempPtr=(unsigned char)255;*/lpPtr++;lpTempPtr++;}}}else // Vertical{for (y=1; y<lHeight-1; y++){lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes); lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);for (x=0; x<lWidth; x++){num0 = num = 0 ;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num > num0)num0 = num;}*lpTempPtr=(unsigned char)num0;/*num=(unsigned char)*lpPtr;if (num==0){*lpTempPtr=(unsigned char)0;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+(i-1)*nLineBytes);if(num==255){*lpTempPtr=(unsigned char)255;break;}}}else*lpTempPtr=(unsigned char)255;*/lpPtr++;lpTempPtr++;}}}// cleanupGlobalUnlock(hDib);GlobalUnlock(hNewDIB);GlobalFree(hNewDIB);WaitCursorEnd();return TRUE;}/*************************************************************************** DilationDIB()** Parameters:** HDIB hDib - objective DIB handle* BOOL bHori - dilation direction** Return Value:** BOOL - True is success, else False** Description:** This function do dilation wi t h the specified direction*************************************************************************/BOOL DilationDIB(HDIB hDib, BOOL bHori){// start wait cursorWaitCursorBegin();// Old DIB bufferif (hDib == NULL){WaitCursorEnd();return FALSE;}// only support 256 color imageWORD wBitCount = DIBBitCount(hDib);if (wBitCount != 8){WaitCursorEnd();return FALSE;}// new DIBHDIB hNewDIB = CopyHandle(hDib);if (! hNewDIB){WaitCursorEnd();return FALSE;}// source dib bufferLPBI TMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDib);if (! lpSrcDIB){WaitCursorBegin();return FALSE;}// New DIB bufferLPBI TMAPINFO lpbmi = (LPBITMAPINFO)GlobalLock(hNewDIB);if (! lpbmi){WaitCursorBegin();return FALSE;}// start erosion...LPSTR lpPtr;LPSTR lpTempPtr;LONG x,y;BYTE num, num0;int i;LONG lHeight = DIBHeight(lpSrcDIB);LONG lWidth = DIBWidth(lpSrcDIB);DWORD dwBufferSize = GlobalSize(lpSrcDIB);int nLineBytes = BytesPerLine(lpSrcDIB);if(bHori){for(y=0;y<lHeight;y++){lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes)+1; lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes)+1;for(x=1;x<l W idth-1;x++){num0 = num = 255;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num < num0)num0 = num;}*lpTempPtr=(unsigned char)num0;/*num=(unsigned char)*lpPtr;if (num==255){*lpTempPtr=(unsigned char)255;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num==0){*lpTempPtr=(unsigned char)0;break;}}}else*lpTempPtr=(unsigned char)0;*/lpPtr++;lpTempPtr++;}}}else{for(y=1;y<lHeight-1;y++){lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes); lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);for(x=0;x<l W idth;x++){num0 = num = 255;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+i-1);if(num < num0)num0 = num;}*lpTempPtr=(unsigned char)num0;/*num=(unsigned char)*lpPtr;if (num==255){*lpTempPtr=(unsigned char)255;for(i=0;i<3;i++){num=(unsigned char)*(lpPtr+(i-1)*nLineBytes);if(num==0){*lpTempPtr=(unsigned char)0;break;}}}else*lpTempPtr=(unsigned char)0;*/lpPtr++;lpTempPtr++;}}}// cleanup GlobalUnlock(hDib); GlobalUnlock(hNewDIB); GlobalFree(hNewDIB);WaitCursorEnd();return TRUE;}。