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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-17网站检测,网站检测工具有哪些
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接