学习opencv标准hough变换函数

学习opencv标准hough变换函数

ID:16988419

大小:32.00 KB

页数:8页

时间:2018-08-26

学习opencv标准hough变换函数_第1页
学习opencv标准hough变换函数_第2页
学习opencv标准hough变换函数_第3页
学习opencv标准hough变换函数_第4页
学习opencv标准hough变换函数_第5页
资源描述:

《学习opencv标准hough变换函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、学习OpenCV标准Hough变换函数2009-12-1722:52:31

2、分类:OLD

3、标签:hough变换opencv

4、字号订阅  Hough变换找直线的程序实在是做得纠结,看原理似乎很简单,但实际做起来还是碰到了不少问题。最主要的就是当theta-rho空间中有几个相邻点的计数值都超过阈值时的取舍问题,整了一下午还是想不出很么好办法。晚上抱着敬畏的心理读了以下OpenCV的源码,感觉受益匪浅。  首先眼前一亮的是cos值和sin值的计算,icvHoughLinesStandard的处理方式是先把所有要用的都计算出来,存到数组里面。这样以来就避免了大量的重复计

5、算,这对提高Hough变换的效率大有帮助。  接着看到的就是那个令我纠结的问题,这里先贴一下OpenCV中的代码:intbase=(n+1)*(numrho+2)+r+1;if(accum[base]>threshold&&accum[base]>accum[base-1]&&accum[base]>=accum[base+1]&&accum[base]>accum[base-numrho-2]&&accum[base]>=accum[base+numrho+2])sort_buf[total++]=base;  如果仅仅通过累加器中的值是否大于阈值来判断数据的有

6、效性不能达到令人满意的效果,因此还比较了当前累加器单元及其四邻域的值,这样能够近似的到一个令人满意的结果。起初以为这么做存在一个小BUG:当两个相等的accum值挨在一起时,若它们又比周围其它值都要大,那么这条直线就被水掉了。后来发现每个元素与其右或下的元素比较时用的是“>=”而不是">",这样就保证了不会丢失直线,不过精度有所下降——如果要保证精度,需要大大增加计算量,故这里的精度损失也是可接受的。  这个函数一共标注了4个stage,第三个是一个排序,起初不解,后来明白当遇到linesMax<=total的情况时,这一个步骤保证了把"最像直线的直线"输出。附:

7、读代码时做的注释src/cv/cvhough.cpp......staticvoidicvHoughLinesStandard(constCvMat*img,floatrho,floattheta,intthreshold,CvSeq*lines,intlinesMax){int*accum=0;otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Starti

8、ngin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeS

9、ecretary,Ministersandint*sort_buf=0;float*tabSin=0;float*tabCos=0;CV_FUNCNAME("icvHoughLinesStandard");__BEGIN__;constuchar*image;intstep,width,height;intnumangle,numrho;inttotal=0;floatang;intr,n;inti,j;floatirho=1/rho;doublescale;CV_ASSERT(CV_IS_MAT(img)&&CV_MAT_TYPE(img->type)==CV_

10、8UC1);/*指向矩阵数据的uchar*指针*/image=img->data.ptr;/*以字节为单位的行数据长度*/step=img->step;/*以元素为单位的行数据长度*/width=img->cols;/*行数,即高度*/height=img->rows;/*通过弧度精度计算出来的弧度分块数目*/numangle=cvRound(CV_PI/theta);/*通过像素精度计算出来的像素分块数目*/numrho=cvRound(((width+height)*2+1)/rho);/*补充:cvRound是取整函数,返回和参数最接近的整数值*//*分配存

11、储空间*/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。