2016-09-09 00:53:31 lpsl1882 阅读数 2530

  图像处理分析过程中,检测特定的形状是重要的一步。霍夫变换(Hough)通过转换坐标系,将特定形状的检测映射到参数空间中,从而根据参数空间中的值来确定特定形状的相关信息。
  Hough变换的比较简单的应用例子有检测直线和检测圆。

检测直线

  设空间中有若干点,我们要判断这些点是否能构成一条直线,即为直线检测。平面中直线的通用公式为xcos(θ)+ysin(θ)=ρ。常用的y=wx+b公式,因为不能兼容y=b的情况,所以不能使用。对于某个点,其坐标是(xi,yi),过该点的直线有无数条,这些直线统一表示为xicos(θ)+yisin(θ)=ρ,其中xi,yi是常量。反过来看,代表这些直线的公式,可以看做θ为自变量,ρ为因变量,xi,yi为常量参数的直线公式。这样,在x-y空间过(xi,yi)的无数条直线,可以在θρ空间中用一条线代表。见下图:
  这里写图片描述
  这里写图片描述
  上图是x-y空间,下图是θρ空间。其中红、绿、蓝三条线可以汇聚成一个点,说明这三条线对应的点,其在θρ空间中的直线参数是一样的。反过来就是说,穿过这三个点的无数直线中,有“三”条直线,其θ,ρ值相同,这“三“条直线是一根直线,即这三个点可以共线。
  

检测圆

  设空间有若干点,我们要判断这些点是否能构成一个圆的轮廓,即为圆检测。圆的表达式为(xx)2+(yy)2=R,参数有x,y,R。这说明,圆对应的映射空间是三维的,即xyR空间。x,y都表示空间,因此我们可以暂时将R设为常量,构建xy空间,令x’为自变量,y’为因变量,作图如下:
  这里写图片描述
  这里写图片描述
  上图是x-y空间,下图是x’-y’空间。图中绘制了一个圆和一个矩形,其中圆的轮廓并不是完全规则的。经过Hough变换后,圆上的点的变换曲线基本汇聚在一起,而矩形上的点则不能汇聚,这样就检测到圆。由于我们获取的图像并不一定是规则图形,其在参数空间中不一定能汇聚到一个点,而是在一个区域中汇聚起来,为了容许这类误差,我们可以用窗来检测参数空间中的曲线汇聚区域,而不是找曲线汇聚点,以此来检测不完全规则的特定形状。
  如果我们不知道R的值,那么我们就需要给定R取值的离散区间[R1,R2...Rn],取该区间中的值,重复做n次Hough变换检测。这样的话工作量会非常大,为了提升效率,往往会借助图像中的其他特征。
  另外,我们可以看出,由于不知道圆的尺度,我们不得不重复做多次检测。在实际的形状检测工作中,我们并不知道需要检测的复杂形状,经过了何种平移、缩放、旋转甚至是扭曲,因此需要引入不变性特征,或者针对所有可能的平移、缩放、旋转变换情况,统统做一遍检测。物体检测跟踪需要相当多的计算量。据了解,人脑为了进行视觉模式识别,至少消耗了一半的神经资源,所以人可以闭目养神,却不能捂耳朵、捏住鼻子养神:)

2019-02-18 21:29:30 dzm123lalala 阅读数 105

形态学基本概念

基本思想:用一定形态的结构元素去度量和提取图像中的对应形状,达到分析和识别的目的。
可用于图像处理的各个方面,包括图像分割,特征抽取,边界检测等等。
对图像处理的理论和技术产生了重大影响,已经构成一种新的图像处理方法和理论,成为一个重要的研究领域。

在图像处理中的应用主要是:

  1. 对图像进行观察和处理,从而达到改善图像质量的目的
  2. 米哦啊书和定义图像的各种几何参数和特征,如面积,周长,联通度,颗粒度,骨架和方向性等。

几个概念

补集:不包含AA的所有元素组成的集合
AC={wwA} A^C=\{w|w \notin A\}
集合的差:
AB={wwA,wB}=ABC A-B=\{w|w\in A,w \notin B \}=A \cap B^C
集合的差
反射:B^={ww=b,bB}\hat{B}=\{w|w=-b,b\in B\}关于原点取对称。如果集合BB本身关于原点对称,那么B=B^B=\hat{B}
反射

