读取图像:加载想要处理的图像。
图像预处理:将图像转换为灰度图像,并可能应用滤波器来平滑图像,以便更好地处理。
边缘检测:使用例如 Canny 边缘检测器来找到硬币的边界。
圆形检测:使用霍夫圆变换来识别图像中的圆形(即硬币)。
计数硬币:计算检测到的圆形数量。并将其显示在图片的左上角。
标注几何中心:用*标注了硬币的几何中心
代码:
originalImage = imread('D:\图像处理\image\硬币.jpg');
imshow(originalImage);
hold on; % 保持当前图像,以便在其上绘制。
title('Original Image');
% 转换为灰度图像
grayImage = rgb2gray(originalImage);
% 直方图均衡化
equalizedImage = histeq(grayImage);
% 边缘检测
edges = edge(equalizedImage, 'canny', [], 2); % 可以调整阈值和Sigma值
% 霍夫圆变换来识别圆形
[centers, radii] = imfindcircles(edges, [20 100], 'ObjectPolarity', 'bright', 'Sensitivity', 0.92); % 调整半径和敏感度
% 绘制检测到的硬币
viscircles(centers, radii);
% 绘制每个硬币的几何中心
plot(centers(:,1), centers(:,2), 'r*');
% 计数硬币
numberOfCoins = numel(radii);
disp(['硬币个数 : ', num2str(numberOfCoins)]);
% 在图像上显示计数结果
text(10, 10, ['硬币个数: ', num2str(numberOfCoins)], 'Color', 'black', 'FontSize', 10);
hold off; % 结束在同一图像上的绘制。
结果图: