• 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构,而我们图像处理中指的形态学,往往表示的是数学形态学,下面一起来了解数学形态学的概念。 数学形态学(Mathematical ...

    https://www.cnblogs.com/wyuzl/p/6262714.html
    一、理论与概念讲解——从现象到本质
    1.1 形态学概述
    形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构,而我们图像处理中指的形态学,往往表示的是数学形态学,下面一起来了解数学形态学的概念。
    数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀,二值开闭运算,骨架抽取,极限腐蚀,击中击不中变换,形态学梯度,Top-hat变换,颗粒分析,流域变换,灰值腐蚀和膨胀,灰值开闭运算,灰值形态学梯度等。
    简单来讲,形态学操作就是基于形状的一系列图像处理操作。opencv为进行图像的形态学变换提供了快捷,方便的函数,最基本的形态学操作有二种,他们是:膨胀和腐蚀(Dilation与Erosion)
    膨胀与腐蚀能实现多种多样的功能,主要如下:

    消除噪声
    分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。
    寻找图像中的明显的极大值区域或极小值区域
    求出图像的梯度

    在进行腐蚀和膨胀的讲解之前,首先需要注意: 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。

    1.2 膨胀
    其实,膨胀就是求局部最大值的操作。
    按数学方面来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积。
    核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点(anchorpoint)。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其实,我们可以把核视为模板或者掩码。

    而膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐增长。如下图所示,这就是膨胀操作的初衷

         膨胀的数学表达式: 
                                                          
    
    膨胀效果图(毛笔字):
    

    照片膨胀效果图:

    1.3 腐蚀
    再来看一下腐蚀,,大家应该知道,膨胀和腐蚀是一对好基友,是相反的一对操作,所以腐蚀就是求局部最小值的操作,我们一般都会把腐蚀和膨胀对应起来理解和学习。下文就可以看到,两者的函数原型也是基本上一样的。
    原理图:

    腐蚀的数学表达式:

    腐蚀效果图(毛笔字):

    照片腐蚀效果图:

    声明:这俩个数学表达式直接复制过来看的有点问题,应该是把小字体的部分去掉才对吧。。。。。。。。

    展开全文
  • 形态学操作其实就是改变物体的形状,比如腐蚀就是”变瘦”,膨胀就是”变胖”,看下图就明白了: 形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素。腐蚀和膨胀是针对图片中的白色部分! ...

    形态学操作其实就是改变物体的形状,比如腐蚀就是”变瘦”,膨胀就是”变胖”,看下图就明白了:

    12115116-80ee2e028fe12d73.png

    形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素。腐蚀和膨胀是针对图片中的白色部分


    膨胀

    膨胀就是求局部最大值的操作。

    按数学方面来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积

    核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点(anchorpoint)。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其实,我们可以把核视为模板或者掩码。

    而膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐增长。如下图所示,这就是膨胀操作的初衷。

     

    12115116-2468cc283d56f3c2.png

    右图比左图大一圈

    膨胀可以简单理解为将B与A接触的所有背景点合并到A中的过程。


    腐蚀

    与膨胀相反,腐蚀就是求局部最小值的操作。

    12115116-2f6aa7de754e426a.png

    右图比左图小一圈


    腐蚀可以理解为B的中心(锚点)沿着A的内边界走了一圈。腐蚀也是对高亮部分而言,A区域之外的部分 < A的高亮像素,所里里面被外面取代。A中能完全包含B的像素被留下来了。

     

    腐蚀可以简单理解为消除物体A所有边界点的过程。


    开运算

    12115116-839e7c79ff090d0b.png

     


    闭运算

    12115116-658980eef0eb52ca.png

     

    12115116-d4d7e48520edcdcb.png

    如果还是不太理解开运算和闭运算,请看下图

     

    12115116-9e9dc2917c9a261a.png

    参考资料:
    【OpenCV入门教程之十】 形态学图像处理(一): 膨胀与腐蚀
    Python+OpenCV教程12:腐蚀与膨胀
    形态学腐蚀与膨胀
    形态学图像处理(一)

    展开全文
  • %读入图像,并转换为double型,该计算针对的是二值图像,所以加入图像时需注意 %膨胀测试图像 I=im2double(imread('D:\Gray Files\9-7.tif')); %获得图像大小 [M,N]=size(I); %存放膨胀后的图像 J=zeros(M,N); n=3; ...
    clc;
    clear all;
    close all;
    
    %读入图像,并转换为double型,该计算针对的是二值图像,所以加入图像时需注意
    %膨胀测试图像
    I=im2double(imread('D:\Gray Files\9-7.tif'));
    %获得图像大小
    [M,N]=size(I);
    %存放膨胀后的图像
    J=zeros(M,N);
    n=3;
    %=============================腐蚀图像=====================================
    %结构元素
    B=[0 1 0;
        1 1 1;
        0 1 0];
    n_B=length(find(B==1));
    %这里需要B对其原点进行翻转,因为B是对称的,所以翻转后的结果与其本身相同
    l_m=floor(n/2);
    l_n=floor(n/2);
    %将原始图像进行扩展,这里采用了镜像扩展,以进行图像边缘计算
    I_pad=padarray(I,[l_m,l_n],'symmetric');
    %腐蚀过程
    for x=1:M
        for y=1:N
            %从扩展图像中取出子图像
             Block=I_pad(x:x+2*l_m,y:y+2*l_n);
             %将结构元素与子图像点乘,即逻辑“与”操作
             c=B.*Block;
             %比较结构元素与c中的1的数量,如果一样多,则该点的值为1
             ind=find(c==1);
             if length(ind)==n_B
                 J(x,y)=1;
             end
        end
    end
    imshow(J,[]);

     

    展开全文
  • 目录 1 形态学操作 2 图像腐蚀 3 图像膨胀 参考资料 1 形态学操作 ...形态学(morphology)一词通常表示生物学的一个分支,该分支...形态学处理主要针对的是二值图像(0或1)。 形态学通常使用图像腐蚀图像膨胀...

    目录

    1 形态学操作

    2 图像腐蚀

    3 图像膨胀

    参考资料


    1 形态学操作

    形态学morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。这里,我们使用同一词语表示数学形态学的内容,将数学形态学作为工具从图像中提取表达和描绘区域形状的有用图像分量,如边界、骨架和凸壳等。

    形态学处理主要针对的是二值图像(0或1)。

    形态学通常使用图像腐蚀图像膨胀两个操作,这些操作是形态学处理的基础。


     

    2 图像腐蚀

    作为{{Z}^{2}}中的集合AB,表示为A\ominus BBA的腐蚀定义为:

                                                                                  A\ominus B=\left\{ z\left| {{(B)}_{z}}\subseteq A \right. \right\}

    上式表示图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图所示,将左边的原始图像A腐蚀处理为右边的效果图A\ominus B

     

    图像腐蚀的效果如下图所示:

     

    图像腐蚀类似于“邻域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。其主要包括两个输入对象:

    (1) 二值图像

    (2 )卷积核

     

    卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,腐蚀的过程如下图所示:

    被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄色点位置,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。如下图所示:

     

    图像腐蚀主要使用的函数为 erode(),其函数形式如下:

    dst = cv2.erode(src, kernel, iterations)

    其中,参数:

    dst 表示处理的结果;

    src 表示原图像;

    kernel 表示卷积核;

    iterations 表示迭代次数。

    注:迭代次数默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。

    例如:下图表示5\times5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

     

    (1)卷积核大小为5\times5 ,迭代次数为1

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    
    #读取图片
    src = cv2.imread('test1.bmp', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((5,5), np.uint8)
    
    #图像腐蚀处理
    erosion = cv2.erode(src, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", erosion)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     

     

    (2)卷积核大小为5\times5,迭代次数为9

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    
    #读取图片
    src = cv2.imread('test1.bmp', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((5,5), np.uint8)
    
    #图像腐蚀处理
    erosion = cv2.erode(src, kernel,iterations=10)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", erosion)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     

    (2)卷积核大小为39\times39,迭代次数为1

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    
    #读取图片
    src = cv2.imread('test1.bmp', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((39,39), np.uint8)
    
    #图像腐蚀处理
    erosion = cv2.erode(src, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", erosion)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     


    3 图像膨胀

    作为{{Z}^{2}}中的集合AB,表示为A\oplus BBA膨胀定义为:

                                                                            A\oplus B=\left\{ z\left| {{(\widehat{B})}_{z}}\bigcap{A\ne \varnothing } \right. \right\}

    图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了,主要用于去噪。

    (1) 图像被腐蚀后,去除了噪声,但是会压缩图像。

    (2) 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。

    它也包括两个输入对象:

    (1)二值图像或原始图像

    (2)卷积核

    图像膨胀的效果如下图所示:

     

    卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像,如下图所示:

     

     

    被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,否则为0

     

    图像膨胀主要使用的函数为 dilate(),其函数用法如下所示:

    dst = cv2.dilate(src, kernel, iterations)

    其中,参数:

    dst 表示处理的结果;

    src 表示原始图像;

    kernel 表示卷积核;

    iterations 表示迭代次数。

    注:迭代次数默认是1,表示进行一次膨胀,也可根据需要进行多次迭代,进行多次膨胀。通常进行1次膨胀即可。

    例如,下图表示5\times5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

     

    (1)卷积核大小为3\times3 ,迭代次数为1

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    
    #读取图片
    src = cv2.imread('test2.bmp', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((3,3), np.uint8)
    
    #图像膨胀处理
    erosion = cv2.dilate(src, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", erosion)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     

    (1)卷积核大小为5\times5 ,迭代次数为1

    代码如下所示:

    #encoding:utf-8
    import cv2
    import numpy as np
    
    #读取图片
    src = cv2.imread('test2.bmp', cv2.IMREAD_UNCHANGED)
    
    #设置卷积核
    kernel = np.ones((5,5), np.uint8)
    
    #图像膨胀处理
    erosion = cv2.dilate(src, kernel)
    
    #显示图像
    cv2.imshow("src", src)
    cv2.imshow("result", erosion)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     


     

    参考资料

    [1] https://blog.csdn.net/Eastmount/article/details/83581277

    [2] Python+OpenCV图像处理

    展开全文
  • 开操作是先腐蚀再膨胀,闭操作是先膨胀再腐蚀。灰度图像是求最大最小值,二值图像是进行与运算。 二值图像: 1.二值腐蚀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每...

    开操作是先腐蚀再膨胀,闭操作是先膨胀再腐蚀。灰度图像是求最大最小值,二值图像是进行与运算。

    二值图像:

    1.二值腐蚀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。中心及领域有一个点不是黑点,该点就被腐蚀成白点

    2.二值膨胀的具体操作是:用一个结构元素(一般是3×3的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。

    目的:开操作可以平滑物体轮廓,断开较窄的狭颈和消除细小的突出物。
       闭操作同样可以平滑轮廓的一部分,但与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂。

    灰度图像:
    1. 灰度形态学膨胀:膨胀就是求局部最大值的操作,结构元素B扫描图像的每一个像素,即计算核B覆盖的图像区域的像素点的最大值,并把这个最大值赋值给参考点(核B的中心点)指定的像素,使图像变明亮。
    2. 灰度形态学腐蚀:求局部最小值的操作,结构元素B扫描图像的每一个像素,即计算核B覆盖的图像区域的像素点的最小值,并把这个最小值赋值给参考点(核B的中心点)指定的像素,使图像变灰暗。



    展开全文
  • 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中...
  • 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换...
  • 形态学图像处理

    2017-07-27 22:49:11
    形态学图像处理是指从图像中提取一些“内涵”,也就是一些想得到的属性。形态学处理的数学工具是集合论,在冈萨雷斯的书中研究对象以后两种一种是二值图像,一种是灰度图像。  在在二值图像中中主要有膨胀和腐蚀两...
  • 因为形态学图像处理的最基础方法就是腐蚀和膨胀,因此就从这两个方法开始。 腐蚀: 把结构元素S平移x后得到Sx,若Sx包含于X,我们记下这个x点,所有满足上述条件的x点组成的集合称做X被S腐蚀(Erosion)的结果。用...
  • 形态学在数字图像处理中表示的是图像的数学形态里的内容,将数学形态学作为工具从图像中提取区域图像形状的有用的图像分量,如边缘、骨架,区域分割等。 如例: 如例: 如例: 2、数学形态学的语言是集合论。这个...
  • 数字图像处理第九章数字图像处理---形态学图像处理(一)预备知识1.1 预备知识1.1.1 集合理论中的基本概念1.2 二值图像、集合及逻辑算子(二)膨胀和腐蚀2.1 膨胀2.2 结构元的分解2.3 strel函数2.4 腐蚀(三) 膨胀...
  • 形态学图像处理中的应用形态学图像处理中的应用 腐蚀和膨胀 理论基础 形态学操作 膨胀 腐蚀 代码 代码说明 结果腐蚀和膨胀理论基础形态学操作 简而言之:一系列操作基于形状来操作图像,形态学操作通过在图像上...
  • 第九章 形态学图像处理 第九章 形态学图像处理腐蚀和膨胀 1 腐蚀 2 膨胀 二开操作与闭操作 三击中或击不中变换 四一些基本的形态学算法 1 边界提取 2 孔洞填充 3 连通分量的提取 4 凸壳 5 细化 6 粗化 7 ...
  • 数学形态学是基于集合论的图像处理方法,最早出现在生物学的形态与结构中,图像处理中的形态学操作用于图像与处理操作(去噪,形状简化)图像增强(骨架提取,细化,凸包及物体标记)、物体背景分割及物体形态量化等...
  • 形态学图像处理(一)基础知识(1)集合论中的基本概念(2)二值图像、集合及逻辑算子(二)膨胀与腐蚀(1)膨胀(2)结构元的分解(3)strel函数(4)腐蚀(三)膨胀与腐蚀的结合(1)开操作和闭操作(2)击中和或...
  • 腐蚀和膨胀是形态学图像处理中比较简单的两个操作。代码基于opencv,之前是在qtcreator2.2.2上实现的
  • [算法说明]:二值图像腐蚀操作属于图像形态学的范畴,形态学运算是只针对二值图像进行,并依据数学形态学(Mathermatical Morphogy)集合论方法发展起来的数字图像处理方法,它主要包括: 腐蚀, 膨胀, 开, 闭...
  • 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换...
  • //图像处理中最基本的形态学运算————膨胀与腐蚀形态学操作就是基于形状的一系列图像处理操作。最基本的操作有两种:膨胀与腐蚀。 //功能:1 消除噪声 // 2 分割出独立的图像元素,在图像中连接相邻的元素 // ...
1 2 3 4 5 ... 20
收藏数 4,204
精华内容 1,681