图像处理之霍夫变换

图像处理之霍夫变换

ID:1236709

大小:163.37 KB

页数:12页

时间:2017-11-09

图像处理之霍夫变换_第1页
图像处理之霍夫变换_第2页
图像处理之霍夫变换_第3页
图像处理之霍夫变换_第4页
图像处理之霍夫变换_第5页
资源描述:

《图像处理之霍夫变换》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、图像处理之霍夫变换(直线检测算法)霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。 霍夫变换算法思想:以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单的例子如下:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式,可以表达出直线的离散点几何等式如下:X*cos(theta)+y*sin(theta) =r其中角度thet

2、a指r与X轴之间的夹角,r为到直线几何垂直距离。任何在直线上点,x,y都可以表达,其中r,theta是常量。该公式图形表示如下:然而在实现的图像处理领域,图像的像素坐标P(x,y)是已知的,而r,theta则是我们要寻找的变量。如果我们能绘制每个(r,theta)值根据像素点坐标P(x,y)值的话,那么就从图像笛卡尔坐标系统转换到极坐标霍夫空间系统,这种从点到曲线的变换称为直线的霍夫变换。变换通过量化霍夫参数空间为有限个值间隔等分或者累加格子。当霍夫变换算法开始,每个像素坐标点P(x,y)被转换到(r,theta)的曲线点上面

3、,累加到对应的格子数据点,当一个波峰出现时候,说明有直线存在。同样的原理,我们可以用来检测圆,只是对于圆的参数方程变为如下等式:(x–a)^2+(y-b)^2=r^2其中(a,b)为圆的中心点坐标,r圆的半径。这样霍夫的参数空间就变成一个三维参数空间。给定圆半径转为二维霍夫参数空间,变换相对简单,也比较常用。 编程思路解析:1.      读取一幅带处理二值图像,最好背景为黑色。2.      取得源像素数据3.      根据直线的霍夫变换公式完成霍夫变换,预览霍夫空间结果4.       寻找最大霍夫值,设置阈值,反变换到

4、图像RGB值空间(程序难点之一)5.      越界处理,显示霍夫变换处理以后的图像 关键代码解析:直线的变换角度为[0~PI]之间,设置等份为500为PI/500,同时根据参数直线参数方程的取值范围为[-r,r]有如下霍夫参数定义:[java] viewplaincopy1.// prepare for hough transform  2.int centerX = width / 2;  3.int centerY = height / 2;  1.double hough_interval = PI_VALUE/(do

5、uble)hough_space;  2.      3.int max = Math.max(width, height);  4.int max_length = (int)(Math.sqrt(2.0D) * max);  5.hough_1d = new int[2 * hough_space * max_length];  实现从像素RGB空间到霍夫空间变换的代码为:[java] viewplaincopy1.// start hough transform now....  2.int[][] image_2d =

6、 convert1Dto2D(inPixels);  3.for (int row = 0; row < height; row++) {  4.    for (int col = 0; col < width; col++) {  5.        int p = image_2d[row][col] & 0xff;  6.        if(p == 0) continue; // which means background color  7.          8.        // since we does

7、 not know the theta angle and r value,   9.        // we have to calculate all hough space for each pixel point  10.        // then we got the max possible theta and r pair.  11.        // r = x * cos(theta) + y * sin(theta)  12.        for(int cell=0; cell < hough_

8、space; cell++ ) {  13.            max = (int)((col - centerX) * Math.cos(cell * hough_interval) + (row - centerY) * Math.sin(cell * hough_

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

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

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