You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中读取坐标文本文件并用于regionprops分析(如Centroid)

从坐标文件计算区域质心(MATLAB regionprops 正确用法)

我来帮你搞定这个问题~你当前的代码没法直接用regionprops,核心原因是这个函数是用来分析图像中的连通区域的,它的输入得是二值图像或者标注矩阵,不能直接传从文本读出来的原始坐标列表。下面一步步给你拆解解决方案:

1. 正确读取坐标文件

你的读取逻辑没问题,但需要把textscan返回的cell数组转换成标准的N×2坐标矩阵,方便后续处理:

filename = fullfile('E:/outline.txt');
fileID = fopen(filename);
% 读取所有(x,y)坐标对,得到两个列向量的cell容器
C = textscan(fileID,'%d %d');
fclose(fileID);
% 合并成N行2列的坐标矩阵,第一列存x坐标,第二列存y坐标
coords = [C{1}, C{2}];

2. 将坐标转换成二值图像

我们需要创建一个刚好能容纳所有坐标点的二值图像,把这些坐标点标记为前景(1),其余区域设为背景(0):

% 获取坐标的极值,确定图像的最小尺寸
min_x = min(coords(:,1));
max_x = max(coords(:,1));
min_y = min(coords(:,2));
max_y = max(coords(:,2));

% 创建空白二值图像(MATLAB图像索引从1开始,所以要做坐标偏移)
binary_img = false(max_y - min_y + 1, max_x - min_x + 1);

% 将原始坐标映射到图像的索引位置
img_x = coords(:,1) - min_x + 1;
img_y = coords(:,2) - min_y + 1;

% 把对应位置设为true(前景区域)
binary_img(sub2ind(size(binary_img), img_y, img_x)) = true;

3. 用regionprops计算质心

现在有了合法的二值图像输入,就可以正常调用regionprops了。注意这里得到的质心是相对于我们创建的小图像的,需要转换回原始坐标系统:

% 计算轮廓点构成区域的质心
stats = regionprops(binary_img, 'Centroid');

% 转换回原始坐标
original_centroid = [stats.Centroid(1) + min_x - 1, stats.Centroid(2) + min_y - 1];

disp('原始坐标下的轮廓质心:');
disp(original_centroid);

可选:计算实心区域的质心

如果你的坐标是闭合轮廓,想要计算实心区域的质心,可以先填充二值图像的孔洞:

% 填充二值图像的孔洞
binary_img_filled = imfill(binary_img, 'holes');

% 计算填充后区域的质心
stats_filled = regionprops(binary_img_filled, 'Centroid');
original_centroid_filled = [stats_filled.Centroid(1) + min_x - 1, stats_filled.Centroid(2) + min_y - 1];

disp('原始坐标下的实心区域质心:');
disp(original_centroid_filled);

这样就能得到你想要的质心结果啦~

内容的提问来源于stack exchange,提问作者jane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:26:28