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

  • 相关阅读:
    Container With Most Water 容器最大水容量
    socket阻塞IO流程图
    python模块time,random,os
    python生成器表达式yield,面向过程编程,部分内置函数
    python装饰器作业
    Python函数闭包装饰器
    Python函数参数,名称空间与作用域
    Linux基础3
    Linux基础2
    linux基础1
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7141779.html
Copyright © 2011-2022 走看看