精华内容
下载资源
问答
  • 连通分量提取
    2021-05-07 09:04:25

    FindConnectedPoint函数如下:

    function R=FindConnectedPoint(p,Beta_pad,ind,n_l)

    %保存边界坐标对象

    Obj=[];

    %以p为中心点,从边界图中取出3*3大小的块区域

    Block=Beta_pad(p(1,1)-n_l:p(1,1)+n_l,p(1,2)-n_l:p(1,2)+n_l);

    Obj=p;

    %将图像中的p点置零

    Beta_pad(p(1,1),p(1,2))=0;

    %将块区域中的p点置零

    Block(n_l+1,n_l+1)=0;

    A=cell(1,3);

    %将p点从下标矩阵中删除

    for j=1:size(ind,1)

    if ind(j,:)==p

    ind(j,:)=[];

    break;

    end

    end

    %寻找块区域中为1的点的下标

    [rows,cols]=find(Block==1);

    ind_sub=cat(2,rows,cols);

    if ~isempty(ind_sub)

    %确定块中数值为1的点的坐标

    for i=1:size(ind_sub,1)

    p_next=[];

    if ind_sub(i,1)<=n_l+1

    p_next(1,1)=p(1,1)-abs(n_l+1-ind_sub(i,1));

    if ind_sub(i,2)<=n_l+1

    p_next(1,2)=p(1,2)-abs(n_l+1-ind_sub(i,2));

    else

    p_next(1,2)=p(1,2)+abs(n_l+1-ind_sub(i,2));

    end

    else

    p_next(1,1)=p(1,1)+abs(n_l+1-ind_sub(i,1));

    if ind_sub(i,2)<=n_l+1

    p_next(1,2)=p(1,2)-abs(n_l+1-ind_sub(i,2));

    else

    p_next(1,2)=p(1,2)+abs(n_l+1-ind_sub(i,2));

    end

    end

    if Beta_pad(p_next(1,1),p_next(1,2))~=0

    A=FindConnectedPoint(p_next,Beta_pad,ind,n_l);

    Obj=cat(1,A{1,1},Obj);

    end

    %更新下标矩阵

    ind=A{1,2};

    Beta_pad=A{1,3};

    end

    end

    %返回结果

    R={Obj,ind,Beta_pad};

    end

    版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved.

    京ICP备09083238号

    更多相关内容
  • 形态学图像处理之连通分量提取

    千次阅读 2019-09-01 17:11:33
    提取连通分量的过程实际上也是标注连通分量的过程,通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号,在输出图像中该连通区内的所有的像素值就赋值为该区域的编号,我们将这样的输出图像称为标注...

    基本概念

            提取连通分量的过程实际上也是标注连通分量的过程,通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号,在输出图像中该连通区内的所有的像素值就赋值为该区域的编号,我们将这样的输出图像称为标注图像。这里介绍一种基于形态学的膨胀操作的提取连通分量的方法。
    在这里插入图片描述
            以8连通的情况为例,对于图(a)的内含多个连通分量的图像A,从仅为连通分量A1内部某个的图像B开始,不断采用如图©所示的结构S进行膨胀。由于其他连通分量与A1之间至少有一条一像素宽的空白缝隙(如图(a)中的虚线),3*3的结构元素保证了只要B在区域A1内部,则每次膨胀都不会产生位于图像A中其他连通区域之内的点,这样只需用每次膨胀后的结构图像和原始图像A相交,就能把膨胀限制在A1内部。随着对B的不断膨胀,B的区域不断生长,但每次膨胀后与图像A的相交又将B限制在连通分量A1地内部,直到最终B充满整个连通分量A1,对连通分量A1地提取完毕。
    在这里插入图片描述

    示例演示

            我们用OpenCV实现连通分量提取函数,然后进行细菌计数。完整工程代码。

    /*
     *only process binary image
     *iseight = true means eight connected, otherwise four connected
    */
    int LabelConnectedComponent(const cv::Mat &src, cv::Mat &dst, bool iseight = true)
    {
        Mat structelement;
        if(iseight)
            structelement = getStructuringElement(MORPH_RECT, Size(3, 3));
        else
             structelement = getStructuringElement(MORPH_CROSS, Size(3, 3));
    
        dst = Mat::ones(src.size(), src.type());
        Mat tmp = Mat::ones(src.size(), src.type()); // save last reuslt image
        Mat img = Mat::ones(src.size(), src.type()); //image B
        int labelnum = 0; //label of connected component
    
        Mat backupsrc;
        src.copyTo(backupsrc);
        for(int i = 0; i < backupsrc.rows; i++)
        {
            for(int j = 0; j < backupsrc.cols; j++)
            {
                if(backupsrc.at<uchar>(i, j) == 255)
                {
                    Mat img = Mat::ones(src.size(), src.type());
                    img.at<uchar>(i, j) = 255;
                    img.copyTo(tmp);  //Temporary save
                    labelnum++;
    
                    while(true)  // until not change
                    {
                        cv::dilate(img, img, structelement);
                        bitwise_and(img, src, img);
                        //if img do not change, this connected component is finished
                        if (cv::countNonZero(img - tmp) == 0)
                            break;
                        img.copyTo(tmp);
                    }
    
    
                    //label the connected component
                    for(int r = 0; r < img.rows; r++)
                    {
                        for(int c = 0; c < img.cols; c++)
                        {
                            if(img.at<uchar>(r, c) == 255)
                            {
                                backupsrc.at<uchar>(r, c) = 0;
                                dst.at<uchar>(r, c) = labelnum;
                            }
                        }
                    }
                }
            }
        }
        return labelnum;
    }
    

            先对原始图像进行膨胀
    在这里插入图片描述
            然后进行细菌统计,实际的细菌个数为21。
    在这里插入图片描述

    展开全文
  • 提取连通分量的过程实际上也是标注连通分量的过程,通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号,在输出图像中该连通区内的所有的像素值就赋值为该区域的编号,我们将这样的输出图像称为标注...

    基本概念

    提取连通分量的过程实际上也是标注连通分量的过程,通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号,在输出图像中该连通区内的所有的像素值就赋值为该区域的编号,我们将这样的输出图像称为标注图像。这里介绍一种基于形态学的膨胀操作的提取连通分量的方法。

    在这里插入图片描述
    以8连通的情况为例,对于图(a)的内含多个连通分量的图像A,从仅为连通分量A1内部某个的图像B开始,不断采用如图©所示的结构S进行膨胀。由于其他连通分量与A1之间至少有一条一像素宽的空白缝隙(如图(a)中的虚线),3*3的结构元素保证了只要B在区域A1内部,则每次膨胀都不会产生位于图像A中其他连通区域之内的点,这样只需用每次膨胀后的结构图像和原始图像A相交,就能把膨胀限制在A1内部。随着对B的不断膨胀,B的区域不断生长,但每次膨胀后与图像A的相交又将B限制在连通分量A1的内部,直到最终B充满整个连通分量A1,对连通分量A1地提取完毕。 (注意本段加粗的部分,这也是称之为“受限制的膨胀算法”的原因。)

    展开全文
  • 为了满足棒材计数在工业生产的实际应用需求,提出了一种基于提取连通分量的算法,以实现目标棒材计数区域的自动定位,并对定位的区域采用提取连通分量算法实现对轮廓的标注,最后提出了一种区域轮廓周长的校正方法,...
  • 形态学之连通分量提取

    千次阅读 2018-10-06 20:34:45
    提取公式:Xk=(Xk−1⊕B)∪Ak=1,2,3...X_k=(X_{k-1}\oplus B)\cup A\quad k=1,2,3...Xk​=(Xk−1​⊕B)∪Ak=1,2,3... 上述公式与形态学之孔洞填充公式只差一个A补集。实际上他们用的element B也不一样。 如上图,X0...

    提取公式: X k = ( X k − 1 ⊕ B ) ∪ A k = 1 , 2 , 3... X_k=(X_{k-1}\oplus B)\cup A\quad k=1,2,3... Xk=(Xk1B)Ak=1,2,3...
    上述公式与形态学之孔洞填充公式只差一个A补集。实际上他们用的element B也不一样。
    在这里插入图片描述
    如上图, X 0 X_0 X0为全黑图,其中连通部分的一点为白,然后用8连通element对其进行膨胀,这样肯定会过界,于是用A与其取交对其进行限制,这样膨胀图就不会过界。一直迭代就会得到整个连通的部分。

    作用:有时候我们肉眼看似连通的图,实际上可能在哪里存在很多一个像素的小间隔,这时我们就需要用该算法对图片进行判断。

    问题:为什么不用四连通?
    因为四连通的element膨胀后不能将所有连通的像素包含进去。

    展开全文
  • 孔洞填充及连通分量提取

    千次阅读 2018-05-24 21:03:49
    (2) 实现连通分量提取并计算连通分量的个数及每个连通分量的像素数。二、 代码思路(1)孔洞填充:先选取十字形结构作为结构元;接着生成一个由0组成的阵列X,大小与二值图像A相同,随机选取A中一个灰度值为1...
  • 从二值图像中提取连通分量是自动图像分析的核心步骤。提取连通分量的过程也是对连通分量的标注,通常给图像中的每个连通区分配编号,在输出图像中该连通区内的所有的像素值赋值为对应的区域编号,这样的输出图像被...
  • 二值图像连通分量提取的matlab实现
  • 识别连通分量

    2017-08-25 16:24:48
    识别图片中的连通分量
  • 连通分量标记(也称为连通分量分析、斑点提取或区域标记)是图论的一种算法应用,用于确定二进制图像中“斑点”状区域的连通性。我们经常在与使用轮廓相同的情况下使用连通分量分析;然而,连通分量标记通常可以让...
  • 连通分量提取

    千次阅读 2017-02-28 22:34:53
    应用背景:在许多自动图像分析应用中,如何识别出图像中的不同之处,往往是从其二值图像中提取连通分量连通分量的定义:令S是一个像素子集,如果S中的全部像素之间存在一个通路(m通路或8通路),则可以说两个...
  • - PAGE PAGE 3 欢迎下载 该算法主要是仿照c中利用先深搜索算法求图的连通分量的算法改写的 该算法假设有20个点1号和24号相连2号和3号相连5号和67号相连8号和9号相连其他点都是孤立点 结果图如下 代码如下 clear N_...
  • Matlab 连通分量处理, 二维和三维 (Matlab, Connected Component Process, 2D&3D)The code for your reference, which is used to remove the minor components:function Connect_Elimi = Connection_Judge_3D...
  • 进行膨胀操作时,将内核 B 划过图像,将内核B 覆盖区域的最大相素值提取,并代替锚点位置的相素。 void dilate( const Mat& src, Mat& dst, const Mat& element,Point anchor=Point(-1,-1), int iterations=1,int ...
  • 任务描述:根据像元的属性值将图像分为不同子区,效果图如下: 实现原理本质上就是bwlabel函数的重复使用,请看参考链接: Matlab中bwlabel函数的使用 bwlabel 但bwlabel函数有个问题是,他只区分0和1两种情况,举个...
  • 击中:击中其实是一种模板匹配,如果一个结构元(模板)与图像中的一个连通区域完全相等,那么腐蚀的结果将是一个点,这就算是“击中”了,因为找到了完全一致的模式(模式的含义去查一下吧,这里的模式和模式识别的...
  • 边界提取、区域填充、连通分量提取、MATLAB
  • 边界提取 孔洞填充 X0是一副全黑的图像,但在孔洞的地方有一个白点。 我们要对A图进行孔洞填充,首先求出A的补集作为备用,然后所用到的element B如上图。首先我们构建X0一幅全黑图像加上孔洞中的一点白作为...
  • Python:实现connected components连通分量算法(附完整源码)
  • Python算法教程:找出图的连通分量

    千次阅读 2019-08-23 00:41:15
    一个图结构的连通分量是能让它里面的所有节点彼此到达的最大子图。 def components(graph): component = [] seen = set() for u in graph: if u in seen: continue current = walk(graph, u) seen....
  • 定义:有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向...
  • Java编程实现深度优先遍历与连通分量代码示例发布时间:2020-10-04 19:53:46来源:脚本之家阅读:79作者:HeatDeath深度优先遍历深度优先遍历类似于一个人走迷宫:如图所示,从起点开始选择一条边走到下一个顶点,没...
  • 针对彩色印刷图像背景色彩丰富和汉字存在多个连通分量,连通域文字分割算法不能精确提取文字,提出基于汉字连通分量的彩色印刷图像版面分割方法。利用金字塔变换逆半调算法对图像进行预处理,通过颜色采样和均值偏移...
  • 数字图像处理利用形态学进行连通分量提取法程序
  •  开始正题,形态学基本操作:腐蚀和膨胀,进而演化出了开操作和闭操作,后来有演化出了一些其他操作,能够应用于各种不同的场景,比如最简单的边界提取,稍微复杂的孔洞填充,与空洞填充类似的连通分量提取,凸壳不...

空空如也

空空如也

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

连通分量提取