zoukankan      html  css  js  c++  java
  • Matlab得到二值图像中最大连通区域

    有时候要将二值化图像中最大的连通域保存下来。以下函数提供了一种方法:

    %function [img]=maxLianTongYu(I):求图像中最大的连通域
    %输入:I    输入图像
    %输出:img  仅包括最大连通域的图像 
    function [img]=maxLianTongYu(I)
    if length(size(I))>2
        I = rgb2gray(I);
    end
    if ~islogical(I)
        imBw = im2bw(I);                        %转换为二值化图像
    else
        imBw = I;
    end
    imBw = im2bw(I);                        %转换为二值化图像
    imLabel = bwlabel(imBw);                %对各连通域进行标记
    stats = regionprops(imLabel,'Area');    %求各连通域的大小
    area = cat(1,stats.Area);
    index = find(area == max(area));        %求最大连通域的索引
    img = ismember(imLabel,index);          %获取最大连通域图像

    原图:


    执行:

    <pre name="code" class="plain">img=maxLianTongYu(I);
    imshow(img);
    </pre>

    得到:



    假设返回图像中连通域大小大于阈值的连通域。可用matlab自带函数:BW2 = bwareaopen(BW, P)

    或:

    %function [img]=chooseLianTongYu(I,thres):  返回图像中连通域大小大于阈值的连通域
    %输入:I    输入图像   thres   阈值
    %输出:img  图像中连通域大小大于阈值的连通域 
    function [img]=chooseLianTongYu(I,thres)
    if length(size(I))>2
        I = rgb2gray(I);
    end
    if ~islogical(I)
        imBw = im2bw(I);                        %转换为二值化图像
    else
        imBw = I;
    end
    imLabel = bwlabel(imBw);                %对各连通域进行标记
    stats = regionprops(imLabel,'Area');    %求各连通域的大小
    area = cat(1,stats.Area);               
    index = find(area > thres);             %求连通域大小大于阈值的索引
    img = ismember(imLabel,index(:));        %获取指定连通域

  • 相关阅读:
    保留字段数组,一定要用char
    VirtualBox安装CentOS 7及其相关配置
    istringstream是支持>>一个bool的,但为什么不用?
    用vector实现一个变长数组
    C语言为什么被const声明的变量不是一个常量表达式
    不咬文嚼字的理由
    int变量赋值给char变量的本质
    #include <> 和 #include "" 的区别
    C++中匿名对象应当是一个左值
    js实战之-间断文字滑动
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7141779.html
Copyright © 2011-2022 走看看