zoukankan      html  css  js  c++  java
  • 【数字图像处理】二值化图像腐蚀运算与膨胀运算

    形态学基本概念

    基本思想:用一定形态的结构元素去度量和提取图像中的对应形状,达到分析知识的目的。可用于图像处理的各个方面,包括图像分割、边界检测、特征提取。

    结构元素:形态学变换中的基本元素,使为了探测图像的某种结构信息而设计的特定形状和尺寸的图像,称为收集图像结构信息的探针。
    结构元素有多种类型:如圆形、方形、线型等,可携带知识(形态、大小、灰度和色度信息)来探测、研究图像的结构特点。

    形态学运算包括:二值化腐蚀和膨胀、二值化开闭运算、骨架抽取、击中击不中变换等。
    形态学四个基本算子:膨胀,腐蚀、开启和闭合组成,这些基本运算还可以推导和组合成各种数学形态学实用算法。

    腐蚀运算

    腐蚀运算思路:定义结构元素(与模板类似),结构元素在整幅图像中移动,移动到每个像素点上,只有结构元素与图像上对应像素点的像素值全部相等时,保留这个像素点的值。
    腐蚀运算作用:消除物体边界点,使边界点向内部收缩,可以把小于结构元素的物体去除。选取不同大小的结构元素,去除不同大小的物体。如两个物体间有细小的连通,通过腐蚀可以将两个物体分开。

    腐蚀运算

     

     腐蚀运算示意图

    基本方法:

    通常拖到结构元素在X域移动,在每一个位置上,当结构元素B在中心平移到X图像上的某优点(x,y)。

    如果结构元素内的每一个像素都与以(x,y)为中心的相同邻域中对应像素完全相同,那么就保留(x,y)像素点。

    对于不满足条件的像素点则全部删除,达到边界向内收缩效果。

    腐蚀运算c语言实现

    • 水平腐蚀:不处理左右两边
    • 垂直腐蚀:不处理上下两行
    • 全方位腐蚀:不处理四周
                int Image[120][180];                   
                        memset(Image, 0, sizeof(Image));
                       
                    //全方位腐蚀运算
                                for (int i = 1; i < Use_ROWS-1; i++)
                                {
                                    for (int j = 1; j < Use_Line - 1; j++)
                                    {
                                        if (Image_Use[i][j] == 255 &&
                                            Image_Use[i][j + 1] == 255 &&
                                            Image_Use[i][j - 1] == 255)
                                        {
                                            Image[i][j] = 255;
                                        }
    
                                    }
                                }

    膨胀运算

    膨胀运算思路:定义结构元素(与模板类似),结构元素在整幅图像中移动,移动到每个像素点上,如果结构元素与图像上对应像素点的像素值至少有一个像素相等时,保留这个像素点的值。
    膨胀运算作用:与腐蚀相反,对二值化物体边界点扩充,将与物体接触的所以背景点合并到该物体中,使边界向外扩张。如果两个物体之间的距离比较近,会把两个物体连通到一起,对填补图像分割后物体的空洞有用。

    膨胀与腐蚀比较:

    • 膨胀:填充图像中的小孔(比结构元素小的孔洞)及图像边缘处的小凹陷部分。
    • 腐蚀:消除图像边缘小的成分,并将图像缩小,从而使其补集扩大。
    • 膨胀和腐蚀:并不互为逆运算,可以级联结合使用。

    膨胀运算

    膨胀运算示意图

    膨胀运算c语言实现

    • 水平膨胀:不处理左右两边
    • 垂直膨胀:不处理上下两行
    • 全方位膨胀:不处理四周
                 int Image[120][180];                   
                        memset(Image, 0, sizeof(Image));
                       
                    //全方位膨胀运算
                                for (int i = 1; i < Use_ROWS-1; i++)
                                {
                                    for (int j = 1; j < Use_Line - 1; j++)
                                    {
                                        if (Image_Use[i][j] == 255 ||
                                            Image_Use[i][j + 1] == 255 ||
                                            Image_Use[i][j - 1] == 255)
                                        {
                                            Image[i][j] = 255;
                                        }
    
                                    }
                                }
  • 相关阅读:
    79. 滑动窗口的最大值
    78. 左旋转字符串
    77. 翻转单词顺序
    76. 和为S的连续正数序列
    75. 和为S的两个数字
    innodb 锁机制
    MVCC
    linux查看状态命令
    design pattern 资料整理
    mysql资料汇总
  • 原文地址:https://www.cnblogs.com/-wenli/p/11525256.html
Copyright © 2011-2022 走看看