基于HOUGH Transform(霍夫变换)的圆形目标的判别

一、引言

       在数字图像处理中,有时候除了目标尺寸不同外,还经常会出现不同形状(如圆形、方形、菱形等)的目标检测物,有时确定图像中的圆形或近圆形目标是十分有用的。霍夫变换(Hough Transform)‌是一种在图像处理中广泛使用的技术,主要用于检测图像中的直线、圆或其他简单形状。它的基本思想是通过将图像中的每个像素点映射到一个参数空间中,以检测特定形状的参数集。例如,对于直线检测,这些参数通常是斜率和截距。在参数空间中,来自相同形状的像素点会形成一个高峰,从而可以通过检测这些峰来确定形状的存在和位置。霍夫变换是检查圆形目标的常用方法之一,下面给出一个应用该方法进行圆形目标检测的实例。

二、程序代码

clear all;  % 清除所有变量
close all;  % 关闭所有图形窗口
clc;  %清屏
I=imread('PIC240922.jpg');%读入图像
imshow(I);
d=drawline;
pos = d.Position;
diffPos = diff(pos);
diameter = hypot(diffPos(1),diffPos(2))
% 使用霍夫变换检测圆形  
%[centers,radii] = imfindcircles(I,[60 100],'ObjectPolarity','dark')%默认Sensitivity为0.85
[centers,radii] = imfindcircles(I,[60 100],'ObjectPolarity','dark', 'Sensitivity',0.96);%Sensitivity值可根据检测需求进行调整
% 如果没有检测到圆形,centers和radii将是空数组  
if isempty(centers)  
    disp('No circles were detected.');  
else  
    % 显示检测到的圆形  
    figure; % 创建一个新的图形窗口  
    imshow(I); % 显示原始图像  
    hold on; % 保持当前图像,以便在其上绘制圆形  
    viscircles(centers, radii, 'EdgeColor', 'b'); % 在当前轴上绘制圆形  
    title('Detected Circles');  
    hold off; % 关闭保持状态  
 
    % 输出圆形中心和半径  
    fprintf('Detected %d circles with centers at:\n', size(centers, 1));  
    for k = 1:size(centers, 1)  
        fprintf('Center (%d): (%.2f, %.2f), Radius: %.2f\n', k, centers(k,1), centers(k,2), radii(k));  
    end  
end

三、原始图像

四、主要运行结果

       如果大家觉得本文对大家学习和研究有帮助,请关注、点赞和转发!感谢大家支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值