matlab 连通域数量,【Matlab】找到矩阵中每个连通域的最小值

【Matlab】找到矩阵中每个连通域的最小值

【Matlab】找到矩阵中每个连通域的最小值

5fe0fa003e0ba9802cf4ffc959e2667d.gif

连通域在我浅薄的图像处理知识中,一直是很神圣的存在。最近想在Matlab里实现的时候,发现竟然一个函数就解决了,Matlab真香!

eaa58c778916f530ab6f60d6b2f9383d.png

首先,还是介绍一下主角函数 bwlabel,看语法还是比较简单的,其中第二个参数 conn 可以设置判断连通域时用4连接还是8连接。另外,这种既可以输入一个参数,又可以输入两个参数的函数实现,可以看我之前的博客,文末有链接~

914fba4e1783143f330445f43920c5b8.png

ok,那接下来就实际试试吧:

a = xlsread('dataset.xlsx');

b = bwlabel(a,4);

e534d74f5d2d1618043a52caba28095f.png

这里我们选的是4联通,如果改成8联通的话,标签就只剩0和1了,因为8联通的条件更严格,也更难判定其为连通域。具体原理看下图:

933292bbc3d2b068b9596d0bd6939ada.png

目前为止,我们找到了矩阵中的连通域,那么接下来就要寻找各个连通域中的最小值了。代码如下:

data = xlsread('dataset.xlsx');

dataLabel = bwlabel(data,4);

dataLabelType = unique(dataLabel);

labelNum = size(dataLabelType,1)-1; % Obtain the number of label type.

minData = ones(labelNum,1); % Initializing the minimum element in matrix.

minDataRow = zeros(labelNum,1); % Initializing the row index of minimum element in each label.

minDataCol = zeros(labelNum,1); % Initializing the column index of minimum element in each label.

for i = 1:labelNum

dataInSpecialLabel = data(dataLabel==i); % Obtain all the elements of special label (Continuously increasin).

minData(i,1) = min(dataInSpecialLabel); % Obtain the minimum one.

[minDataRow(i,1),minDataCol(i,1)] = find(data == minData(i,1)); % Record the row and column index of the minimum one.

end

代码中的 unique 函数是确定数组中都存在哪些数,具体用法看文末链接。

运行代码,看看结果:

2162c8e46ba55c4bed6f55424e8c121f.png

结果如上图所示,代码输出了每个连通域最小值所处的行列坐标,代码功能也便实现了。

其实我一直喜欢代码开源,因为之前看了很多博客,有的是讲原理没代码,有的放代码没注释,甚至运行直接报错。所以我就想,直接把代码贴出来,再配一些解释说明,方便大家使用,也希望不要再反复造轮子了。

但是,我写代码是我想写,而不是我要写。一些代码封装的像艺术品,有的人都不会用,真白瞎我代码了。

猜你喜欢:????

?【Matlab】函数输入个数不定怎么办?

?【Matlab】如何确定数组中存在哪几个数?

【Matlab】找到矩阵中每个连通域的最小值相关教程

稀疏矩阵的乘法运算

稀疏矩阵的乘法运算 稀疏矩阵的乘法运算 题目信息 输入 输出 测试样例 解答 想法 题目信息 数据压缩是提高传输、存储效率一种技术。 本实验要求实现两个稀疏矩阵相乘积的算法。其中稀疏矩阵非零元素数量小于100. 第1个稀疏矩阵的行数,列数,非零元个数(三个数

python matplotlib绘图、混淆矩阵 汉字字体、数字、英文字母的设

python matplotlib绘图、混淆矩阵 汉字字体、数字、英文字母的设置 最近在写一篇文章的时候,文章对图片格式有要求:图中汉字用宋体六号、数字和英文字母用新罗马字体,这些都需要在一张图中表现出来。经过一番查找摸索,现归纳整理如下: 对坐标轴设置 现假

【Matlab】—{最小二乘法拟合一阶线性拟合传感器实验}

【Matlab】—{最小二乘法拟合一阶线性拟合传感器实验} ???九层妖塔?起于垒土 【Matlab】—{最小二乘法拟合一阶线性拟合传感器实验} 一、代码 二、数据处理结果 三、Notes 一、代码 %电容传感器位移实验数据 最小二乘法一阶线性拟合x = [13.080,12.580,12.080,

【Matlab】怎么实现数据归一化与标准化?

【Matlab】怎么实现数据归一化与标准化? 前段时间,突然发现,做了一年的机器学习,居然没有对特征归一化,不过从结果看好像问题不大,从原理上看嘛,我们另开一篇博客单讲。所以这篇文章就讲讲数据归一化和标准化的区别及其实现方式。 关于 归一化 和 标准

矩阵的快速转置算法

矩阵的快速转置算法 矩阵的快速转置算法 题目信息 输入 输出 测试样例 解答 补充 题目信息 数据压缩是提高传输、存储效率一种技术。本实验要求实现三元组顺序表表示下的矩阵快速转置算法。 稀疏矩阵的行数、列数、非零元个数(三个数都大于0) 以行为主序输入稀

MATLAB【十四】————调用深度库生成exe,批量运行三层文件夹

MATLAB【十四】————调用深度库生成exe,批量运行三层文件夹下图片,保存结果 运行路径:D:\matlab\cmd_batch_processing 文件夹架构: clear;clc;close all; %% crop the im into 256*256 oriDataPath = 'D:\matlab\cmd_batch_processing\data\'; targetP

MATLAB18.04安装过程

MATLAB18.04安装过程 参考了以下博客 https://blog.csdn.net/Eric2016_Lv/article/details/52653915?locationNum=6#reply 应该是下面这个,上面那个不太对。 https://blog.csdn.net/u014577061/article/details/79408337 以下是我安装过程的心得: 安装的时候

【啃书】《智能优化算法及其MATLAB实例》例8.2禁忌搜索算法进行

【啃书】《智能优化算法及其MATLAB实例》例8.2禁忌搜索算法进行函数寻优 文章目录 问题描述 仿真过程 matlab源码 问题描述 仿真过程 matlab源码 %该脚本应命名为func2.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%适配值函数%%%%%%%%%%%%%%%%%%%%%%%%function y=func2(x)y=