【提示牌标记】matlab基于Hough变换的道路提示牌检测标记系统【源码94期】

本文介绍了如何使用MATLAB中的Hough变换进行道路提示牌的检测,包括边缘检测、矩形和圆形检测步骤,以及提供了一个简单的源码示例。MATLABR2019a版本被用于演示该过程。
摘要由CSDN通过智能技术生成

一、简介

matlab基于Hough变换的道路提示牌检测标记系统,Hough变换是一种在计算机视觉和图像处理中广泛使用的技术,主要用于识别图像中的简单形状,如直线和圆。在道路提示牌检测中,Hough变换具有重要意义,因为它能够有效地从复杂的背景中识别并提取出道路提示牌的轮廓。

二、部分源码

%基于霍夫变换的道路交通牌识别
close all;
clear all;
clc;
f=rgb2gray(imread('t6.jpg'));
%edge
f2 = edge(f,'canny',0.2);%边缘检测,canny算子
figure;
imshow(f2);
SE = strel('square',1);%设置结构元素
f2 = imdilate(f2,SE);%膨胀
f2 = imfill(f2,'holes');%填补空洞
SE = strel('square',20);%设置结构元素
f2 = imerode(f2,SE);%腐蚀
f2 = imdilate(f2,SE);%膨胀
f2 = edge(f2,'canny');%边缘检测,canny算子
figure;
imshow(f2);

%设置矩形检测参数
thresh_rec = 0.2;%矩形平行边差异值,取值0-1之间
thresh_MaxNum = 10;%平行边检测最大数量,至少为2,MaxNum越大能检测的矩形越多
distance_point = 30;%判断相近点距离阈值,顶点距离低于distance_point的两个矩形会被视为同一个矩形

%检测矩形
[point_rec,rectangleBoxs] = hough_rectangle(f2,thresh_rec,thresh_MaxNum,distance_point);

%设置圆形检测参数
Step_r = 0.5;%检测圆半径步长
Step_angle = 0.1;%角度步长,单位为弧度
minr = 30;%最小圆半径
maxr =100;%最大圆半径
thresh_cir = 0.6;%以thresh*hough_space的最大值为阈值,取值0-1之间

[Hough_circle_result,Para] = Hough_circle(f2,Step_r,Step_angle,minr,maxr,thresh_cir);
circleParaXYR = Para;%y,x,r
% figure; 
% imshow(Hough_circle_result);

%清除矩形内的圆
for i = size(circleParaXYR):-1:1
    for k = 1:size(rectangleBoxs)
        if (circleParaXYR(i,2) > rectangleBoxs(k,1)) && ((circleParaXYR(i,2)-rectangleBoxs(k,1)) < rectangleBoxs(k,3)) && (circleParaXYR(i,1) > rectangleBoxs(k,2)) && ((circleParaXYR(i,1)-rectangleBoxs(k,2)) < rectangleBoxs(k,4))
            circleParaXYR(i,:) = [];
            break;
        end
    end
end

figure; 
imshow(f);
hold on
%绘制矩形,以下两种方法选一种
for i = 1:size(rectangleBoxs)
    %绘制矩形,适用水平矩形,线段不贴合检测出的图形,线段为重绘的矩形框
    rectangleBox = [rectangleBoxs(i,1)-3,rectangleBoxs(i,2)-3,rectangleBoxs(i,3)+6,rectangleBoxs(i,4)+6];
    rectangle('Position',rectangleBox,'LineWidth',2,'EdgeColor','r') ;
    
    %绘制四边形,适用于非水平矩形,线段贴合检测出的图形
%     x = [point_rec(i,1),point_rec(i,2),point_rec(i,3),point_rec(i,4),point_rec(i,5)];
%     y = [point_rec(i,6),point_rec(i,7),point_rec(i,8),point_rec(i,9),point_rec(i,10)];
%     plot(x,y, 'LineWidth', 1, 'Color', 'r');
end
%绘制圆形
%plot(circleParaXYR(:,2), circleParaXYR(:,1), 'r+');%绘制圆心
for k = 1:size(circleParaXYR, 1) 
    t=0:0.01*pi:2*pi;
    x=cos(t).*circleParaXYR(k,3)+circleParaXYR(k,2);
    y=sin(t).*circleParaXYR(k,3)+circleParaXYR(k,1);
    plot(x,y,'r-');
end 

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值