matlab中霍夫线检测函数,matlab 霍夫检测_星瀚Air的博客-程序员秘密

技术标签: matlab中霍夫线检测函数  

%霍夫检测

BW=imread('lexp_1_2.bmp');

BW=rgb2gray(BW);

thresh=[0.01,0.17];

sigma=2;%定义高斯参数

f = edge(double(BW),'canny',thresh,sigma);

figure(1),imshow(f,[]);

title('canny 边缘检测');

[H, theta, rho]= hough(f,'RhoResolution', 0.5);

%imshow(theta,rho,H,[],'notruesize'),axis on,axis normal

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

peak=houghpeaks(H,5);

hold on

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

figure,imshow(f,[]),title('Hough Transform Detect Result'),hold on

for k=1:length(lines)

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

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

end

%%

I=imread('1.jpg');

Ihsv=rgb2hsv(I);

Iv=Ihsv(:,:,3);                    %提取v空间

Ivl=Iv(500:end,:);              %截取下半部

Iedge=edge(Ivl,'sobel');    %边沿检测

Iedge = imdilate(Iedge,ones(3));%图像膨胀

%新建窗口,绘图用

figure (2)

imshow(Iedge);

hold on

%左方直线检测与绘制

%得到霍夫空间

[H1,T1,R1] = hough(Iedge,'Theta',20:0.1:75);

%求极值点

Peaks=houghpeaks(H1,5);

%得到线段信息

lines=houghlines(Iedge,T1,R1,Peaks);

%绘制线段

for k=1:length(lines)

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

plot(xy(:,1),xy(:,2),'LineWidth',4);

end

%右方直线检测与绘制

[H2,T2,R2] = hough(Iedge,'Theta',-75:0.1:-20);

Peaks1=houghpeaks(H2,5);

lines1=houghlines(Iedge,T2,R2,Peaks1);

for k=1:length(lines1)

xy1=[lines1(k).point1;lines1(k).point2];

plot(xy1(:,1),xy1(:,2),'LineWidth',4);

end

hold off

%%

%以下只是做一个带直线的图像而已

r=300;

jiaodu=30;      %更改这个值测试,90度270度时不管用

jiaodu1=mod(jiaodu,360);

flag=0;

if jiaodu1>=0 && jiaodu1<90

jiaodu1=jiaodu1;

flag=1;

end

if jiaodu1>=90 && jiaodu1<180

jiaodu1=180-jiaodu1;

flag=2;

end

if jiaodu1>=180 && jiaodu1<270

jiaodu1=jiaodu1-180;

flag=3;

end

if jiaodu1>=270 && jiaodu1<360

jiaodu1=360-jiaodu1;

flag=4;

end

H=floor(r*sin(jiaodu1*pi/180));

W=floor(r*cos(jiaodu1*pi/180));

if mod(H,2)==0

H=H+1;

end

if mod(W,2)==0

W=W+1;

end

w=zeros(H,W);

if jiaodu1 ~= 90 && jiaodu1 ~= 270

for i=1:H

for j=1:W

tmp=floor(j*tan(jiaodu1*pi/180));

if tmp+1==i

w(i,j)=r;

end

end

end

else

for i=1:H

w(i,1)=r;

end

end

if flag==1 || flag==3      %如果角度在1,3象限,卷积矩阵上下翻转

w=flipud(w);

end

%下面是真正的霍夫变换

img=mat2gray(w);      %处理这个图像

[m n]=size(img);

imshow(img);

data=zeros(314,2*(m+n));

for i=1:m                      %将图像二维空间的一个点映射到p=x*cos(theta)+y*sin(theta)方程对应的参数空间的一条曲线

for j=1:n

if img(i,j)==1

for theta=0.01:0.01:3.14

data(round(theta*100),round(i*sin(theta)+j*cos(theta)+m+n))= ...

data(round(theta*100),round(i*sin(theta)+j*cos(theta)+m+n))+1;

end

end

end

end

theta=0;

ma=0;

for i=1:314                %寻找曲线相交最多的那个点,即找最大值

for j=1:2*(m+n)

if data(i,j)>ma

ma=data(i,j);

theta=i/100;

rou=j-m-n;

end

end

end

figure;imshow(data)    %形象的显示参数空间曲线

sr_k=tan(jiaodu*pi/180)    %设置的斜率

re_k=cos(theta)/sin(theta)  %求得的斜率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36436683/article/details/115856979

智能推荐

获取当前时间戳和随机数的获取_根据时间戳获取随机数_liuwei9613的博客-程序员秘密

