资源简介

基于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


评论

共有 条评论