霍夫变换hough、houghpeaks、houghlines

标签: matlab 霍夫变换
19人阅读 评论(0) 收藏 举报
分类:
霍夫变换在图像处理里常用来在黑白图像里检测直线,matlab里有相应的几个函数,使用方便,这里把matlab帮助里介绍的例子演示一下。
    matlab里霍夫变换主要包含一下三个函数:
hough:实现霍夫变换,得到霍夫变换矩阵,用法如下
[H, theta, rho] = hough(BW)
[H, theta, rho] = hough(BW, ParameterName,ParameterValue)
houghpeaks:在霍夫变换矩阵里找极值点
peaks = houghpeaks(H, numpeaks)
peaks = houghpeaks(..., param1, val1,param2, val2)
houghlines:从霍夫变换矩阵中提取线段
lines = houghlines(BW, theta, rho,peaks)
lines = houghlines(..., param1, val1,param2, val2)
    下面以一个例子来看看霍夫变换的效果,代码如下
% 测试霍夫变换
clc
clear
close all 
% 读取图像
I  = imread('circuit.tif');
rotI = imrotate(I,33,'crop'); % 旋转33度,保持原图片大小
fig1 = imshow(rotI);
% 提取边
BW = edge(rotI,'canny');
figure, imshow(BW); 
% 霍夫变换
[H,theta,rho] = hough(BW); % 计算二值图像的标准霍夫变换,H为霍夫变换矩阵,theta,rho为计算霍夫变换的角度和半径值
figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
    'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot) 
% 显示霍夫变换矩阵中的极值点
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); % 从霍夫变换矩阵H中提取5个极值点
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black'); 
% 找原图中的线
lines = houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);
figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
    % 绘制各条线
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');   
    % 绘制线的起点(黄色)、终点(红色)
    plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
    plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');   
    % 计算线的长度,找最长线段
    len = norm(lines(k).point1 - lines(k).point2);
    if ( len > max_len)
        max_len = len;
        xy_long = xy;
    end
end
% 以红色线高亮显示最长的线
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','red');
查看评论

霍夫变换直线检测基本原理hough,houghpeaks,houghlines

一步一步来: 1、在白纸上画出一个直角坐标系,任意给出一个点; 2、那么,对于点(x0,y0),经过这个点的直线必定满足y0=k*x0+b, 其中k是直线的斜率,b是直线的截距; 3、上式可以化...
  • lianchenglian
  • lianchenglian
  • 2017-05-17 16:48:22
  • 612

matlab中hough函数,houghpeaks函数,houghlines函数

1.hought函数 语法:[H, theta, rho] = hough(BW)             [H, theta, rho] = hough(BW, ParameterName, P...
  • zeroyl
  • zeroyl
  • 2014-04-03 15:16:08
  • 3406

opencv3标准霍夫变换-HoughLines函数

#include #include #include using namespace std; using namespace cv; int g_CannyThred = 150, g_Cann...
  • qq_23880193
  • qq_23880193
  • 2015-10-16 23:46:30
  • 1183

Hough变换 数学原理解析

(I)直线篇 1 直线是如何表示的? 对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法。然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示...
  • lin_W_D
  • lin_W_D
  • 2015-06-18 16:25:04
  • 1384

hough变换matlab程序

  • 2008年09月28日 15:36
  • 6KB
  • 下载

Hough直线检测原理及Matlab函数详解

原理 x-y坐标系中直线方程为y=ax+b x-y坐标系中的每一个点在,在a-b坐标系中对应一条直线 x-y坐标系中共线的点集,在a-b坐标系中对应一个线束(射影几何中的概念),线束的中心(a’...
  • maginy
  • maginy
  • 2014-07-14 11:46:05
  • 7974

关于Opencv3在使用霍夫变换(houghlines)时一直出问题的解决

简单的学习了一段时间Opencv3.0,最近在做霍夫变换时经常出现问题,问题如下:        自己也百度、谷歌了很长时间,发现说的都不是很好,也不能解决问题。最后自己一...
  • longwinyang
  • longwinyang
  • 2016-09-28 09:05:01
  • 1665

霍夫变换(Hough)

霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法。它通过将图像坐标空间变换到参数空间,来实现直线与曲线的拟合。...
  • sudohello
  • sudohello
  • 2016-05-06 22:41:53
  • 19911

Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)

在数字图像中,往往存在着一些特殊形状的几何图形,像检测马路边一条直线,检测人眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换就是这样一种检测的工具。Hough变换的原理是将特定图形上的...
  • on2way
  • on2way
  • 2015-07-23 21:27:38
  • 17491

Hough transform(这篇文字比较形象地阐述了霍夫变换的基本原理,简单易懂)

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。 我们先看这样一个问题: 设已知一...
  • hdanbang
  • hdanbang
  • 2014-12-04 16:08:10
  • 1097
    个人资料
    持之以恒
    等级:
    访问量: 9713
    积分: 548
    排名: 9万+
    文章存档
    最新评论