通过Hough变换在二值图像中检测直线需要3个步骤:
(1)利用hough()函数执行霍夫变换,得到霍夫矩阵;
(2)利用houghpeaks()函数在霍夫矩阵中寻找峰值点;
(3)利用houghlines()函数在之前2步结果的基础上得到原二值图像中的直线信息
1.霍夫变换
在MATLAB中,hough函数用于执行霍夫变换,该函数的调用方法如下:
1 | [H, theta, rho] = hough(BW, param1, vall, param2, val2) |
其中BW是边缘检测后的二值图像。param1、value1以及param2、value2为可选参数对。H是变换得到的Hough矩阵。theta和rho为分别对应于Hough矩阵每一列和每一行的θ和ρ值组成的向量。
2.寻找峰值
在MATLAB中,houghpeaks函数用于在霍夫矩阵中寻找峰值点。该函数的调用方法如下:
1 | peaks = houghpeaks(H, numpeaks, param1, val1, param2, val2) |
其中,H是由hough()函数得到的Hough矩阵;numpeaks是要寻找的峰值数目,默认为1;
peaks是一个Q×2的矩阵,每行的两个元素分别为某一峰值点在Hough矩阵中的行、列索引;Q为找到的峰值点的数目。
3.提取直线段
在MATLAB中,houghlines函数在之前2步结果的基础上得到原二值图像中的直线信息。该函数的调用方法如下:
1 | lines = houghlines(BW, theta, rho, peaks, param1, val1, param2, val2) |
其中,BW是边缘检测后的二值图像;theta和rho是Hough矩阵每一列和每一行的θ和ρ值组成的向量,由hough函数返回;peaks是一个包含峰值点信息的Q×2的矩阵,由houghpeaks函数返回;lines是一个结构体数组,数组长度是找到的直线条数。
利用霍夫变换来对图像进行处理
1 | I=imread('pears.png'); %读取图像 |