hough变换提取直线(Matlab实现)
Hough变换提取直线
一、实验目标
实现用Hough变换检测直线的算法
二、实验内容
1、读入图像
选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使用彩色图像(有些瞧似灰度图像的实际属性也就是彩色图像),原因下面有详解。
2、检测图像边缘
如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征就是灰度的变化率与方向,她们分别用梯度向量的幅度与方向来表示。
边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数就是基于方向导数掩模求卷积的方法。如Roberts算子,Sobel算子 ,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。
3、实现Houg变换,检测出图像中的直线
Hough变换就是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。
这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。
4、Matlab代码如下:
f=imread('3、png');%读入彩色图像,注意不能使用灰度图像
o=f; %保留彩色原图
f=rgb2gray(f);%将彩色图像转换为灰度图像,
f=im2double(f);
figure();
subplot(2,2,1);imshow(o);title('原图');