zoukankan      html  css  js  c++  java
  • 图像处理(三)

    形态学图像处理笔记

    (P402)
    复习2.6.2(线性操作和非线性操作)和2.6.4(集合和逻辑操作,P46)
    在图像处理中,一般将全集定义为包含图像中所有元素的正方形。

    1. 形态学图像处理输入是图像,输出是从这些图像中提取属性的处理。
    2. 二值图像:每个像素只有两种可能的灰度等级,不是0就是255。
    3. 灰度值的并集操作定义为相应像素对的最大,交际操作定义为相应像素对的最小,补集操作定义为常数与图像中每个像素间的两两之差。

    腐蚀和膨胀

    腐蚀

    (Aominus B)
    如图所示,用B去腐蚀A,图c中黄色区域时A的区域,蓝色是B,B在A上运行,B的原点(图b中心的黑点)访问A的每一个元素,来创建一个新的集合。如果B被A完全包含,则B的原点在A上的这个元素构成新的集合的元素,否则不构成。最终形成了图e。从图e的结果看,A的边界被腐蚀掉了。
    “结构元包含在集合中”明确指出了A的元素与B的元素完全重叠。

    腐蚀缩小或细化了二值图像中的物体,可以把腐蚀看成是形态学滤波操作,这种操作将小于结构元的图像细节从图像中滤除了。腐蚀执行了一个“线滤波”的功能。

    膨胀

    (Aoplus B)
    膨胀会“增长”或“粗化”二值图像中的物体,粗化的宽度和方式由所用的结构元来控制。

    膨胀的应用:
    桥接裂缝。

    对偶性

    我们可以使用相同的结构元B膨胀图像A的背景(A的补),并对结果求补就能得到B对A的腐蚀。

    ((Aominus B)^c = A^c oplus hat{B})
    ((Aoplus B)^c = A^c ominus hat{B})

    开操作和闭操作

    开操作

    (Acirc B)
    B对A的开操作就是B对A先腐蚀,然后用B对结果进行膨胀。
    一般会平滑物体轮廓,断开较窄的狭颈并消除细的突出物。
    几何解释:

    B对A的开操作的边界由B中的点建立,当B在A的边界内测滚动时,B所能达到的A的边界的最远点。B对A的开操作是通过拟合到A的B的所有平移的并集得到的。

    性质:

    1. (Acirc B)是A的子集
    2. 如果C是D的子集,则(Ccirc B)(Dcirc B) 的子集
    3. ((Acirc B) circ B = A circ B)

    闭操作

    (Aullet B)
    B对A的闭操作就是B对A先膨胀,然后用B对结果进行腐蚀。
    集合运算符实心圆点。
    通常会弥合较窄的间断和细长的沟壑,消除小的空洞,填补轮廓线中的断裂。
    几何解释:

    性质:

    1. A 是 (Aullet B) 的子集
    2. 如果C是D的子集,则 (Cullet B)(D ullet B) 的子集
    3. ((Aullet B)ullet B = A ullet B)

    根据性质3可以看出,算子应用一次之后,一个集合的多次开操作或者闭操作是没有影响的。

    练习

    原图(来源于网络):
    原图

    过滤出灰度在180-255之间的后
    过滤出灰度在180-255之间的后

    以半径为1.5的圆形结构元素进行腐蚀后
    以半径为1.5的圆形结构元素进行腐蚀后

    再以半径为1.5的圆形结构元素进行膨胀后
    再以半径为1.5的圆形结构元素进行膨胀后

    dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
    read_image(Image, 'bei1')
    dev_display(Image)
    * 按照灰度过滤
    threshold(Image, Region, 180, 255)
    * 腐蚀
    erosion_circle(Region, RegionErosion, 1.5)
    * 膨胀
    dilation_circle(RegionErosion, RegionDilation, 1.5)
    

    击中或不击中变换

    形态学的击中或不击中变换是形状检测的一个基本工具。
    没看懂


    为什么 (W-D)对 (A^c) 的腐蚀会出现D的原点和E中的一横一竖?A的补集不是不包含D和E吗?

    如果B表示由D及其背景组成的集合,则B在A中的匹配表示为 (Acircledast B),

    [Acircledast B = (Aominus D)cap [A^cominus (W-D)] ]

    (B=(B_{1}, B_{2}))(B_{1} = D)(B_{2} = (W-D)),则:

    [Acircledast B = (Aominus B_{1}) cap (A^cominus B_{2}) ]

    一些基本的形态学算法

    边界提取

    求集合A的边界,先用B对A进行腐蚀,然后执行A和腐蚀结果的差。

    练习

    dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
    read_image(Image, 'map')
    threshold(Image, Region, 0, 254)
    erosion_circle(Region, RegionErosion, 1.5)
    * 求两个区域的不同
    difference(Region, RegionErosion, RegionDifference)
    

    原图(来源网络):

    提取边界后:

    孔洞填充

    基于集合膨胀、求补和交集的算法。
    有条件的膨胀,使填补感兴趣的区域。
    应用:
    消除照片中的反射。
    思考:在太阳能板部分断裂缺失的缺陷检测中,是否可以通过空洞填充,获取到期望中的完好的太阳能板,然后与实际情况做比较,找出有问题的部分

    未完

    这几天的学习小结

    1. 总体进度偏慢,两天左右的时间粗略学习了一个例程和精读了形态学处理的约三分之一章
    2. 章节有一定的关联性,因为没什么基础,很多东西都得前后结合着跳来跳去看
    3. 边学边练的方法感觉还不错,但是因为总体进度较慢,练习量也不太够
    4. 有的问题可能不用太纠结,几何解释比一大段的话更容易理解,一大段话看不明白就先跳过
    5. 需要根据这几天的学习情况规划一下总体计划及可行性
  • 相关阅读:
    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示
    总结软连接和硬连接区别,并用实例操作说明
    描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?
    Git Shell push_code 脚本
    YDD的铁皮锅——C/C++内存概念
    Linux Shell 常见用法及问题
    MFC 设置鼠标样式(SetSystemCursor函数问题)
    Qt QTableView自定义列表(插入图片)
    Github libinjection库研究总结
    Windows/Linux:VMware虚拟机用内网IP通讯
  • 原文地址:https://www.cnblogs.com/yutou2016/p/11064482.html
Copyright © 2011-2022 走看看