zoukankan      html  css  js  c++  java
  • 图像形态学提取边界和区域填充

    1、二值图像边界提取、轮廓提取

    如果一个点的8邻域都是1,则可以认为这个点是内部的点而不是边界上的点,可以删除这类点,剩下的就是边界上的点。根据腐蚀的特性,使用3*3的结构元素对图像进行腐蚀,可以得到内部的点,那么再用原图减去腐蚀图,就得到了图像的边界。

    imgPath = 'E:opencv_picsrc_picpic1.bmp';
    img = imread(imgPath);
    img=rgb2gray(img);
    img = 255-img;
     
    se = strel('square', 5);
    img2 = imerode(img, se);
    subplot(1,3,1),imshow(255-img),title('原始图像');
    subplot(1,3,2),imshow(255-img2),title('腐蚀图像');
    subplot(1,3,3),imshow(255-(img-img2)),title('边界点');

    2、形态学方法图像区域填充

    区域填充可以认为是边界提取的反过程,已知边界情况下得到边界包含的区域。

    已知某一图形,具有8连通边界,其内部有空白区域,那么怎么填充内部?

    在图像内部确认一点,然后以此点为基准,循环膨胀,只要控制住膨胀后的图没有超过边界即可。

    初始化:B0=种子点

    循环膨胀: Do: Bi+1 = (Bi ⊕ S) ∩ Ac; Until Bi+1 = B

    使用S对图像B0进行膨胀,如果膨胀后的图超过了边界,则与图像A的补集A做与运算,把膨胀后的图限制在图像A内部。随着B的膨胀,B的区域不断的增长,但是每次增长后的图像都被限制在图像A的内部,所以最终必定填充满图像A,此时停止生长。

    a)原始图像

    b)读取图像A以及补集Ac

    imgPath = 'E:opencv_picsrc_picpic1-1.bmp';
    img1 = imread(imgPath); % 前景图
    img0 = 255-img1; % 取反景图
    subplot(1,2,1),imshow(img1),title('原始图像');
    subplot(1,2,2),imshow(img0),title('补集图像');

     c)图像膨胀

    figure;
    [m,n]= size(img0);
    B0 = zeros(m,n);
    B0(50, 150) = 1;
    se = [0 1 0;1 1 1;0 1 0];
    B1=imdilate(B0, se) & img1;
    B2=imdilate(B1, se) & img1;
    subplot(1,3,1),imshow(B0),title('结构元素se');
    subplot(1,3,2),imshow(B1),title('腐蚀B1');
    subplot(1,3,3),imshow(B2),title('腐蚀B2');

    放大后观察,B0是单个像素点,B1是3*3十字元素,B2是5*5十字元素。

    d)循环膨胀、填充区域增长

    figure;
    while 1
        imshow(B2);
        if B1 == B2
            break;
        else
            B1 = B2;
            B2=imdilate(B1,se) & img1;
        end
    end

    图像增长过程如下图。

     填充过程如下图,先从B0开始膨胀,循环膨胀图像不断生长,当图像超出边界后与背景图像(补集)相交限制图像的边界。直到图像无法再生长,图像完成内部区域填充。

     上面的动图选的起点种子元素在图像区域外部,白色区域,所以填充过程白色区域膨胀然后只保留了图像的内部区域为黑色。如果起始点种子元素在区域内部,则白色块膨胀被图像的边界限制无法突破边界,最终白色点越来越多,直至完成区域填充。

    3、参考文献

    1、《数字图像处理与机器视觉》,张铮、徐超、任淑霞、韩海玲编著

    尊重原创技术文章,转载请注明。

    https://www.cnblogs.com/pingwen/p/12245857.html

  • 相关阅读:
    仿造email后缀自动添加功能(1)
    仿造email后缀搜索功能(2)
    取出input内的空格
    小知识点
    关于闭包
    js清除浏览器缓存的几种方法
    动态生成模板(模板生成器)
    安卓端调用h5界面js方法和ios端调用h5界面js方法
    linux 命令
    如何做个好员工
  • 原文地址:https://www.cnblogs.com/pingwen/p/12245857.html
Copyright © 2011-2022 走看看