最原始的检测直线的算法实现——Hough变换
1、给出一幅图片。

2、检测图片边界:
img1 = EdgeDetect[img, 0.5]

3、为了节省计算时间,需要把图片缩小:
img2 = ImageResize[img1, 200]

4、提取图片数据,下图是图片数据的矩阵形式:
data = ImageData[img2];
data // MatrixForm;

5、把非零像素的像素坐标提取出来:
data0 = Drop[
Flatten[Table[
If[data[[m, n]] > 0, {m, n}, 0], {m, 1, 200, 1}, {n, 1, 200, 1}],1] // Union, 1];
data0 // Length

6、对每一个非零像素进行Hough变换:
Table[Table[
If[(data0[[n]].{Cos[x], Sin[x]}) >
0, {data0[[n]].{Cos[x], Sin[x]} // N, x}, 0], {x, 0, Pi,
Pi/180}], {n, 1, data0 // Length, 1}]
得到407612个数据组。

7、下面要对每一个数据组进行统计,统计它们各自在a里面出现的次数:
b = Drop[a // Union, 1];
d = a // Flatten;
dd=Table[{b[[n]], SequenceCount[d, b[[n]]]}, {n, 1, b // Length, 1}]
这一步实在是太耗费时间了,因此说,这个原始的算法计算量太大,根本不能用来检测直线;尤其是要实时检测的时候,根本不可能允许用长达数小时的时间,去检测一幅图片。
本次试验就此暂停,待找到快速算法,再继续进行。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:80
阅读量:110
阅读量:120
阅读量:139
阅读量:87