预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

沈阳理工大学数字图像处理课设 PAGE\*MERGEFORMAT16 设计目的 了解Hought变换的原理; 实现用Hough变换检测直线的算法。 设计要求 找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条直线; 分析并显示各直线的角度、长度。 设计原理 Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。 Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如下: ρ=xcosθ+ysinθ(3-1) 根据3-1公式,原图像空间中的点对应新参数空间中的一条正弦曲线,即点-正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,再根据θ和ρ的值对累加数组累加,从而得到共线点的个数。下面介绍θ和ρ取值范围的确定。设被检测的直线在第一象限,右上角坐标为(m,n),则第一象限中直线的位置情况如图3.1所示。 图3.1坐标位置 由图3.1可见,当直线从与x轴重合处逆时针旋转时,θ的值开始由0°增大,直到180°,所以θ的取值范围为0°~180°。由直线极坐标方程可知: ρ=x2+y2sin⁡(θ+Φ)(3-1) Φ=sin-1(xx2+y2)(3-2) 所以当且仅当x和y都达到最大且θ+Φ=±90°时(根据<来调整θ的值) ρ=|ρ|max=m2+n2(3-3) , 即ρ取值范围m2-n2~m2+n2。 由θ、ρ的取值范围和它们的分辨率就可以确定累加器的大小,从而检测直线。 利用Hough变换检测图像中直线的一般步骤应该首先对图像进行二值化,然后进行边缘检测,接着对边缘检测的结果作Hough变换,最后得到直线检测结果。为了简便,算法主要针对图像的Hough变换,所以输入图像采用二值边缘图,具体算法步骤如下: (1)读入一幅256级灰度图(虽然是256级灰度,但实际上仅有0和255两个灰度等级)。 (2)根据图像尺寸决定Hough变换累加器的大小并分配内存。 (3)对图像作Hough变换,并将变换结果存入Hough变换累加器。 (4)设定阈值,并根据阈值大小将Hough变换累加器中累加值小于阈值的点清零,即认为这些点并不对应图像域中的一条直线。 (5)查找Hough变换累加器中累加值最大的点,记录该点并将其领域清零,继续查找并记录下一个累加值最大的点,直到累加器中所有的累加值都为零,记录的这些点即对应了检测到的图像中的直线。 (6)根据检测到的点在图像域中绘出直线。 4.设计内容 4.1、读入图像 选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。 4.2、检测图像边缘 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别用梯度向量的幅度和方向来表示。 边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。 如Roberts算子,Sobel算子,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。 4.3、实现Houg变换,检测出图像中的直线 Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。 这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。 5.程序代码 clc;clear;%%录入图像并显示 f=imread('C:\Users\YeSonG\Documents\MATLAB\01.jpg');%读入彩色图像,注意不能使用灰度图像 o=f;%保留彩色原图 f=rgb2gra