霍夫变换直线检测的原理
笛卡尔坐标(x,y坐标)系上的直线y=kx+b 可以在极坐标系上可以用下式表示
r=x cosθ + ysinθ ,
其中r为该原点到该直线的距离,θ为该直线和x轴的夹角。
那么可以通过计算每个点x,y上,假设经过该点的直线与x轴为θ ,然后θ 从(1~180度)进行计算,分别得到不同的r值。
最后统计图片中经过各点,各个角度的直线概率最高的(r,θ)值,
我们认为这个值就是图片中真正的直线对应的r, θ值。 也即图片中直线对应的Normal Line(法线)长度r及其与x轴的夹角θ
以下是其Matlab程序实现。以下程序首先读取图片,并得到图片的大小rows,columns.
然后用Counters=zeros(rmax,180)数组用来统计各个r, θ的概率。
找到概率值最高的r, θ.
然后重新遍历图片,当x,y值满足r=x cosθ + ysinθ 时即认为该点是检测到的直线上的点。
A=imread('1.bmp');
imshow(A);
A_gray=rgb2gray(A);
%Get The Image Size
[rows,columns]=size(A_gray);
%define and initiate the Counters.
rmax=round(sqrt(rows^2+columns^2))
Counters=zeros(rmax,180);
%Begin to count
tic %-------------start to timing.