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

智能推荐

/etc/passwd、/etc/shadow、/etc/group每个字段的含义_weixin_34129145的博客-程序员秘密

[[email protected]~]#cat-n/etc/passwd|head1root:x:0:0:root:/root:/bin/bash2bin:x:1:1:bin:/bin:/sbin/nologin3daemon:x:2:2:daemon:/sbin:/sbin/nologin4adm:x:3:...

linux中启动tomcat后浏览器无法访问的解决方法之防火墙关闭_非著名程序员.的博客-程序员秘密

这个问题折磨了大半天,也怪自己对linux不是很熟悉。网上的文章铺天盖地没有一篇正常的如果tomcat 确定启动正常,排查以下两个问题:1.系统是否安装有安全软件例如360或电脑管家之类的 退出2.关闭本地防火墙centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewa...

关于PCB焊盘是否能放置过孔的问题_小生不是书呆子的博客-程序员秘密

手工焊就可以放。没有影响的。机器焊的话,锡膏会漏到孔里面,可能会虚焊。

pytorch中BatchNorm1d、BatchNorm2d、BatchNorm3d的区别_Flowiiiing的博客-程序员秘密

1.nn.BatchNorm1d(num_features)1.对小批量(mini-batch)的2d或3d输入进行批标准化(Batch Normalization)操作2.num_features:来自期望输入的特征数,该期望输入的大小为’batch_size x num_features [x width]’意思即输入大小的形状可以是’batch_size x num_features’ 和 ‘batch_size x num_features x width’ 都可以。(输入输出相同)输入

DSL语句_weixin_33736649的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

百分之九十九的JAVA工作者都不知道的知识_weixin_34409357的博客-程序员秘密

1.Core Java部分 这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下: a.面向对象编程思想(封装继承多态接口) b.字符串处理 c.java.lang包,java.util包等常用包 4.java异常处理 2.Java高级部分 a.Java I/O流 b.Java多线程技术 c.Java网络编程 d.Java Swing...

随便推点

阿里云分布式事务seata:springcloud-eureka-feign-mybatis_邪神大叔的博客-程序员秘密

springcloud-eureka-feign-mybatis-seata-client/server注:来源阿里云开源seata,本人只做修改概览:seata由服务端及客户端组成,服务端是阿里的项目需要在后台一直运行,客户端只是集成了客户端部分配置文件而已。需要两端同时运行才可以完成分布式事务;服务端:https://github.com/xieshenace/springclou...

如何处理海量数据_sisiair的博客-程序员秘密

在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处理

大数据产品推荐:神策分析——可私有化部署的用户行为分析平台_大数据应用产品_乐投网的博客-程序员秘密

1、产品名称神策分析(Sensors Analytics)2、所属分类金融科技·风控、征信、反欺诈、大数据安全、智能获客3、产品介绍神策分析(Sensors Analytics)是一个深度用户行为分析平台,支持私有化部署、基础数据采集与建模,并作为PaaS平台支持二次开发。此外,还提供大数据相关咨询和数据驱动完整解决方案。4、应用场景/人群在

神经网络剪枝,知识蒸馏,以及模型优化设计_Geeksongs的博客-程序员秘密

一.神经网络压缩在如今人工智能的浪潮之下,深度学习在不少领域都取得了不错的成果。但是目前在边缘计算,物联网设备上的算力相比于我们的台式计算机还不太充足,我们在计算机上用于拟合的神经网络参数过多,不太适合运行在算力较弱的设备上,比如无人机,手机,平板电脑,自动驾驶汽车等等。因此我们需要将在计算机上训练好的神经网络通过某种技巧将其进行压缩,减少模型的参数,这样训练好的模型就可以迅速在这些边...

send,recv,sendto,recvfrom_Jody1989的博客-程序员秘密

send函数int send( SOCKET s,    const char FAR *buf,    int len,    int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;

Elasticsearch:理解 query_string 和 simple_query_string 查询_Elastic 中国社区官方博客的博客-程序员秘密

针对很多的开发者来说,如果你不是很熟悉 DSL 查询,那么在有些情况下,query_string 及 simple_query_string 变得非常灵活及方便。在今天的文章中,我来比较一下这两种查询的方法。

推荐文章

热门文章

相关标签