图像分割+连通域统计与标注——MATLAB

本文介绍如何使用MATLAB进行图像分割及连通域统计标注的方法,包括光斑图像分割计数和石英玻璃微通道图像分割提取中心线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像分割+连通域统计与标注

例一

如图,对下列光斑图像进行分割,将光斑目标分割出来,并计算光斑数量。
这里写图片描述

图像分割

先将图像二值化,然后做形态学处理获得目标所在区域,然后分割图像。

MATLAB代码:

%框选统计光斑
clear;
%读取原图像
img=imread('01.png'); 
grayimg = rgb2gray(img);
BWimg = grayimg;
[width,height]=size(grayimg);

%二值化
T1=40;
for i=1:width
    for j=1:height
        if(grayimg(i,j)<T1)
            BWimg(i,j)= 255;
        else 
            BWimg(i,j)= 0;
        end
    end
end
%先闭运算 再开运算
se=strel('disk',5);
BWimg = imclose(BWimg,se);
BWimg = imopen(BWimg,se);

%分割出连通域内的图像
showImg = grayimg;
for i=1:width
    for j=1:height
        if(BWimg(i,j) == 255)
            showImg(i,j)= grayimg(i,j);
        else 
            showImg(i,j)= 0;
        end
    end
end


subplot(2,1,1);
imshow(BWimg);
subplot(2,1,2);
imshow(showImg);

输出:
这里写图片描述

连通域统计标注

先将图像二值化,然后做形态学处理,最后使用外接矩形框选连通域,并使用形心确定连通域位置。

MATLAB代码:

%框选统计光斑
clear;
img=imread('01.png'); %读取原图像
grayimg = rgb2gray(img);
BWimg = grayimg;
[width,height]=size(grayimg);

%二值化
T1=40;
for i=1:width
    for j=1:height
        if(grayimg(i,j)<T1)
            BWimg(i,j)= 255;
        else 
            BWimg(i,j)= 0;
        end
    end
end

%先闭运算 再开运算
se=strel('disk',5);
BWimg = imclose(BWimg,se);
BWimg = imopen(BWimg,se);

%统计标注连通域
%使用外接矩形框选连通域,并使用形心确定连通域位置
[l,m] = bwlabel(BWimg);
status=regionprops(l,'BoundingBox');
centroid = regionprops(l,'Centroid');
imshow(grayimg);hold on;
for i=1:m
    rectangle('position',status(i).BoundingBox,'edgecolor','r');
    text(centroid(i,1).Centroid(1,1)-15,centroid(i,1).Centroid(1,2)-15, num2str(i),'Color', 'r') 
end 

输出:
这里写图片描述

例二

如图,编程实现石英玻璃微通道图像的分割,将微通道从背景中分割出来,分割后,提取每个通道的中心线。
这里写图片描述

先将图像二值化,然后做形态学处理,再使用外接矩形框选连通域,并使用形心确定连通域的中心线位置。

MATLAB代码:

% 分离
clear;
img=imread('00.png');
grayimg = rgb2gray(img);
BWimg = grayimg;
[width,height]=size(grayimg);

%二值化
T1=230;
for i=1:width
    for j=1:height
        if(grayimg(i,j) > T1)
            BWimg(i,j)= 255;
        else 
            BWimg(i,j)= 0;
        end
    end
end

se=strel('disk',8);
BWimg = imclose(BWimg,se);
se=strel('disk',5);
BWimg = imopen(BWimg,se);

showImg = grayimg;
for i=1:width
    for j=1:height
        if(BWimg(i,j) == 255)
            showImg(i,j)= grayimg(i,j);
        else 
            showImg(i,j)= 0;
        end
    end
end

%分离出目标区域
T1=250;
for i=1:width
    for j=1:height
        if(showImg(i,j) > T1)
            BWimg(i,j)= 255;
        else 
            BWimg(i,j)= 0;
        end
    end
end

%先开操作,再做特定方向的腐蚀与膨胀
se=strel('disk',5);
BWimg = imopen(BWimg,se);
se= strel('line',9,90);
BWimg = imdilate(BWimg,se);

se= strel('line',5,0);
BWimg = imerode(BWimg,se);

%使用外接矩形框选连通域,并使用形心确定连通域的中心线位置
[l,m] = bwlabel(BWimg);
status=regionprops(l,'BoundingBox');
centroid = regionprops(l,'Centroid');

imshow(grayimg);
hold on;
for i=1:m
    rectangle('position',status(i).BoundingBox,'edgecolor','b', 'LineWidth',2.5);
    line([centroid(i,1).Centroid(1,1), centroid(i,1).Centroid(1,1)],[centroid(i,1).Centroid(1,2)-35, centroid(i,1).Centroid(1,2)+35],'Color','r', 'LineWidth',2);
    text(centroid(i,1).Centroid(1,1),centroid(i,1).Centroid(1,2), num2str(i),'Color', 'g');
end 

%分割目标区域
% subplot(2,1,1);imshow(showImg);
% subplot(2,1,2);imshow(BWimg);

输出:

在这里插入图片描述

目标区域:
这里写图片描述

### 使用 `regionprops` 进行图像分割 #### 函概述 `regionprops` 是 MATLAB 中的一个强大工具,专门用于计算和分析二值图像中标注矩阵中连通区域的各种属性[^2]。 #### 基本语法 基本调用方式如下: ```matlab stats = regionprops(BW, properties); ``` 其中: - `BW` 表示二值图像或标注矩阵; - `properties` 可以为字符串组、字符向量元胞组或 `'all'` 来获取所有可用属性;返回的结果存储在结构体组 `stats` 中。 #### 实际应用案例 下面展示了一个完整的例子来说明如何利用 `regionprops` 完成简单的图像分割任务并提取特定特征: 假设有一个名为 `coins.png` 的硬币图片文件,目标是从这张照片里分离出各个独立的圆形物体,并测量它们的一些几何特性如面积大小、周长长度等。 ```matlab % 加载原始灰度图像 I = imread('coins.png'); % 转换成二值化图像 bw = imbinarize(I); % 对二值图像填充孔洞以确保每个硬币形成封闭轮廓 filled_bw = imfill(bw,'holes'); % 应用形态学操作去除噪声点 cleaned_bw = bwareaopen(filled_bw, 30); % 移除小于30像素的小斑块 % 计算连通域(即单个硬币)的相关性质 measurements = regionprops(cleaned_bw, 'Area', 'Perimeter', ... 'Centroid', 'Eccentricity'); % 显示原图及其上标记出来的中心位置 imshow(label2rgb(labeledImage)); hold on; for k=1:length(measurements) plot(measurements(k).Centroid(1), measurements(k).Centroid(2), 'r*'); end title('Detected Coins with Centroids Marked') hold off; % 输出部分统计信息到命令窗 disp([num2cell({measurements.Area}), num2cell({measurements.Perimeter})]); ``` 此段代码首先读取了一张包含多个重叠圆盘状物品的照片作为输入据源。接着通过一系列预处理步骤得到干净整洁的目标物掩码表示形式——即只保留感兴趣的对象而不含任何干扰因素的理想状态下的黑白位图。最后借助 `regionprops()` 方法深入挖掘这些被识别出来实体背后隐藏着哪些有趣的量化指标。 #### 提取更多高级属性 除了上述提到的基础参外,还可以进一步探索其他类型的描述符,比如形状因子 Shape Factors: - **Solidity**: 描述对象紧凑程度的比例关系。 - **Orientation**: 给定椭圆拟合后的倾斜角度方向。 - **MajorAxisLength 和 MinorAxisLength**: 主轴次轴长短径尺寸。 为了访问此类复杂选项,在调用时只需简单修改请求项列表即可实现定制化的查询需求。 ---
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值