1、Hough变换
Hough变换是一种快速的形状匹配技术。经典的H ough变换适用于曲线形状可以用参数来描述、而曲线位置未知情况下的曲线检测。如下:
在笛卡儿坐标系中, 直线可以用斜截方程y = kx + b 表示。考虑同一直线上的两点( x i, yi ) 和( xj, yj ), 满足yi = kx i+ b 和yj = kxj + b, 映射到参数空间后的两条正弦曲线Q=x i cos H+ yi sin H和Q= xj cos H+ yj s in H将相交于一点。如下图所示:
从而在图像空间中同一条直线上的所有点在变换到参数空间后的正弦曲线都将交汇于一点( Q, H)。因此可以设计二维计数器H ( Q, H) 来累加极坐标系中的参考点数。最后通过统计计数器矩阵的局部极大值, 即可检测出图像中的直线。
推广后的Hough变换可以检测任意形状。
2、OpenCV中利用Hough变换检测直线
/* Finds lines on binary image using one of several methods.
line_storage is either memory storage or 1 x <max number of lines> CvMat, its
number of columns is changed by the function.
method is one of CV_HOUGH_*;
rho, theta and threshold are used for each of those methods;
param1 ~ line length, param2 ~ line gap - for probabilistic,
param1 ~ srn, param2 ~ stn - for multi-scale */
CVAPI(CvSeq*) cvHoughLines2( CvArr* image, void* line_storage, int method,
double rho, double theta, int threshold,
double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));
参数说明:
image
输入8-比特、单通道(二值)图像,当用CV_HOUGH_PROBABILISTIC方法检测的时候其内容会被函数改变。
line_storage
检测到的线段存储仓.可以是内存存储仓(