更为完整的Hough变换线检测

news/2024/7/4 0:46:57 标签: matlab, class, 存储
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">
class="language-plain">RGB = imread('fenkuai.bmp');%jaynes-thesis
I=rgb2gray(RGB); % 图片用的是灰度图像,
[x,y]=size(I);
BW=edge(I);
figure;imshow(I);title('原图')
figure;imshow(BW);title('边缘检测图像')
rho_max=floor(sqrt(x^2+y^2))+1; %由原图数组坐标算出ρ最大值,并取整数部分加1
%此值作为ρ,θ坐标系ρ最大值
accarray=zeros(rho_max,180); %定义ρ,θ坐标系的数组,初值为0。
%θ的最大值,180度
Theta=[0:pi/180:pi]; %定义θ数组,确定θ取值范围
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
%将θ值代入hough变换方程,求ρ值
rho=(m*cos(Theta(k)))+(n*sin(Theta(k)));
%将ρ值与ρ最大值的和的一半作为ρ的坐标值(数组坐标),这样做是为了防止ρ值出现负数
rho_int=round(rho/2+rho_max/2);
%在ρθ坐标(数组)中标识点,即计数累加
accarray(rho_int,k)=accarray(rho_int,k)+1;
end
end
end
end
%figure;colormap gray;
%imagesc(accarray);title('hough变换后的图')
%xlabel('\theta'), ylabel('\rho');
%=====下面程序的显示效果没上面好=====%
%accarray=uint8(accarray); %转换后会丢数据
%figure;imshow(accarray);title('hough变换后的图')
%xlabel('\theta'), ylabel('\rho');
%axis on, axis normal, hold on;
%=======利用hough变换提取直线======%
%寻找100个像素以上的直线在hough变换后形成的点
K=1; %存储数组计数器
for rho_n=1:rho_max %在hough变换后的数组中搜索
for theta_m=1:180
if accarray(rho_n,theta_m)>=10 %设定直线的最小值。
case_accarray_n(K)=rho_n; %存储搜索出的数组下标
case_accarray_m(K)=theta_m;
K=K+1;
end
end
end
%把这些点构成的直线提取出来,输出图像数组为I_out
I_out=zeros(x,y);
I_jiao_class=zeros(x,y);
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
rho=(m*cos(Theta(k)))+(n*sin(Theta(k)));
rho_int=round(rho/2+rho_max/2);
%如果正在计算的点属于100像素以上点,则把它提取出来
for a=1:K-1
if rho_int==case_accarray_n(a)&k==case_accarray_m(a)%%%==gai==%%% k==case_accarray_m(a)&rho_int==case_accarray_n(a)
I_out(n,m)=BW(n,m); 
I_jiao_class(n,m)=k;
end
end
end
end
end
end
figure;imshow(I_out);title('利用经典hough变换提取的图像');
%========hough变换=========%
%=====class="tags" href="/tags/MATLAB.html" title=matlab>matlab自带函数========%
% 入口图像为 BW,出口图像为H
% [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);
% figure;imshow(H,'XData',T,'YData',R,'InitialMagnification','fit');title('hough变换矩阵')
% xlabel('\theta'), ylabel('\rho');
% axis on, axis normal, hold on;

来源:http://www.class="tags" href="/tags/MATLAB.html" title=matlab>matlabfan.com/thread-331-1-1.html


注:无法得到正确结果


http://www.niftyadmin.cn/n/719625.html

相关文章

给系统加上眼睛:服务端监控要怎么做?

给系统加上眼睛:服务端监控要怎么做?监控指标如何选择如何采集数据指标监控数据的处理和存储总结在一个项目的生命周期里,运行维护占据着很大的比重,在重要性上,它几乎与项目研发并 驾齐驱。而在系统运维过程中&#x…

【转】线程、Thread类和线程终止

一、线程Thread启动 0. Thread类实现了java.lang.Runnable接口,即实现了run方法。虽然在Sun JDK中,start()调用了start0()方法,start0()方法又是native的,但实际上新的线程就是调用了Thread的run()方法,当然这native的…

P1909 买铅笔

题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。 商店不允许将铅笔的包装拆开&#xff0…

应用性能管理:用户的使用体验应该如何监控?

应用性能管理:用户的使用体验应该如何监控?如何搭建 APM 系统需要监控用户的哪些信息总结我们了解了服务端监控搭建的过程。有了监控报表之后,团队在维护垂直电商系统时,就可以更早地发现问题,也有直观的工具辅助我们分…

Xcode iphone模拟器运行不流畅

xcode该需要多高的配置。。。。。。把这个取消就好了转载于:https://www.cnblogs.com/shenlaiyaoshi/p/7056920.html

限流量控制:高并发系统中我们如何操纵流量?

限流量控制:高并发系统中我们如何操纵流量?究竟什么是限流应该知道的限流算法固定窗口与滑动窗口的算法漏桶算法与令牌筒算法总结如果系统的峰值流量会超过了预估的峰值,对于核心服务也产生了比较大的影响,而我们总不能把核心服务…

数据结构中的图有哪些应用

我突然灵光一现 转载于:https://www.cnblogs.com/yfish/p/7062130.html

使用python测试sphinx(coreseek)做全文索引

coreseek是一个基础sphinx的中文索引工具,我今天写一下关于使用python做测试的方式。coreseek安装,连接mysql的配置此处不赘述,很多人写过这方面的博客,单纯讲python连接sphinx.当然我们先启动sphinx进程,./searchedpy…