精华内容
下载资源
问答
  • 图像形态学之膨胀算子

    千次阅读 2018-03-03 16:42:49
    膨胀运算在数字形态中的作用是把图像周围的背景点合并到物体中。如果两个物体之间距离比较近,那么膨胀运算可能会使这两个物体连接在一起。...结果元素是一个区域region,可由这些算子区域产生:gen...
    膨胀运算在数字形态中的作用是把图像周围的背景点合并到物体中。如果两个物体之间距离比较近,那么膨胀运算可能会使这两个物体连接在一起。膨胀对填补图像分割后物体中的空洞很有用。
    dilation1(Region, StructElement:RegionDilation:Iterations:)
    功能: 使用用户自定义的结构元素对区域进行膨胀。结果元素是一个区域region,可由这些算子区域产生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, draw_region_polygon, gen_region_points等。
    参数: Region(输入参数):输入区域 
    StructElement(输入参数):结构元素(区域)
    RegionDilation(输出参数):膨胀后的区域
    Iterations(输入参数):迭代次数

    dilation2(Region, StructElement:RegionDilation:Row, Column, Iterations)
    功能:根据参考点,使用用户自定义的结构元素对区域进行膨胀。具体用法参见erosion2.
    参数: Region(输入参数):输入区域 
    StructElement(输入参数):结构元素 
    RegionDilation(输出参数):膨胀后的区域 
    Row(输入参数):参考点行坐标
    Column(输入参数):参考点列坐标 
    Iterations(输入参数):迭代次数 

    dilation_circle(Region:RegionDilation:Radius:)
    功能:使用圆形结构元素对区域进行膨胀。
    参数: Region(输入参数):输入区域 
    RegionDilation(输出参数):膨胀后的区域 
    Radius(输入参数):圆形结构元素的半径 

    dilation_rectangle1(Region:RegionDilation:Width, Height:)
    功能:使用矩形结构元素对区域进行膨胀
    参数: Region(输入参数):输入区域 
    RegionDilation(输出参数):膨胀后的区域 
    Width(输入参数):矩形结构元素的宽度 

    Height(输入参数):矩形结构元素的高度 

    二值图像的膨胀操作

    1、结构的原点设置在结构的内部情况举例


    图中左侧(a)为原图像, 右侧(b)为结构元素

    操作规则,拿结构元素的原点图像上的黑色方块上一次一次移动

    第一步 将结构元素的原点,放置在原图向上的第一个黑色方块上,即


    (左侧为原图像, 右侧为输出图像)

    第二步 根据此时结构元素在原图上霸占的所有位置,我们在输出图的相应所有位置涂黑,即


    第三步 将结构元素的原点移动到下一个原图上的黑色方块, 即


    第四步 根据此时结构元素在原图上霸占的所有位置,我们在输出图的相应所有位置涂黑,即


    第五步 重复第三步和第四步,直到遍历完毕原图像中所有的黑色方块,我们得到最终输出结果

                              

    2、结构的原点设置在结构的外部情况举例


    左侧为原图, 右侧为结构元素,注意,这里的结构元素的原点不在结构元素内部

    第一步 将结构元素的原点,放置在原图向上的第一个黑色方块上,即


    由于位置不够,我在上边界上拓展了一行

    第二步 根据此时结构元素在原图上霸占的所有位置,我们在输出图的相应所有位置涂黑,即


    第三步 将结构元素的原点移动到下一个原图上的黑色方块,即


    第四步 根据此时结构元素在原图上霸占的所有位置,我们在输出图的相应所有位置涂黑,即


    第五步 重复第三步和第四步, 直到遍历完毕原图像中所有的黑色方块,我们得到最终输出结果

                              

    展开全文
  • Halcon腐蚀膨胀算子

    万次阅读 2016-07-28 09:17:16
    膨胀:添加对象边界某些像素,具有扩大图像作用   结构元素:由数值为1或0组成的矩阵,在每个像素位置与二值图像对应的区域进行特定的逻辑运算。运算结果为输出图像相应的像素。运算效果取决于结构元素的大小...

    腐蚀:删除对象边界某些像素,具有收缩图像作用

    膨胀:添加对象边界某些像素,具有扩大图像作用

     

    结构元素:由数值为1或0组成的矩阵,在每个像素位置与二值图像对应的区域进行特定的逻辑运算。运算结果为输出图像相应的像素。运算效果取决于结构元素的大小内容以及逻辑运算的性质。

     

    腐蚀算法:使用一个nXn结构元素去扫描图像中的每一个像素。用结构元素与其覆盖的二值图像做“与”操作,如果都为1,这图像的该像素为1,否则为0. 腐蚀之后,图像边界向内收缩

     

    膨胀算法:使用一个nXn结构元素去扫描图像中的每一个像素。用结构元素与其覆盖的二值图像做“与”操作,如果都为0,这图像的该像素为0,否则为1. 膨胀之后,图像边界向外扩大

     

    erosion_circle(Region : RegionErosion : Radius : ) 用一个圆形的结构元素进行腐蚀图像 (小于半径的区域会被腐蚀掉,一般用于有弧形的区域,大多数用这个算子)

    erosion_rectangle1(Region : RegionErosion : Width,Height : ) (一般用于方直的区域)

     

    dilation_rectangle1(Region : RegionDilation : Width,Height : ) 使用一个矩形的结构元素来膨胀图像。

     

    erosion1(Region,StructElement : RegionErosion : Iterations : ) 自己建立一个结构元素来腐蚀区域(Structuring elements (StructElement) can be generated with operators such asgen_circle,gen_rectangle1,gen_rectangle2,gen_ellipse,draw_region,gen_region_polygon,gen_region_points, etc.)

    Iterations是迭代次数,即腐蚀的次数

     

    dilation1(Region,StructElement : RegionDilation : Iterations : ) 自己建立一个结构元素来膨胀区域(Structuring elements (StructElement) can be generated with operators such asgen_circle,gen_rectangle1,gen_rectangle2,gen_ellipse,draw_region,gen_region_polygon,gen_region_points, etc.

     

    erosion2(Region,StructElement : RegionErosion : Row,Column,Iterations : ) 使用一个参考点来腐蚀区域(默认情况wie中间,一般为自己指定参考点)这是和erosion1最大的区别

    dilation2(Region,StructElement : RegionDilation : Row,Column,Iterations : ) 和上类似

     

    gen_disc_se( :SE :Type,Width,Height,Smax : ) 生成一个椭圆的结构元素

     

    gray_dilation(Image,SE :ImageDilation : : ) 灰度值膨胀  对灰度值进行操作而不是区域结构操作

    gray_erosion(Image,SE :ImageErosion : : ) 灰度值腐蚀

     

     

    对图像腐蚀或是膨胀操作后,和原区域做减操作,可以得到区域的内或是外边界

    展开全文
  • read_image (Image1, 'monkey') threshold (Image1, Region, 120, 255) * Close the small gaps. * closing_circle (Region, RegionClosing, 3.5) * Select the large regions. opening_circle (Region, ...
  • 给出某些有趣的加权单向位移算子的完全酉不变量,进一步发展了超等距可膨胀算子的概念.
  • 文章目录图像膨胀|图像腐蚀图像轮廓图像边缘检测sobel算子拉普拉斯算子、canny算子 图像膨胀|图像腐蚀 import numpy as np import matplotlib.pyplot as plt import cv2 ## a.图像的二值化 ,这里没有做阈值处理 ...

    图像膨胀|图像腐蚀

    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    ## a.图像的二值化 ,这里没有做阈值处理
    src = cv2.imread('lina.jpg', 0)
    ret2,th2 = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    ## b.设置卷积核5*5
    kernel = np.ones((3, 3), np.uint8)
    ## c.图像的腐蚀,默认迭代次数
    erosion = cv2.erode(th2, kernel)
    ## 图像膨胀
    fatten = cv2.dilate(th2,kernel)
    ## 效果展示
    imgs = [src,th2,erosion,fatten]
    titles= ['original','binaryzation','after erosion','after fatten']
    for i in range(4):
        plt.subplot(2,2,i+1)
        plt.imshow(imgs[i],cmap='gray');plt.title(titles[i])
    plt.show()

    在这里插入图片描述

    图像轮廓

    #图形的轮廓
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    from skimage import measure,draw
    
    src = cv2.imread('lina.jpg', 0)
    ret2,img = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    #检测所有图形的轮廓
    contours = measure.find_contours(img, 0.5)
    
    #绘制轮廓
    fig, axes = plt.subplots(1,2,figsize=(8,8))
    ax0, ax1= axes.ravel()
    ax0.imshow(img,plt.cm.gray)
    ax0.set_title('original image')
    
    rows,cols=img.shape
    ax1.axis([0,rows,cols,0])
    for n, contour in enumerate(contours):
        ax1.plot(contour[:, 1], contour[:, 0], linewidth=2)
    ax1.axis('image')
    ax1.set_title('contours')
    plt.show()

    在这里插入图片描述

    图像边缘检测

    https://blog.csdn.net/qq_40962368/article/details/81416954

    sobel算子

    # Sobel边缘检测算子
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    #解决中文显示问题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    img = cv2.imread('lina.jpg', 0)
    x = cv2.Sobel(img, cv2.CV_16S, 1, 0,ksize=3)
    y = cv2.Sobel(img, cv2.CV_16S, 0, 1,ksize=3)
    #cv2.CV_64F表示64位浮点数即64float。CV_16S是16位short型
    #这里不使用numpy.float64,因为可能会发生溢出现象。用cv的数据则会自动
    #第三和第四个参数分别是对X和Y方向的导数(即dx,dy),对于图像来说就是差分,这里1表示对X求偏导(差分),0表示不对Y求导(差分)。其中,X还可以求2次导。
    #注意:对X求导就是检测X方向上是否有边缘。
    XY = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3)
    #这里对两个方向同时进行检测,则会过滤掉仅仅只是x或者y方向上的边缘
    # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
    # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像
    Scale_absX = cv2.convertScaleAbs(x)  # convert 转换  scale 缩放
    Scale_absY = cv2.convertScaleAbs(y)
    Scale_absXY = cv2.convertScaleAbs(XY)
    result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0)
    # cv2.imshow('img', img)
    # cv2.imshow('Scale_absX', Scale_absX)
    # cv2.imshow('Scale_absY', Scale_absY)
    # cv2.imshow('result', result)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
    imgs = [img,Scale_absX,Scale_absY,result]
    titles = ['img','Scale_absX','Scale_absY','result']
    for i in range(4):
        plt.subplot(2,2,i+1)
        plt.imshow(imgs[i],cmap='gray');plt.title(titles[i],fontsize=9)
        plt.axis('off')
    plt.show()
    plt.imshow(Scale_absXY,'gray');plt.axis('off');
    plt.title('对两个方向同时进行检测,滤掉仅仅只是x或者y方向上的边缘')
    plt.show()

    Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。处理完图像后,再使用cv2.convertScaleAbs()函数将其转回原来的uint8格式,否则图像无法显示。

    在这里插入图片描述
    在这里插入图片描述

    拉普拉斯算子、canny算子

    # 拉普拉斯算子
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    img = cv2.imread('lina.jpg', 0)
    laplacian = cv2.Laplacian(img, cv2.CV_16S, ksize=3)
    dst = cv2.convertScaleAbs(laplacian)
    plt.subplot(121);plt.imshow(dst,'gray');plt.title('laplacian')
    #canny算子
    blur = cv2.GaussianBlur(img, (3, 3), 0)  # 用高斯滤波处理原图像降噪
    canny = cv2.Canny(blur, 50,150)  # 50是最小阈值,150是最大阈值
    plt.subplot(122);plt.imshow(canny,'gray');plt.title('canny')
    plt.show()
    

    在这里插入图片描述

    展开全文
  • vc程序:二值化,加杂音去杂,取单色图,彩图转灰图,膨胀收束,算子
  • The concept of dilation of bounded operator in Hilbert space introduced by Sz,-Nagy is useful for the operator researches. The main purpose of this note is to give a necessary and sufficient condition...
  • 本文总结了腐蚀,膨胀和开闭操作在二值图像上的应用,基于opencv给出了实例。 参考:《数字图像处理》(第三版) 冈萨雷斯 1、腐蚀 腐蚀的定义为:在二维整数空间中,存在集合A和B,则B对A的腐蚀记为: 其中,...

    本文总结了腐蚀,膨胀和开闭操作在二值图像上的应用,基于opencv给出了实例。

    参考:《数字图像处理》(第三版)  冈萨雷斯

    1、腐蚀

    腐蚀的定义为:在二维整数空间Z^2中,存在集合A和B,则B对A的腐蚀记为:

    A\ominus B=\{z|(B)_z\subset A \}

    其中(B)_z=\{c|c=b+z,b\in B\},称为集合B按照点z的平移。

    上面的定义含义是,B对A的腐蚀是一个用z平移的B包含在A中的所有的点z的集合。腐蚀缩小或细化了二值图像中的物体。可以将腐蚀视为形态学滤波,这种操作将小于结构元的图像细节从图像中滤除。

    2、膨胀

    膨胀的定义为:A和B是Z^2中的集合,B对A的膨胀为:

    A\oplus B=\{z|(\hat{B})_z \cap A \neq \emptyset \}

     其中\hat{B}是集合B的反射,即\hat{B}=\{w|w=-b,b\in B\}

    从膨胀的定义可以得知,B对A的膨胀是在保证\hat{B}A至少有一个元素是重叠的前提下,所有位移z的集合。膨胀会“增长”或“粗化”二值图像中的物体,这种特殊的方式和粗化的宽度由所用结构元来控制。

    3、开操作和闭操作

    结构元B对集合A的开操作表示为:

    A\circ B=(A\ominus B)\oplus B

    上式的含义是B对A的开操作就是B对A的腐蚀,紧接着用B对结果进行膨胀。

    结构元B对集合A的闭操作表示为:

    A\bullet B=(A\oplus B)\ominus B

    上式的含义是B对集合A的闭操作就是简单地用B对A膨胀,紧接着用B对结果进行腐蚀。

    开操作一般会平滑物体的轮廓、断开较窄的狭颈并消除较细的突出物。

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

    4、应用opencv实现腐蚀和膨胀

    代码如下

    # encoding:utf-8
    
    import cv2
    import numpy as np
    
    kernel5 = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
    kernel10 = cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
    
    img = cv2.imread("five.jpg")
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,binary_img = cv2.threshold(gray_img,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
    dilate_img = cv2.dilate(binary_img,kernel5)  # 膨胀
    erode_img = cv2.erode(binary_img,kernel5)   # 腐蚀
    H, W = binary_img.shape
    gap = np.ones(shape=(H,W//10),dtype=np.uint8)*255
    im = np.hstack([binary_img,gap,dilate_img,gap,erode_img])
    cv2.imshow("",im)
    cv2.waitKey(0)
    
    
    open_img5 = cv2.dilate(erode_img,kernel5)
    close_img5 = cv2.erode(dilate_img,kernel5)
    im = np.hstack([binary_img,gap,open_img5,gap,close_img5])
    cv2.imshow("",im)
    cv2.waitKey(0)
    
    open_img10 = cv2.dilate(erode_img,kernel10)
    close_img10 = cv2.erode(dilate_img,kernel10)
    im = np.hstack([binary_img,gap,open_img10,gap,close_img10])
    cv2.imshow("",im)
    cv2.waitKey(0)

    膨胀和腐蚀的结果如下图所示,最左侧是原图经过二值化之后的图,中间是用5乘5的矩形结构元膨胀的图,右侧是腐蚀的图。可以看到原图笔画中存在一些狭窄的断裂,膨胀之后笔画变粗了一些,并且断裂消失了。腐蚀之后笔画变得更细,并且笔画之间的断裂变得更大。膨胀图中的噪点同样变大了,腐蚀图中虽然噪点消失了,但是笔画不连续。

    使用5乘5开操作和闭操作的结果如下图所示,左侧是原图的二值图,中间是开操作的图,也就是先腐蚀再膨胀,可以看到腐蚀的时候已经去除了图中的噪点,膨胀操作让笔画显得更粗一些。右侧是闭操作图,即先膨胀再腐蚀,因为膨胀的时候噪点也放大了,因此经过腐蚀之后,还是存在噪点。

    先使用5乘5腐蚀和膨胀,然后使用10乘10的结构元进行开闭操作,结果如下图所示。可以看到开操作和闭操作的图中,都没有噪点,并且笔画也更加连贯。

    展开全文
  • opencv 图像处理 形态学操作 腐蚀 膨胀 开闭运算 阈值二值化 图像卷积 图像金字塔 Sobel算子 Laplacian 算子 candy边缘检测 霍夫变换 直方图 github代码 博文末尾支持二维码赞赏哦_ 一、形态学操作 腐蚀 膨胀 开...
  • 数学形态学运算包括两种算子:腐蚀(erosion)算子和膨胀算子(dilation)。 腐蚀运算的原理是对数据集中的每个元素在自定义的结构元素(窗口)内寻求最小值来替代中心元素的值。腐蚀运算的物理意义是具有腐蚀数据集合...
  • 二值膨胀与腐蚀

    2018-03-13 16:15:42
    膨胀算子的一种可能实现:把结构元素考虑为一个模板,让其在图像上移动。当结构元素的原点和图像中的一个黑色元素对齐的时候,图像中所有与结构元素中黑色像对应的像素都被标记起来,都改为黑色。当整个图像都被结构...
  • 使用两种大小尺寸的形态学膨胀算子优化带内重要系数编码,并对两种膨胀方式采用不同的算术编码模型,克服了传统单一算子不能平衡膨胀速度和膨胀质量的不足。使用差分缩减方式对各小波系数聚类簇的起始位置和稀疏系数...
  • 使用两种大小尺寸的形态学膨胀算子优化带内重要系数编码,并对两种膨胀方式采用不同的算术编码模型,克服了传统单一算子不能平衡膨胀速度和膨胀质量的不足.使用差分缩减方式对各小波系数聚类簇的起始 位置和稀疏...
  • Halcon算子

    2018-02-09 17:21:54
    Halcon部分算子功能:*读取一张图像 read_image(Image,'C:/Users/Desktop/无标题.png') *画一个矩形生成区域 draw_rectangle1(3600,Row1,Column1,Row2,Column2) *获得矩形区域 gen_rectangle1(Rectangle,Row1,Column...
  • 拉普拉斯算子

    2015-09-23 09:18:00
    %function PicOut=Lap_edge(PicInput,thresh) ...% 本程序能够将BMP格式的黑白灰度图像用拉普拉斯算子进行边缘检测 % 生物图像处理作业2 % 格式为 a=Lap_edge(PicInput,thresh) 或者嵌套为 Lap_edge(i...
  • 「Python 图像处理 OpenCV (8):图像腐蚀与图像膨胀」 「Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算」 「Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算」 「...
  • halcon 算子

    2020-04-20 19:46:08
    梯度算子(sobel) *2.Canny边缘检测算子 *3.robel边缘检测算子 dev_close_window () read_image (Image, 'D:/数字图像处理/image/8.bmp') get_image_size (Image, Width, Height) dev_open_window (0, 0, 512, 512,...
  • AI算子列表

    2021-05-27 13:45:46
    AI算子列表 概述 目前只有部分算子可在一个库中同时运行在MLU220和MLU270平台。也就是用户使用 ./build_cnplugin.sh --mlu270 命令编译生成的 libcnplugin.so 文件可同时在MLU220和MLU270上运行,其余算子只能在MLU...
  • 形态学算子

    2019-07-22 15:56:13
    形态学算子有腐蚀、膨胀、开和闭四种。 腐蚀 腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。 腐蚀的算法: 用3x3的结构元素,扫描图像的每一个像素 用结构元素与其覆盖的二值图像做...
  • halcon算子

    2016-09-11 00:11:31
    1、set_display_font( ) //定义窗口字体大小、类型 2、dev_set_line_width(4) ...9、dilation_circle(Region,RegionDilation,3.5) //以半径为3.5的圆为模板对Region进行膨胀运算 10、skeleton( ) //获取骨架
  • 滤波算子

    千次阅读 2012-11-14 16:23:27
     极大值滤波就是选取像素点领域的最大值作为改点的像素值,有效率去了灰度值比较低的噪声,也可作为形态学里面的膨胀操作。  极大值滤波可以表示为: Maximum(A)=max[A(x+i,y+j)] (x,y)属于M  注:(x+i,y+j)...
  • halcon算子学习

    2021-04-27 08:19:06
    注:change_radial_distortion_cam_par算子将相机的畸变系数(k1-k3,p1,p2)设置为0,然后利用gen_radial_distortion_map算子将没有畸变的参数和有畸变的参数生成一个映射,就可以利用这个映射进行畸变校正 concat_...
  • Halcon算子解释

    2020-09-08 11:09:32
    在单步模式下,该规则无效,单个算子调用以后,对象总是显示在图形窗口上;在测量一系列算子的运行时间的时候,应该设置为OFF,以减少HDevelop中GUI更新的运行时间的影响  dev_update_pc:在程序执行期间,控制程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,739
精华内容 1,895
关键字:

膨胀算子