• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab练习程序(霍夫变换检测直线斜率)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  这个过去用就写过,这次正好有人问这个算法,所以在这里又把C代码改为了matlab了。

  霍夫变换是把原图像中的直线上的每一个点转换到参数空间对应的曲线上,由于每一个点对应一条曲线,因此在参数空间中所有曲线会相交到一个点,形成一个最值。因此原图寻找直线斜率的问题就变成了参数空间寻找最值的问题了。

代码如下:

clear all;
close all;
clc;


%%
%以下只是做一个带直线的图像而已
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)  %求得的斜率

做出的一条直线

参数空间中的曲线

30度时斜率是0.5774,霍夫变换求得的斜率是0.5736。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi10.1说明发布时间:2022-07-18
下一篇:
在DELPHI中嵌入脚本语言发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap