java hough变换(霍夫变换)检测直线
2014-07-27 18:13
309 查看
阅读前请看<前言>,谢谢!
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,他是检测和定位直线和解析曲线的有效方法,它通过将边缘二值图像变换到Hough空间,在参数空间用极值点的检测来完成目标的检测。
就直线检测而言:
在极坐标中ρ = x cos(θ) + y sin(θ)表示一条直线。其中(ρ,θ)确定一条直线,因此可以先将图片进行边缘检测,然后对图像上每一个非零像素点,在参数坐标下变换为一条直线,然后构建hist(ρ,θ)二维直方图。在二维直方图中找到大于给定阈值的值,即为检测到的直线。对θ的取值为0-90度,ρ的取值为0-sqrt(h*h+w*w),其中边缘检测算子我采用sobel算子,也可以用我前两篇提到的另外两种边缘检测算子。
程序代码如下:
soble算子处理加二值化的结果如下:
该程序只能检测到0-90度的直线。
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,他是检测和定位直线和解析曲线的有效方法,它通过将边缘二值图像变换到Hough空间,在参数空间用极值点的检测来完成目标的检测。
就直线检测而言:
在极坐标中ρ = x cos(θ) + y sin(θ)表示一条直线。其中(ρ,θ)确定一条直线,因此可以先将图片进行边缘检测,然后对图像上每一个非零像素点,在参数坐标下变换为一条直线,然后构建hist(ρ,θ)二维直方图。在二维直方图中找到大于给定阈值的值,即为检测到的直线。对θ的取值为0-90度,ρ的取值为0-sqrt(h*h+w*w),其中边缘检测算子我采用sobel算子,也可以用我前两篇提到的另外两种边缘检测算子。
程序代码如下:
public void hough(){ Image im = this.clone(); im.sobel(); im.IterBinary(); int ro = (int)Math.sqrt(h*h+w*w); int theta = 180; int[][] hist = new int[ro][theta]; for(int k=0;k<theta;k++){ for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(im.data[j+i*w] != 0){ int rho=(int)(j*Math.cos(k*Math.PI/(theta*2))+i*Math.sin(k*Math.PI/(theta*2))); hist[rho][k]++; } } } } ArrayList<h> index = math.maxIndex(hist,70); //找到大于最大值*0.7的二维直方图的点 for(int k =0;k<index.size();k++){ double resTheta = index.get(k).angle*Math.PI/(theta*2); for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ int rho = (int)(j*Math.cos(resTheta)+i*Math.sin(resTheta)); if(im.data[j+i*w] != 0 && rho == index.get(k).ro){ data[j+i*w] = setRed(); //在直线上的点设为红色 }else{ data[j+i*this.w] = (255<<24)|(data[j+i*this.w]<<16)|(data[j+i*this.w]<<8)|(data[j+i*this.w]); } } } } this.gray = false; }其中
/* * to save the hough transform's results */ class h{ int ro; int angle; public h(int r,int a){ this.ro = r; this.angle = a; } }运行结果如下:
soble算子处理加二值化的结果如下:
该程序只能检测到0-90度的直线。
相关文章推荐
- Hough变换检测直线的Java实现
- Hough变换检测直线到广义霍夫变换
- Java调用OpenCV进行Hough变换直线检测
- Hough变换检测直线
- 通过hough变换检测直线
- Hough变换直线检测
- Hough变换直线检测
- hough变换检测直线
- Hough变换检测直线、圆等图形的原理
- 霍夫变换直线检测houghlines及opencv的实现分析
- 通过hough变换检测直线
- Matlab实现Hough变换检测图像中的直线
- 【转】利用Hough变换实现直线检测的代码
- hough变换检测直线
- Hough变换 直线检测原理及其Matlab实现
- 数字图像处理—图像分割—哈夫(Hough)变换及哈夫变换原理—检测直线
- Hough变换直线检测
- 霍夫变换直线检测houghlines及opencv的实现分析
- Hough变换检测直线
- 霍夫变换直线检测houghlines及opencv的实现分析