获取时间戳:第一种方法:var timestamp = Date.parse(new Date());结果:1280977330000第二种方法:var timestamp = (new Date()).valueOf();结果:1280977330748第三种方法:var timestamp=new Date().getTime();结果:12809773

putExtra()参数详解_春林初绿的博客-程序员秘密

putExtra(“A”,B)中,AB为键值对,第一个参数为键名,第二个参数为键对应的值。顺便提一下,如果想取出Intent对象中的这些值,需要在你的另一个Activity中用getXXXXXExtra方法,注意需要使用对应类型的方法,参数为键名例子:来建第一个Activity:MyIntentpublic class MyIntent extends Activity { ...

从零基础到精通的Python学习路线(附教程)_码上得编程的博客-程序员秘密

首先,我们先普及一下编程语言的基础知识。其实无论用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。理论上任何语言干任何事情几乎都可以, 但是主要干什么那就不一样了。》》Python是什么?简单来说,Python就是一种编程语言。由于Python具有丰富和强大的库,它常被称为“胶水语言”,它能够把用其他编程语言制作的各种模块很轻松地联结在一起。常见的一种应

java照片墙_js实现超酷的照片墙展示效果图附源码下载_曾larry的博客-程序员秘密

这是一个超酷的照片墙展示效果,很多照片结合淡入淡出、旋转、缩放、倾斜及3D效果,照片快速从左侧切入,做旋转3D效果,最后在照片墙上整齐排列,为用户展示了超酷的照片墙展示效果。HTML本文结合实例给大家分享超酷的照片墙效果,该效果依赖jQuery和easing插件,因此首先载入这两个文件。接着,我们在需要展示照片墙的位置放置如下代码:点击看效果CSSCSS定义了照片墙基本样式,照片排列以及按钮样式。...

当区块链遇见 RISC-V_NervosNetwork的博客-程序员秘密

区块链的出现使得智能合约得到了更好的实现和发展,而区块链和智能合约之间,还存在着一个重要的角色:虚拟机(Virtual Machine)。虚拟机的概念在上个世纪六十年代就...

随便推点

GDI+新建画刷时出现new错误问题_gdiplus类(new) 文本_小哼哼L的博客-程序员秘密

今天用IMageEx来向窗口显示动画,用到了GDI+;结果遇到了    error C2660: “Gdiplus::GdiplusBase::operator new”: 函数不接受 3 个参数       这个编译错误!        上网查了看一个网友说的是:     找到解决方案,原来是微软的 DEBUG_NEW  和 GDI+ 不匹配造成的。

pch文件使用--学习笔记_DemoFootMan的博客-程序员秘密

PCH 全称“precompiled Header”,也就是预编译头文件。优点:1、整个工程都广泛使用的头文件可以放在该文件下,编译器编译会自动将pch文件中的头文件添加到所有源文件中,这样可以在需要的类中直接使用而不导头文件,增加编程的便利性;          2、存放一些不常被修改的代码,比如常用的框架文件,宏设置,这样做的目的 提高编译器编译速度。缺点:当我

OpenStack 中glance上传镜像报错Invalid OpenStack Identity credentials.报错http 401_glance http401_运维到最后的博客-程序员秘密

解决方法:[[email protected] ~]# cat /etc/httpd/conf.d/wsgi-keystone.conf Listen 192.168.200.10:5000Listen 192.168.200.10:35357&lt;VirtualHost 192.168.200.10:5000&gt; WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone d

django 配置微信JS接口安全域名文件MP_verify_HYY0KkfTzujsyGhW.txt_我就叫贝塔的博客-程序员秘密

开通微信公众号的支付功能时需要配置微信JS接口安全域名如下图所示:下载MP_verify_HYY0KkfTzujsyGhW.txt文件到本地,如何把txt文件放入django,并且路由访问到他呢?在settings文件里面设置好模板名字,一般都是 templatesTEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.j

跟着SY速学Ubuntu系列六:Composer学习(2):自动加载功能_SxinBoss的博客-程序员秘密

1.在phpStorm建一个空项目test。 2.在test目录下运行$composer init会自动生成composer.json文件3.配置自动加载创建文件夹 common,新建functions.phpfunction showName(){ echo 'sxin';}修改composer.json"autoload":{ "files":["common/fun

Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)_weixin_33747129的博客-程序员秘密

由于直方图受组距(binsize)影响很大,设置不同的组距可能会产生完全不同的可视化结果。因此我们可以用密度平滑估计来更好地反映数据的真实特征。具体可参见这篇文章:https://blog.csdn.net/unixtch/article/details/78556499。还是用我们自己创建的一组符合正态分布的数据来画图。准备工作:先导入matplotlib,seaborn和...

推荐文章

热门文章

相关标签