把硬币从背景分割出来

读入MATLAB自带图像coins.png,并做以下图像处理工作:

1.把硬币从背景分割出来;

2.得到图中硬币的中心坐标和半径,并绘制圆;

3.输出硬币的数量;

4.标记出圆心坐标位置并给出坐标值(要求取整)。

 

% 1. 读入图像并显示
img = imread('coins.png');
imshow(img);
title('Original Image');
% 2. 图像预处理以分割硬币
% 使用自适应阈值将图像转换为二进制格式
bw = imbinarize(img);
% 对二值图像进行形态学开操作去除小物体噪声
se = strel('disk', 5);
bw_clean = imopen(bw, se);
% 3. 查找硬币边界
[B,L] = bwboundaries(bw_clean, 'noholes');
% 4. 获取硬币的属性
stats = regionprops(L, 'Centroid', 'EquivDiameter');
% 显示分割后的图像
imshow(bw_clean);
hold on;
% 获取硬币数量
numCoins = numel(stats);
disp(['Number of coins: ', num2str(numCoins)]);
% 5. 绘制每个硬币的边界、圆心和圆周
for k = 1:numCoins
% 获取每个硬币的质心
centroid = stats(k).Centroid;
% 获取等效直径并计算半径
diameter = stats(k).EquivDiameter;
radius = diameter / 2;
% 绘制圆形
viscircles(centroid, radius, 'EdgeColor', 'b');
% 绘制并标记圆心
plot(centroid(1), centroid(2), 'r*');
text(centroid(1), centroid(2), sprintf('(%d, %d)', round(centroid(1)), round(centroid(2))),...
'Color', 'yellow', 'FontSize', 8, 'FontWeight', 'bold');
end
hold off;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值