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

如何提取图像中白色圆环以确定机器人中点?阈值法效果不佳

提取运动机器人图像中白色圆环的改进方案

针对你用单通道HSV阈值无法正确提取白色圆环的问题,推荐以下几种实用方法:

1. 多通道HSV联合阈值筛选

白色在HSV空间的特征是色相(H)接近0或1(环形色域)、饱和度(S)极低、明度(V)较高,仅用V通道阈值会误判其他高亮非白色区域。结合多通道阈值能精准锁定白色:

img = imread('data\Image13.jpg');
hsv = rgb2hsv(img);
% 拆分HSV通道
h = hsv(:,:,1);
s = hsv(:,:,2);
v = hsv(:,:,3);
% 构建白色区域掩码:H在0-0.1或0.9-1,S<0.2,V>0.7(阈值可根据图像微调)
h_mask = (h < 0.1) | (h > 0.9);
s_mask = s < 0.2;
v_mask = v > 0.7;
bin = h_mask & s_mask & v_mask;

2. 形态学处理修复运动模糊缺陷

运动状态下的图像易出现噪点、圆环断裂,用形态学开闭运算可清理噪点并补全圆环:

% 基于上面得到的bin结果
se = strel('disk', 3); % 圆盘结构元素,尺寸根据图像分辨率调整
% 开运算先去除小噪点,闭运算补全圆环缺口
bin_clean = imopen(bin, se);
bin_clean = imclose(bin_clean, se);

3. 霍夫圆变换直接检测圆环(推荐用于中点定位)

如果你的核心需求是确定机器人中点,霍夫圆变换可直接检测圆形目标,无需先提取完整圆环,对运动模糊的鲁棒性更强:

img = imread('data\Image13.jpg');
gray = rgb2gray(img);
% Canny边缘检测,调整阈值适配图像
edges = edge(gray, 'Canny', [0.1, 0.3]);
% 检测指定半径范围内的圆(根据实际圆环大小修改半径区间)
[centers, radii] = imfindcircles(edges, [20, 50]);
% 可视化验证检测结果
figure; imshow(img); hold on;
viscircles(centers, radii, 'Color', 'r');

检测得到的centers就是圆环的圆心,直接作为机器人中点即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32