平移:
(A)z={cc=a+z,aA} (A)_z=\{c|c=a+z,a \in A\}

腐蚀与膨胀

腐蚀和膨胀是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。

膨胀

集合AA被集合BB膨胀,定义为:
AB={z(B^)zAΦ} A\oplus B=\{z|(\hat{B})_z \cap A \neq \Phi\}
B称为结构元素。结构元素先进行反射,之后进行z平移,之后和A进行交运算,若击中,记录下平移量z。
若B对称,则把B平移a后得到BaB_a。若BaB_a击中A,记下a点,所有满足上述条件的a点组成的集合称为A对B的膨胀。
DB(A)=AB={aBaA} D_B(A)= A\oplus B=\{a|B_a\uparrow A\}

二值图像膨胀运算过程

如果用d4\frac{d}{4}大小的结构元素取膨胀d大小的结构元素,会得到边缘加厚d8\frac{d}{8}的结果。

在这里插入图片描述

膨胀最简单的应用是 将裂缝桥接起来
膨胀最简单的应用之二是填充目标中的空洞。

腐蚀

使用集合B对集合A进行腐蚀,定义为:
AB={z(B)zA} A\circleddash B=\{z|(B)_z \subseteq A\}
把结构元素B平移a后得到BaB_a,若BaB_a包含于X,则记下这个a点,所有满足上述条件的a点组成的集合称作X被B腐蚀的结果。
EB(A)=AB={aBaA} E_B(A)=A\circleddash B=\{a|B_a \subset A\}
腐蚀的结果
在这里插入图片描述
形态学腐蚀选择目标

膨胀和腐蚀的性质

  • 膨胀和腐蚀运算的对偶性
    (XB)C=XCB^(XB)C=XCB^ (X\circleddash B)^C=X^C \oplus \hat{B} \quad \quad (X\oplus B)^C=X^C \circleddash \hat{B}
    X对B的腐蚀运算的补集等于X的补集对B的反射的膨胀运算;
    X对B的反射运算的补集等于X的补集对B的腐蚀的膨胀运算。
    河岸的补集为河面,对河岸的腐蚀等价于对河面进行膨胀。

  • 膨胀运算具有互换性,腐蚀运算不具有互换性。
    (XB)A=(XA)B (X\oplus B)\oplus A=(X\oplus A)\oplus B
    (XB)A(XA)B (X\circleddash B)\circleddash A \neq (X\circleddash A)\circleddash B

  • 腐蚀和膨胀具有组合性。
    在这里插入图片描述

开运算与闭运算

膨胀和腐蚀运算,对目标的后处理有着非常好的作用,缺点是,改变了原目标物的大小。
为了解决这一问题,考虑到腐蚀与膨胀时一对对偶运算,将膨胀和腐蚀运算同时进行,便构成了开运算和闭运算。

开运算

使用结构元素B对集合A进行开操作,定义为:
AB=(AB)B A \circ B=(A\circleddash B)\oplus B
开运算

  • 消除细小对象
  • 在细小粘连处分离对象
  • 在不改变形状的前提下,平滑对象的边缘。

3×33\times 35×55\times 5的矩形结构元素分别进行开运算:
开运算结果
去除了细小孔洞,平滑了边缘。
如果B是非对称的,进行开运算时要用B的对称集BB^\vee膨胀,否则,进行开运算时结果会和原来比发生平移,当结构元素为非对称时,腐蚀的结果会发生平移,然后再进行膨胀时,会向另外一侧平移。
在这里插入图片描述

闭运算

使用结构元素B对集合A进行闭操作,定义为:
在这里插入图片描述
闭运算作用:

  • 填充对象内细小空洞
  • 链接接近的对象
  • 再不明显改变面积的前提下,平滑对象的边缘
    在这里插入图片描述

在这里插入图片描述

开运算和闭运算的性质

开运算和闭运算也是对偶运算
X开运算的补集等于X补集的闭运算,或者X闭运算的补集等于X补集的开运算。
如何理解:两个小岛之间有小桥,岛和桥看作是处理对象X,则X的补集为大海。对岛桥进行开处理等于对大海进行闭处理
在这里插入图片描述
开闭·运算的一些性质
开操作一般是使得对象的轮廓变得平滑,断开狭窄的间断和消除细小的突出物。
闭操作同样是使得轮廓更为光滑,通常是消除狭窄的尖端和长细的鸿沟,消除小的空洞,填补轮廓线中的断裂。

二值数学形态学基本算法

形态滤波

用不同的方向结构元素提取方向向量
在这里插入图片描述

在这里插入图片描述

图像的边缘提取

图像的边缘线或者棱线时图像中信息量最为丰富的区域。提取边界或者边缘也是图像分割的重要组成部分。

先腐蚀图像,然后用原图像减去腐蚀后的图像,相减即得到边缘。
提取物体的轮廓边缘的形态学变换为:
Y=X(XB) Y=X-(X\circleddash B)

在这里插入图片描述

区域填充

区域时边界所包围的部分,边界是区域的轮廓线,区域和边界可以互求。
填充过程实际上就是从边界上某一点p开始做以下迭代运算,用结构元素对其进行膨胀,求补和求交集的过程。
Xk=(Xk1B)Ac X_k=(X_{k-1} \oplus B)\cap A^c
B是结构元素,X0X_0是边界种子点,A是边界图像。
在进行形态学填充之前必须了解一点:当我们的边界是4连通边界时,我们使用的结构元素为8连通;当我们的连通边界为8连通时,我们需要用4连通的结构元素。

具体为什么可以这样做,拿那个结构元素在边缘上试一下就知道了。

击中击不中变换

在这里插入图片描述

2018-09-12 17:21:19 weixin_39880579 阅读数 818

4.1 图像数据表示的层次

共分为四个层次:

最底层的表示:图标图像(iconic images),由含有原始数据的图像组成,原始数据也就是像素亮度数据的整数矩阵。(预处理的部分)

第二层的表示:分割图像(segmented images)

第三层:几何表示(geometric representation),保存2D和3D形状知识。拍摄图像与CAD模型之间的转换。

第四层:关系模型(relational models)。涉及AI技术,语义网络或框架。

4.2 传统图像数据结构

4.2.1 矩阵

用矩阵表示的特殊图像有:

  • 二值图像(binary image)(仅有两个亮度级别的图像)用仅含有0和1的矩阵来表示。
  • 多光谱图像(multispectral image)的信息可以用几个矩阵来表示,每个矩阵含有一个频带的图像。
  • 分层图像数据结构(hierarchical image data structures)用不同分辨率的矩阵来获得。图像的这种分层表示对于具有处理阵列结构的并行计算机是非常方便的。

矩阵中有大量的图像数据。如果首先从原始的图像矩阵得出全局信息,由于全局信息更紧凑并且占用的存储少,那么算法就可以加速。全局信息的例子如下:

  • 亮度直方图(brightness histogram)从概率的角度观察,标准化的直方图是如下现象的概率密度的估计:一个图像的像素具有某个亮度。
  • 共生矩阵(co-occurrence matrix)是亮度为z的像素(i_{1},j_{1})和亮度为y的像素(i_{2},j_{2})的具有空间关系的两个像素的概率估计,可以用来描述纹理。
  • 积分图像(integral image)的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角所有像素的和:  

                                                                             ii(i,j)=\sum_{k\leq i,l\leq j}f(k,l)

其中f是原图像。

积分图像主要用来快速计算多个尺度的简单矩形图像特征。这种特征能用在快速的目标识别和目标跟踪。

4.2.2 链

链在计算机视觉中用于描述物体的边界。

链码(chain codes)(也称Freeman码)常用于描述物体的边界,或者图像中一个像素宽的线条。

行程编码(run length coding)

4.2.3 拓扑数据结构

拓扑数据结构将图像描述成一组元素及其相互关系,这些关系通常用图结构来表示。

图(graph)、赋值图(weighted graph)、区域邻接图(region adjacency graph)

4.2.4 关系结构

使用关系结构的描述适合于高层次的图像理解工作。在这种情况下,类似于数据库检索,用关键词搜索适用于加速整个处理过程。

4.3 分层数据结构

4.3.1 金字塔

分为M型金字塔(M-pyramids)(矩阵型金字塔)和T型金字塔(T-pyramids)(树形金字塔)。

M型金字塔是一个图像序列\left \{ M_{L},M_{L-1},...,M_{0} \right \},其中M_{L}是具有与原图像同样的分辨率和元素的图像,M_{i-1}M_{i}降低一半分辨率得到的图像。当创建金字塔3,通常只考虑维数是2的幂的方阵,这时M_{0}则仅对应于一个像素。

当需要对图像的不同分辨率同时进行处理时,可以采用M型金字塔。分辨率每降低一层,数据量则减少4倍,因而处理速度差不多也提高4倍。

通常同时使用几个分辨率比仅使用M型金字塔中的一个图像要优越。对于这类算法,则可用T型金字塔,树状结构。在T型金字塔中,除了根(0,0,0)之外的所有结点P_{k}都有定义。除了叶子结点外,T型金字塔的每个结点都有4个结点;叶子结点是第L层的结点,对应于图像的单个像素。叶子结点的值就是原始图像在最高分辨率下的图像函数的值(亮度),图像的尺度是2^{L}。树的其他层结点的数值或者是四个子结点的算数平均值,或者是由粗采样定义的值。

4.3.2 四叉树

四叉树是对T型金字塔的改进。

优点:对于图像相加、物体面积计算和统计矩(moments)计算存在简单的算法。

缺点:依赖于物体的位置、方向和相对大小。两个仅有微小差别的相似图像可能会具有非常不同的金字塔或四叉树表示。甚至,完全相同而只有略微移动的景物的两幅图像也可能产生完全不同的表示。

 

2017-03-06 10:55:21 u011430225 阅读数 1140
2017-05-03 10:11:50 qq_34784753 阅读数 7610

数学形态学是以形态表示为基础实现图像分析的数学工具,使用具有一定形态的结构元素去度量和提取图像中对应形状,以此来达到对图像分析和识别的目的。形态学图像处理的数学基础是集合论,主要的运算包括腐蚀、膨胀、开运算、闭运算四种。

数学形态学方法进行图像处理的基本思想是选择具有一定尺寸和形状的结构元素度量并提取图像中相关形状结构的图像分量,以此来达到对图像分析和识别的目的。需要注意的是,数学形态学方法可以用于二值图像和灰度图像的处理和分析。

利用数学形态学处理图像的优点如下:

①进行图像复原时,我们可以借助先验的几何特征信息,利用形态学算子有效消除噪声,又可以保留图像的原有信息。

②进行边缘信息提取时,对噪声不敏感,能够得到光滑的边缘结果

③对图像进行骨架提取时,也能够得到比较连续的结果

④算法便于使用硬件进行实现

1.集合运算

在讨论二值图像的形态学操作时,我们将二值图像看成是其中所有的“1”像素构成的集合。

下面使用集合A表示二值图像,元素p表示“1”像素在二值图像中的坐标(x, y),所以,元素p属于集合A是指p是集合A中的元素,记为

p ∈ A

(a.并集,交集,差集和补集

(1.并集:A∪B = {p| p∈A or p∈B }

A∪B 中的元素属于A或是属于B

(2.交集:A∩B = {p| p∈A and p∈B }

A∪B 中的元素既属于A也属于B

(3.补集:不在集合A中的元素构成A的补集

(4.差集:A-B 即为在集合A中,但是不在集合B中的元素

(b.平移和映射

集合A映射构成的集合,记做    

 = {p | p = -q,q ∈ A}

集合A的映射集合Â包含的元素为集合A中的每个坐标关于原点镜像坐标

集合A平移z构成的集合记做(A)z

(A)z = {p | p = q+z,q ∈ A}

(A)z包含的元素为集合A中的每一个坐标与位移相加而形成的新坐标。


2.二值图像的逻辑运算

集合的运算与逻辑运算具有一一对应的关系

也就是说,集合的补集运算对应逻辑非,集合并集对应逻辑或,交集对应于逻辑与。


3.结构元素

在二值图像形态学中,结构元素是一个由0值和1值组成的矩阵,每个结构元素有1个原点,结构元素中的原点指定待处理像素的位置,结构元素中的1定义了结构元素的邻域。

输出图像中对应原点的值建立在输入图像中相应像素与及其邻域像素比较的基础上。在本文中,“1”代指白色,“0”代指黑色

通常情况下,将结构元素中心位置指定为原点。


4.二值图像的形态学基本运算

在二值图像形态学运算过程中,将二值图像和结构元素均看成是集合。

因此二值图像形态学运算时使用结构元素B对二值图像A进行的操作,在通常情况下,二值图像形态学运算是对二值图像中“1”像素区域进行的


(1.膨胀操作

结构元素B对集合A的膨胀,定义为:


结构元素B对集合A的膨胀过程为:

(①将结构元素B关于原点的映射(B)平移z

(②几个A与结构元素B的映射平移(B)z的交集不为空集

B对A膨胀生成的集合是B的映射平移集合与集合A至少有1个非0元素时B的原点位置的集合


膨胀操作的作用:

膨胀运算具有扩张目标区域的作用。

→对于原点属于结构元素的膨胀运算,总是成立

对于原点不属于结构元素的膨胀运算,不一定成立

→对于一幅二值图像,膨胀运算可以扩张白色目标区域,填补目标区域中尺寸小于结构元素的孔洞和缺口。


(2.腐蚀操作

结构元素B对集合A的腐蚀,记做,定义为:



腐蚀过程为:

→将节后元素B平移后仍完全包含在集合A中

→B对A腐蚀生成的集合是B的平移集合完全包含在集合A中B的原点位置的集合。

腐蚀操作的作用:

腐蚀运算具有收缩目标区域的作用

→对于原点属于结构元素的腐蚀运算,总是成立

→对于原点不属于结构元素的腐蚀运算,不一定成立

→对于一幅二值图像,腐蚀运算可以收缩白色的目标区域,消除了储存小于结构元素的目标和毛刺。


(3.膨胀和腐蚀操作的对偶性

将图像的腐蚀操作的定义改写为如下形式:


与膨胀的定义相对比可以发现

→对图像中目标区域的膨胀运算相当于对背景区域的腐蚀,反之亦然

→图像的膨胀与腐蚀是一对互为对偶的运算操作

这种对偶性可以表示为:


由对偶性可以表明:二值图像形态学的基本运算本质上只有一个

→整个二值图像形态学体系建立在一个基本运算的基础之上。


5.使用OpenCV实现膨胀和腐蚀

在OpenCV中可以方便地使用erode()函数和dilate()函数来实现上面提到的腐蚀和膨胀的操作。

下面分别介绍这两个函数的定义

腐蚀函数如下:

void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor=Point(-1,-1), int iterations=1,
                         int borderType=BORDER_CONSTANT,const Scalar& borderValue=morphologyDefaultBorderValue() );
膨胀函数如下:

void dilate( InputArray src, OutputArray dst, InputArray kernel,Point anchor=Point(-1,-1), int iterations=1,
                          int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );

上面两个函数分别表示使用一个特定的结构化元素腐蚀一个图像和使用图像结构化元素对图像进行腐蚀和膨胀。

参数src表示输入图像,为二值图像或灰度图像;

参数dst表示输出图像,参数类型和输入图像一致;

参数kernel表示定义的结构元素的大小,当这个参数为NULL时,表示的是使用参考点位于中心3x3的核

→通常,我们一般使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。其中,getStructuringElement

函数的第一个参数表示内核的形状,有下面三种形状可以选择

·矩形:MORPH_RECT;

·交叉形:MORPH_CROSS;

·椭圆形:MORPH_ELLIPSE;

getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。

一般在调用这两个函数之前,首先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),

表示的是锚点位于中心,此外,需要注意的是,十字形的element形状唯一依赖于锚点的位置,而在其他情况下,锚点只是影响了形态学运算结果的偏移。

使用的例子如下:

//获取自定义核
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));


参数anchor表示结构元素的中心,如果是默认参数(-1,-1),程序会自动将其设置为结构元素的中心;

参数iterations表示迭代次数,我们可以选择对图像进行多次形态学运算

最后两个参数borderType和borderValue为可以选择参数设置,针对边界进行设置。


具体程序如下所示:

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("2345.jpg", 0);
	if (!srcImage.data)
	{
		cout << "读入图片错误" << endl;
		system("pause");
		return -1;
	}
	Mat srcBinary;
	threshold(srcImage, srcBinary, 0, 255, THRESH_OTSU);
	imshow("原始图像", srcBinary);
	//获取自定义核
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat ErodeImage;
	Mat DilateImage;
	erode(srcBinary, ErodeImage, element);
	imshow("腐蚀效果图", ErodeImage);
	dilate(srcBinary, DilateImage, element);
	imshow("膨胀效果图", DilateImage);
	waitKey();
	return 0;
}

执行程序后,效果如下所示:




6.开运算与闭运算

(1.开运算

开运算为先对图像进行腐蚀后再进行膨胀的运算,结构元素对集合A的开运算,记做AoB,定义为


→开运算可以消除小尺寸的目标和细小的突出部分,断开细长的桥接部分从而分离出目标区域,并在不明显改变目标区域面积的条件下平滑较大目标边界的作用。

→设有结构元素B和集合A,则开运算的实质就是让B在A的区域内部全部平移,可以表示为


其中U{·}表示的是括号中全部集合的并集运算,图示如下:



(2.闭运算

闭运算为先对图像进行膨胀后在腐蚀的运算,结构元素B对集合A的闭运算记做:A•B,定义如下:


→闭运算可以填补目标区域内部小尺寸孔洞和细窄的缺口,桥接狭窄的断裂部分从而使目标区域变得连通,并且可以再不明显改变目标区域面积的条件下平滑较大目标边界的作用。

→从几何意义上讲,对于结构元素B,当且仅当包括元素p的任何平移集合(B)z∩A≠∅时,p属于集合A•B

→图示如下:



(3.开运算与闭运算的对偶性

→开运算与闭运算也同样具有对偶性,可以表示如下:


→开运算与闭运算的结合同时具有开运算和闭运算的作用

→开运算具有消除尺寸小于结构元素的孤立目标和突起的作用

→闭运算填补了目标区域内部尺寸小于节后元素的孔洞和缺口

→开运算与闭运算的结合经常用于二值图像的后处理阶段,整个过程消除了二值图像中的孤立目标,并且填补了目标区域的内部孔洞。

→但是这两种运算会破坏目标原本轮廓和形状,特别是对于小尺寸目标会变得十分明显。


(4.使用OpenCV实现开运算和闭运算

在OpenCV中主要是使用morphologyEx()函数来实现基本的和更高级的形态学变换,如开运算,闭运算,形态学梯度,顶帽,黑帽等,下面首先简单介绍一下这个函数

函数声明如下:

void morphologyEx( InputArray src, OutputArray dst,int op, InputArray kernel,Point anchor=Point(-1,-1), int iterations=1,
                                int borderType=BORDER_CONSTANT,const Scalar& borderValue=morphologyDefaultBorderValue() );
第一个参数src为输入图像,也就是源图像,直接使用Mat类型的图像即可。图像的深度应为CV_8U,CV_16U,CV_16S,CV_32F,CV_64F中的一个

第二个参数dst,也就是目标图像,是函数的输出参数,需要和原图片有一样的尺寸和类型

第三个参数是int类型的op,表示的是形态学运算的类型,可以是下面中的任意一个标识符:

第四个参数kernel表示形态学运算的内核。如果为NULL,表示的是使用参考点位于中心3x3的核,一般使用函数getStructuringElement()函数配合这个参数的使用。在上面讲解腐蚀膨胀函数时已经详细给出,这里不再进行赘述。

第五个参数Point类型的anchor表示锚的位置,有默认值(-1,-1),表示位于中心。

第六个参数为int类型的iterations,表示迭代使用函数的次数,有默认值1。

最后两个参数为与边界有关的参数,通常情况下直接是用默认值即可。

具体实现程序如下:

//实现形态学开运算和闭运算
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("2345.jpg",0);
	Mat BinaryImage;
	threshold(srcImage, BinaryImage, 0, 255, THRESH_OTSU);
	imshow("原图像", BinaryImage);
	//定义结构元素
	Mat element = getStructuringElement(MORPH_ELLIPSE, Size(15, 15));
	//形态学闭运算
	Mat closeImage;
	morphologyEx(BinaryImage, closeImage, MORPH_CLOSE, element);
	imshow("闭运算操作", closeImage);
	//形态学开运算
	Mat openImage;
	morphologyEx(BinaryImage, openImage, MORPH_OPEN, element);
	imshow("开运算操作", openImage);
	waitKey();
	return 0;
}


执行程序后,效果图如下:



通过观察结果图像可以看出,

结构元素各向同性的开运算操作主要用于消除图像中小于结构元素的细节部分,物体的局部形状不变。物体较背景明亮时能够排除小区域物体,消除高于邻近点的孤立点,达到去噪的作用,可以平滑物体的轮廓,断开比较窄的狭颈。

而形态学闭操作能够排除小型黑洞(黑色区域),消除低于邻近点的孤立点,达到去噪的作用,可以平滑物体轮廓,弥合较窄的间断和细长的沟壑,消除小孔洞,填补轮廓线中的断裂。

没有更多推荐了,返回首页