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

如何使用Matlab工具定位图像中每个可见圆形的圆心位置

Matlab自动提取图像中圆形圆心的实现方法

待处理图像

你可以按以下步骤完成「先追踪圆形边界、再计算圆心坐标」的需求,直接复用代码调整参数即可:

1. 图像预处理

首先对原图做去噪、二值化处理,过滤无关干扰,方便后续边界识别:

% 读取本地图像
I = imread('uDDFz.jpg');
% 彩色图转灰度图
I_gray = rgb2gray(I);
% 高斯滤波去噪,避免噪点被识别为边界
I_blur = imgaussfilt(I_gray, 1.5);
% 自适应二值化,适配明暗不均的图像
I_bw = imbinarize(I_blur, 'adaptive', 'ForegroundPolarity', 'dark', 'Sensitivity', 0.4);
% 填充区域孔洞,移除面积小于80的噪点
I_bw = imfill(I_bw, 'holes');
I_bw = bwareaopen(I_bw, 80);

2. 圆形边界识别与圆心计算

提供两种实现方案,你可以按需选择:

方案A:霍夫圆变换(直接识别圆形)

调用Matlab内置函数直接检出所有圆形,同时返回圆心坐标、半径:

% 调整半径搜索范围,单位为像素,可根据实际圆形大小修改
radius_range = [10, 120];
% 灵敏度参数越高,越容易识别边缘模糊的圆形,可在0-1之间调整
[centers, radii] = imfindcircles(I_bw, radius_range, 'Sensitivity', 0.8, 'EdgeThreshold', 0.2);

返回的centers变量即为所有圆形的圆心坐标,每一行对应一个圆形的[x, y]像素坐标。

方案B:先追踪边界再计算形心

完全匹配你要求的「先追边界、再算圆心」逻辑:

% 提取所有连通区域的边界、形心、面积、周长属性
stats = regionprops(I_bw, 'Centroid', 'Perimeter', 'Area', 'Boundary');
% 按圆形度筛选区域:规则圆形的圆形度≈1,阈值可调整
circularity = (stats.Perimeter.^2) ./ (4 * pi * stats.Area);
valid_circle_idx = circularity < 1.2;
% 提取有效圆形的圆心坐标
centers = [stats(valid_circle_idx).Centroid];
centers = reshape(centers, 2, [])';

3. 结果验证

可以将识别到的圆心、边界绘制在原图上,校验准确性:

figure
imshow(I)
hold on
% 绘制圆心,红色十字标记
plot(centers(:,1), centers(:,2), 'r+', 'MarkerSize', 12, 'LineWidth', 2)
% 绘制圆形轮廓,蓝色
viscircles(centers, radii, 'Color','b') % 使用方案A时直接用返回的radii即可,方案B可自行通过区域面积计算半径
hold off

提示:如果存在漏检、误检的情况,调整代码里的二值化灵敏度、圆形度阈值、半径搜索范围即可适配你的图像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03