四川大学-本科毕业论文-参考内容摘要:

直到将整幅图像分割成满足条件的不同子区域 .这些初始的小区域可能是小的邻域甚至是单个象素。 对这些小的区域 ,通过计算它们反映这个区域内像素一致性的特征 ,如平均灰度值 ,纹理 ,等信息 ,来进行一些小区域的 合并。 从而最终完成整个分割过程。 区域合并的第一步就是根据前面的特征给每个区域赋一组参数。 这些参数能够反映区四川大学本科毕业论文 基于图像分割的简单图像抠取算法的研究与实现 5 域属于哪个物体 [1,5]。 接下来根据相邻区域特征的差异为所有的边界赋一个强度值,这样就能够通过判断这个强度值的大小来考查是否要对两个相邻区域的共同边界进行消除操作。 如果这个值很大,则表示这个边界的强度很大,即这两个相邻的区域拥有着很大的差异,则不需要进行合并,它们的边界也就不能消除,反之,若这个值较小,则认为相邻区域拥有很高的相似度,可以起先边界消除完成合并。 在这个过程完成后需要对所有的区域根据它当前的 所有像素重新计算出一个特征值,以便完成下一次的边界消除,区域合并过程。 可以看出区域合并是一个反复迭代的过程,直到没有区域再进行合并时,才停止。 这个过程就是一个不断生长的过程,直到生长出目标,生长过程才会结束 [1,6]。 3) 基于边缘的分割 图像的边缘是图像最基本的特征之一 ,所谓边缘是指其周围像素灰度有阶跃变化或屋顶变化的那些像素的集合 .边缘广泛存在于物体与背景之间 ,物体与物体之间 ,基元与基元之间 ,因此 ,它是图像分割依赖的重要特征 .图像分割在某种程度上可以说是为一找到各个区域的边缘的操作。 而由以上对于边缘的 定义知,边缘是图像的局部特征,这样通过对局部特征的分析就可以确定某个像素是否是边缘。 基于边缘的分割技术主要有基于点的检测,基于线的检测经及基于边缘检测等几种方法 [1,7]。 基于点的检测主要是先检测出离散的点,然后再将点连接成封闭的边界,其处理过程就是用一个对待检测区域进行离散点的检测,如下示: W1 W2 W3 R = W1Z2+ W1Z2+… .+ W9Z9 W4 W5 W6 W7 W8 W9 表 21 其中 Zk是与模板系数 Wk相联系的灰度级像素, R 代表模板中心像素的值。 而基于线的检测有两种方式,一种是利用线检测模板进行线检测,另外是利用哈夫变换进行直线检测。 而基于边缘检测的分割方法则主要是利用各种算子得到图像中的边缘,进而根据边缘信息得到分割后的区域。 边缘检测的基本问题是噪声对图像检测精度的影响。 由于图像边缘和噪声均为频域中的高频分量,简单的微分运算会增加图像中的噪声。 因此,在微分运算之前应采用适当的平滑滤波以减少高频分量中噪声的影响。 Cannny 应用严格的数学方法对此问题进行了分析,提出了 4个指数函数线性组合形成的最佳边缘检测算子,其实质是用一个准高斯函数做平滑 运算,然后以带方向的一阶微分定位导数最大值,它可用高斯函数的梯度来近似,属于具有平滑功能的一阶微分算子 [1,8]。 Canny 给出了评价边缘检测性能优劣的三个指标: ① 好的信噪比,即将边缘点判为非边缘点,非边缘点判为边缘点的概率应该比较低。 ② 好的定位性能,即检测出的边缘点,应尽可能在实际边缘点的中心。 ③ 对单一边缘仅有唯一响应,即单个边缘产生多个响应的效率应该比较低,并且虚假边缘的响应应该得到最大的抑制。 并且,优秀的边缘检测器可以通过以下方式得到: ① 使图像信噪比 SNR 最大化 ② 使标记的边缘点与真实边缘中央的距离的 均方根的估计值的倒数最大化 为了同时达到检测性能指标和定位标准的最大化, Canny 认为 SNR 与边缘点位移的估计值一的标准方差的倒数乘积应达到最大 [1,9]。 新颖的图像分割方法 目前应用于图像分割的新方法非常的多,它们的应用范围也各有不同,处理效果即理论的成熟度也表现出了一些差异,下面就基于分形的图像分割技术和基于神经网络的图像分割技术做一个简单的介绍。 1) 基于分形的图像分割技术 基于分形的图像分割技术的核心思想是利用图像的分形维数进行分割。 而分形维数在一定程度上对物体表面的粗糙度有着一定程度的 反映,而自然物体与人造物体在分形维数上有着很大的差异,这样就可以利用这个特征从自然背景中提取出人造物体。 B. B. Mandelbrot 指出, Hausdorff Besicovitch 维数严格大于拓扑维数的集合称为分形,而目前较为流行的描述如下 [2,1]: 一般的,如果 F是具有以下性质的集合,则称它是一个分形。 (1) F 具有精细的结构,即有任意小比例的细节。 (2) F 是如此不规则,以至于它的整体与局部都不能用传统的几何语言来描述。 (3) F 通常具有某种自相似形式,可能是近似的或统计的。 (4) 一般地 , F 的“分形维数” (以某种方式定义的 )大于它的拓扑维数。 (5)在大多数令人感兴趣的情形下, F 可以以某种非常简单的方法产生,可能由迭代产生。 在上面的定义中,自相似性是分形具有的一个最重要的特征 [2,2]。 所谓自相似,是指 系统的总体和部分之间,这部分和那部分之间具有的相似性。 分形作为一个数学集, 它的内部应具有精细结构,也就是在所有比例尺度上其组成部分应包含整体,而且是 自相似的,它以其独特的手段来解决整体与部分的关系问题。 自相似性具有标度不变 性,其严密的量化方法至今未形成,仅能借助计算机模拟 [2,3]。 2) 基于神经网络的图像分割技术 神经网络是目前较为新颖的研究领域,已经被使用在了很多问题的解决中。 神经网络技术在图像分割中的应用目前也有了极大的发展。 基于神经网络的分割是用一个或一系列人工神经网络对图像中的小区域进行处理的分割技术。 经过这样的决策机制处理后,图像四川大学本科毕业论文 基于图像分割的简单图像抠取算法的研究与实现 7 中各个区域就由神经网络确认的类别进行了标志。 这种类型的神经网络的一个经典用例就是基于 Kohonen 图的网络。 脉冲耦合神经网络( PCNNs)是通过模拟猫的视皮层神经元模型和为了获得高性能图像处理仿生而开发的。 1989 年, Eckhorn 介绍了神经 网络模型来模拟猫的视皮层机制。 Eckhorn 模型为研究小型哺乳动物的视觉皮层提供了一个简单而有效的工具,并很快在图像处理方面获得了具有重大应用潜力的认可。 1994 年, Eckhorn 模型被约翰逊应用于一种图像处理算法中,该算法称为脉冲耦合神经网络。 在过去的十年中,PCNNs 已被用于图像处理的各种应用,包括:图像分割,特征生成,面部提取,运动检测,区域生长,减少噪声等。 PCNN 的是一个二维神经网络。 网络中的每个神经元对应一个像素的图像输入,接收其对应的颜色信息(如强度)作为外部刺激。 每个神经元又与邻近神经元的 连接,接收从他们而来的本地刺激。 外部和地方刺激在内部激活系统相结合直到它超过一个动态的门限值,然后就倒输出一个脉冲。 通过迭代计算, PCNN 的神经元产生的脉冲输出的时间序列。 输出的脉冲时间序列包含图像信息的输入,可为各种不同的图像处理应用,如图像分割和特征生成,利用。 与传统的图像处理手段, PCNNs 有几个显着优点,包括对噪声的鲁棒性,几何变化的输入模式,输入模式的衔接等小强度的变化能力等[3]。 3 算法实现的工具及技术简介 在 GrabCut 算法的实现过程中,整个算 法的实现都是建立在 MFC 框架之上的。 MFC框架很好的完成了算法实现系统的界面显示以及用户交互等工作。 另外为了很好的完成GrabCut算法的图像输入及显示工作,在其实现中分别用到了 GDI+中 CImage类和 OpenGL中的绘制函数来完成。 MFC 概述 [4] MFC 编程框架 MFC 是 Microsoft Foundation Class 的简写。 MFC 中 所包含的 各种类 组 合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立 Windows 下的应用程序,这是一种相对 SDK 来说更为简单 的方法。 因为总体上, MFC 框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。 Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard 可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口; ClassWizard 用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑 [4,1]。 1)封装 MFC 框架的构成主要是由 MFC 类库,而 MFC 类库主要是一些 C++类库。 这样这些类库就可以对 Win32 应用程序编程接口,应用程序概念, OLE 特性, ODBC 或 DAO 数据库访问等功能进行封装。 具体的分述如下 [4,2]: ① 对 Win32 应用程序编程接口的封装 用一个 C++ Object 来包装一个 Windows Object。 例如: class CWnd 是一个 C++ window object,它把 Windows window(HWND)和 Windows window 有关的 API 函数封装在 C++ window object的成员函数内,后者的成员变量 m_hWnd 就是前者的窗口句柄。 ② 对应用程序概念的封装 在 使用 SDK 编写 Windows 应用程序时, 必须首先 定义窗口过程 ,然后对窗口进行登记操作 , 最后才会完成对窗口的创建过程 ,等等。 而对于这一套过程的实现每一次使用的代码都极为类似,这就造成了过多的重复操作。 于是 MFC 把许多类似的处理 用一些类 封装起来,替程序员完成这些工作 ,以提高编码的效率。 另外, MFC 还对文档 视图模式进行了封装支持,而文档就表示了用户操作的数据对象,而视图则被视为完成对数据对象操作的接口,用户通过对视图的操作就 可以完成对数据对象的查看及处理。 ③ 对 COM/OLE 特性的封装 OLE 即 Object Linking and Embedding,它是建立的 模型的基础上的,而应四川大学本科毕业论文 基于图像分割的简单图像抠取算法的研究与实现 9 用程序若要实现对 OLE 的支持就必须实现一套接口,以完成 OLE 的初始化装载。 而这一套接口的实现又极为繁琐,因此, MFC 的 OLE 类 对 OLE API 大量的复杂工作 进行了封装 ,这些类提供了实现 OLE 的更高级接口 [4,3]。 ④ 对 ODBC 功能的封装 以少量的能提供与 ODBC 之间更高级接口的 C++类,封装了 ODBC API 的大量的复杂的工作,提供了一种数据库编程模式。 2)继承 MFC 拥有一个庞大的类库,这些类库对 MFC 所能够提供的功能进行了很好的封装。 而类库中的各个类并不是独立的,它们大多从一些基础类中派生而来,而这些基础类对MFC 中众多类的共同实现进行了很好的实现。 首先, MFC 抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。 这些类大多都是从 CObject 和 CCmdTarget 派生而来 .CObject 类对一些 重要的特性 提供很好的实现 , 这些特性 包括动态类信息、动态创建、对象序列化、对程 序调试的支持 ,而 CCmdTarget 通过封装一些属性和方法,提供了消息处理的架构。 从这个两个类派生出的子类都具有这两个类的特性 . 3)虚拟函数和动态约束 MFC 是在 C++的基础上构建的 ,它对 C++中的虚函数与动态约束都提供了很好的支持 ,并且 MFC 还建立了消息映射机制来对过多的使用虚函数所带来的如程序臃肿 ,内存消耗过大 ,效率低下等问题进行优化 .通过 对 虚拟函数和消息映射 的支持 , MFC 类 就为 提供了丰富的编程接口。 用户 继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入 MFC 的编程框架。 这样 MFC 框架就能够完成 用户所期望的处理效果 . 4) MFC 的宏观框架体系 MFC 对一切用于更好的使用户进行应用程序开发的功能 ,动态约束 ,及它们间的一些关系与相互作用都进行了很好的封装。 这使得用户的整个开发过程大部分的工作都用于对这些开发模板的使用以及调配。 而在不同的应用程序的开发过程,仅仅是对不同模板的使用而已。 然而,为了实现如上模板或模式的支持, MFC 内部将会有着非常复杂的实现过程。 例如,如果要使应用程序能够建立在消息映射的机制上, MFC 就必须对消息映射机制的过程做很好的实现,即对整个消息获取,消息处理等一系列的操作都必须预定 义其操作的流程及处理方式。 又如,为了实现对 DLL 编程的支持和多线程编程的支持 , MFC 的内部同样必须采用一些内部约定的方法对其进行如初始化,信息管理,句柄获取等一系列必须的操作进行处理。 虽然对于大多数的用户来说,在不明白 MFC 的一些内部实现的情况下,也能做出一些良好的应用。 但是如果能够对这些不透明的实现有着很好的理解,那么就能够在开发中更加的随心所欲,甚至说对其。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。