MATLABHough变换

本文介绍了如何在MATLAB中使用Hough变换对图像进行边缘检测,包括灰度处理、边缘算子选择以及Hough变换的具体步骤。通过Canny算子实例展示了整个过程,同时指出Hough变换在简单边缘图像上的优势和复杂图像中的局限性。
摘要由CSDN通过智能技术生成

智能2112杨阳

一、目的

熟悉在MATLAB中如何使用Hough变换对图像进行检测,计算获得矢量化的边缘特征。

二、平台

MATLAB

三、内容

1、要求

选取一副图像(如房屋图像),利用hough变换检测,计算获得矢量化的边缘特征。

2、思路

 首先先将彩色图片进行灰度处理,然后通过边缘检测算子,如roberts算子,sobel算子,log算子……对目标图像边缘进行检测。接着对图像进行Hough变换,找出变换域中的峰值数据(相交直线最多的点),根据峰值数据的空域坐标绘出对应直线。

3、代码实现

I0=imread('/Users/darellyang/Desktop/House.png');
I=rgb2gray(I0);%灰度图转换
rotI=imrotate(I,33,'crop');
BW=edge(rotI,'canny');
%BW=edge(rotI,'log');
%BW=edge(rotI,'roberts');
%BW=edge(rotI,'sobel');
imshow(BW);
title('原图');
%对图像进行Hough变换
[H,T,R]=hough(BW);  %[H,theta,rho]
%显示变换域
figure,imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
              'InitialMagnification','fit');
xlabel('\theta');ylabel('\rho');
axis on,axis normal,hold on
title('变换域');
%计算变换域峰值
P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x=T(P(:,2));y=R(P(:,1));
plot(x,y,'s','color','red');
%标记直线
lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
figure,imshow(rotI),hold on
max_len=0;
for k=1:length(lines)
    xy=[lines(k).point1;lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','white');
    %Plot beginning and ends of lines
    plot(xy(1,1),xy(1,2),'xw','LineWidth',2);
    plot(xy(2,1),xy(2,2),'xw','LineWidth',2);
    %Determine the endpoints of the longest line segment
    len=norm(lines(k).point1-lines(k).point2);
    if(len>max_len)
        max_len=len;
        xy_long=xy;
    end
end
title('检测结果')

结果

如下为canny算子的情况,其他算子的情况仅需在检测边缘上更改算子即可。为了使此示例更具说明性,旋转图像。显示图像。

使用edge函数找到图像中的边缘。

计算由edge返回的二值图像的Hough变换。显示由hough函数返回的变换H。

使用houghlines函数查找图像中的线条。显示原始图像及其叠加线条的绘图。

四、总结 

图像的Hough变换是一种图像特征提取的技术,通过投票法检测特定形状并提取,其方法是在参数空间中通过投票累加获得局部最大值,从而通过值得到符合特定形状的集合,该集合即为Hough变换结果。在Hough变换中,主要是利用图像的特殊形状,按照指定的函数进行参数空间点的累加,每取到函数形状上的点则进行投票累加,最后通过参数限制获得需要统计的点并组成点的集合,此时即可得到最终的边界点。Hough变换多用于对直线、圆、椭圆形状的检测和提取。Hough变换算法适用于所有能够用方程表达出的图像特征,而其算法的复杂度也随着图像特征方程的复杂度变化。

根据检测结果可以总结出以下几点。

1、Hough变换是通过函数拟合来完成边缘选择的,对于具有单一颜色、简单边缘以及已知函数的图像而言,Hough变换能够更好地选择边缘;

2、Hough变换不适合用于复杂颜色、复杂边缘的图像,这种图像都不适合进行函数拟合,Hough变换会使得最终的效果较差。

遇到的问题及解决方法:

问题:

在运行时出错,因为没有对图像进行灰度处理,显示使用算子后图像运行失败。

解决方法:

将图片进行灰度处理后运行成功。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值