资源简介
基于HOUGH变换的车道线检测和识别的程序,可以使用
代码片段和文件信息
%****************************************************************************
%功能说明:该段程序实现了对采集图片的裁剪,可以提高计算速度;并可以检测图片中的直线,并将检测到的直线画于图片中
%需改进部分:实现车道线的跟踪,还有对弯曲车道线的拟合 对于道路上有障碍物、阴影时检测效果不好 还需改进
%欲达到在前一次检测出直线后,后续的直线检测都在该直线附近很小的范围内检索,以提高实时性
clc;
clear all;
close all;
for nn=1:2
aaa=[strcat(‘E:\DCIM\shipinchuli\shipinchuli1\‘)int2str(nn)‘.jpg‘];
%I=imread(strcat(‘E:\DCIM\shipinchuli\shipinchuli1\‘)int2str(i)‘ .jpg‘);
I=imread(aaa);
rs=size(I1);%行数
cs=size(I2);%列数
%ch=40;%由于固定值不使用,预改为图像的1/5处
%cw=40;
ch=0.2*rs;%取图像的下面4/5部分作为处理对象,因为上面部分对车道检测没用,故去掉,提高计算速度
cw=0.2*rs;
numr=round(rs/ch);
numc=round(cs/cw);
t1=(0:numr-1)*ch+1;
t2=(1:numr)*ch;
t3=(0:numc-1)*cw+1;
t4=(1:numc)*cw;
figure(1);
imshow(I);hold on;
for i=1:numr%画出网格线
for j=1:numc
x=t1(i):t2(i);
y=t3(j):t4(j);
rectangle(‘Position‘[t3(j) t1(i) length(x) length(y)]...
‘EdgeColor‘‘r‘‘LineWidth‘2);
end
end
I2=imcrop(I[0 ch ch*numc cw*numr]);%对图像分块后,将对研究不重要的块除掉,保留感兴趣区域,进行后续操作
if nn==2
I2=imcrop(I[lines(Index1).point1(1)-round((1/10)*cs) lines(Index1).point2(2) abs(lines(Index1).point2(1)-lines(Index1).point1(1))+2*round((1/10)*cs) abs(lines(Index1).point1(2)-lines(Index1).point2(2))]);
end
figure(2)imshow(I2)
%I2=rgb2gray(imread(‘E:\DCIM\shipinchuli\shipinchuli1\5.jpg‘));%读取视频中某一帧图像
I2=rgb2gray(I2);%对上面经过感兴趣区域提取后的图像进行直线检测
%********大津法计算阈值****************
%tt=graythresh(I2);%大津法计算阈值 效果不是很好 可以没有这两句 有待改进
%I2=im2bw(I2tt);
%***************************************************************
%I2=histeq(I2);%直方图均衡化 这里不需要
figure(3)
imhist(I2)%显示该幅图像的直方图
%I=rgb2gray(imread(‘E:\DCIM\100DICAM\DSCI0018.JPG‘));
I2=medfilt2(I2);%加入中值滤波
%I=filter2(fspecial(‘average‘3)I1)/255;%均值滤波
%I=wiener2(I2[5 5]);%自适应维纳滤波
rotI=imrotate(I20‘crop‘);%将图像旋转25度 旋转角度不同 检测效果不同
figure(4)
subplot(221)fig1=imshow(rotI);
BW=edge(rotI‘canny‘);%使用canny边缘检测
%****************迭代法计算阈值(先放这,加不加效果一样)**********************
zmax=max(max(BW));%求最大灰度值
zmin=min(min(BW));%求最小灰度值
TK=(zmax+zmin)/2;
bcal=1;
isize=size(BW);
while(bcal)
iforeground=0;
ibackground=0;
foregroundsum=0;
backgroundsum=0;
for i=1:isize(1)
for j=1:isize(2)
tmp=I2(ij);
if(tmp>=TK)
iforeground=iforeground+1;
foregroundsum=foregroundsum+double(tmp);
else
ibackground=ibackground+1;
backgroundsum=backgroundsum+double(tmp);
end
end
end
zo=foregroundsum/iforeground;
zb=backgroundsum/ibackground;
TKtmp=uint8((zo+zb)/2);
if(TKtmp==TK)
bcal=0;
else
TK=TKtmp;
end
end
BW=im2bw(BWdouble(TK)/255);
%BW=bwmorph(BW‘skel‘Inf);%骨架提取函数
subplot(222)imshow(BW);
[Hthetarho]=hough(BW);%hough变换
subplot(223);
imshow(imadjust(mat2gray(H))[]‘XData‘theta‘YData‘rho...
‘InitialMagnification‘‘fit‘);
xlabel(‘\theta (degrees)‘)ylabel(‘\rho‘);
axis onaxis normalhold on;
colormap(hot)
P=houghpeaks(H5‘threshold‘ceil(0.3*max(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6492 2012-05-30 22:38 chedaoxianjianceok.m
----------- --------- ---------- ----- ----
6492 1
相关资源
- MIMO系统 检测仿真
- 基于机器视觉的零件缺陷检测
- cacfar单元平均恒虚警检测方法
- 多算法CFAR一维恒虚警检测
- 深度学习汽车目标检测matlab2017
- 图形图像matlab GUI 实现边缘检测
- MATLAB图像处理GUI(包括边缘检测、二
- matlab 人脸识别.rar
- 人脸识别matlab代码
- Matlab实现 通过检测QR二维码位置探测
- 论文研究 - 审查智能电网系统中的故
- 基于视频检测的多目标跟踪的完整m
- matlab开发-边缘检测算法
- 基于HOG+SVM的行人检测系统
- matlab小波变换 边缘检测
- 椭圆霍夫变换matlab代码检测二值图像
- hough变换法检测椭圆matlab
- 模糊熵计算
- 基于MATLAB的圆形检测算法
- 数学形态学检测R波 matlab
- 雷达信号检测matlab程序
- 运动目标检测的matlab代码
- ECG信号的读取与QRS波检测
- 完整版认知无线电中频谱检测算法-
- ip-iq谐波检测
- ip_iq检测法,滞环电流控制APF仿真
- CA显著性检测算法matlab可运行代码.z
- 基于中科院-CASIA-GaitDatasetB步态图像轮
- 运动目标检测与跟踪算法 Matlab
- matlab离群点检测
评论
共有 条评论