• 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(:));        %获取指定连通域

  • 相关阅读:
    2019-9-2-一个好的程序员
    2019-9-2-一个好的程序员
    2018-2-13-wpf-GifBitmapDecoder-解析-gif-格式
    2018-2-13-wpf-GifBitmapDecoder-解析-gif-格式
    2019-5-31-SharpDx-进入全屏模式
    2019-5-31-SharpDx-进入全屏模式
    2019-8-31-dotnet-删除只读文件
    2019-8-31-dotnet-删除只读文件
    PHP mysqli_real_connect() 函数
    PHP mysqli_query() 函数
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7141779.html
Copyright © 2020-2023  润新知