当前位置:首页 > 代码 > 正文

hough变换检测直线matlab代码(基于hough变换的直线检测Matlab)

admin 发布:2022-12-19 21:26 231


今天给各位分享hough变换检测直线matlab代码的知识,其中也会对基于hough变换的直线检测Matlab进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

MATLAB--数字图像处理 Hough变换

Hough变换是1962年由Hough提出来的,用于检测图像中直线、圆、抛物线、椭圆等形状能够用一定函数关系描述的曲线。

在这里我们重点研究的是 利用Hough变换检测图中的直线。

对于上图中的直线L,用常规方程表示

L: y=ax+b

那么用极坐标怎么表示呢?

对于任意的R,都有

R×cos(β-θ)=ρ

展开得

R×cosβcosθ+R×sinβsinθ=ρ

又x=R×cosβ y=R×sinβ(这个就不用解释了吧 高中知识了 O(∩_∩)O)

x×cosθ+y×sinθ=ρ

从这个极坐标表示的式子来看,是不是在一条直线上面所有的(x,y)都对应一个ρ、θ呢?

所以这个就是hough变换的: 点-线对偶性

通俗的讲:在直角坐标系中的一条直线,在极坐标下,其实就是一个点,坐标为(ρ,θ)

由a、b两图:位于一条直线上的两点,在极坐标会产生一个交点,说明他们共线。

可是在直角坐标系中明明只有两个点,b图中反而是两条曲线?

对于任意一点,过该点有无数条直线,每条直线都有一个(ρ,θ)值,那么无数条直线,就会组成连续的(ρ,θ)值,就会构成极坐标系下的一条连续曲线。

这样,我们对一副图像所有点进行同样的操作,得到一副(ρ,θ)图像。

如果我们需要找出图像中最长的那条直线,那么肯定组成该直线的点最多,那么在极坐标系中肯定有个(ρ,θ)点是有最多条直线相交得到的。

如下图,利用函数就可以找到 相交曲线数 最多的一个点。

那么找到该点有什么用呢?

找到该点,就可以得到(ρ,θ)值、直线起始、终止点坐标。(MATLAB提供函数支持)

这里来说说,计算机是怎么由(ρ,θ)坐标图找到相交曲线最多的那个点。

首先,提供一个坐标轴

这里就说简单些:在基础二我们可以得出 一个点在极坐标系下的一条曲线

然后我们 对该曲线进行细分,分成很多个点 (得到坐标)

在第一步提供的坐标轴里面,凡是前面分出来的点坐标,该位置的值就累加1

重复所有点,就可以得出一副累加图

如果需要找到曲线相交最多那个点,就只需要在该坐标轴中找到值最大的点坐标即可。

结果

求能够运行的用matlab进行hough变换直线检测的程序。急!

直接运行:

RGB = imread('gantrycrane.png');

I = rgb2gray(RGB); % convert to intensity

BW = edge(I,'canny'); % extract edges

[H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);

% display the original image

subplot(2,1,1);

imshow(RGB);

title('gantrycrane.png');

% display the hough matrix

subplot(2,1,2);

imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,...

'InitialMagnification','fit');

title('Hough transform of gantrycrane.png');

xlabel('\theta'), ylabel('\rho');

axis on, axis normal, hold on;

colormap(hot);

matlab实现hough变换检测直线

clear all;

clc;

r = imread('C:\Users\lenovo\Desktop\canny.jpg');

t=rgb2gray(r);

figure,imshow(t)

f=edge(t,'canny');

figure,imshow(f)

[H, theta, rho] = hough(f,'RhoResolution',0.5,'Theta',-90:0.5:89.5);

figure

imshow(imadjust(H),'Xdata', theta, 'Ydata', rho, 'InitialMagnification','fit');

axis on, axis normal

p= houghpeaks(H, 5);

%[r,c] = houghpeaks(H, 5);

hold on;

%plot(theta(r), rho(c), 'linestyle', 'none', 'marker', 's', 'color', 'w')

plot(p, 'linestyle', 'none', 'marker', 's', 'color', 'r')

lines = houghlines(f, theta, rho,p);

%lines = houghlines(f, theta, rho, r, c);

figure,

imshow(t)

hold on

for k = 1: length(lines)

xy = [lines(k).point1; lines(k).point2];

plot(xy(:, 2), xy(:, 1), 'LineWidth', 4, 'Color', [.6, .2, .1]);

end

hold off

按上面语句试试

关于hough变换检测直线matlab代码和基于hough变换的直线检测Matlab的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/24982.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载