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

  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7141779.html
Copyright © 2011-2022 走看看