首页 > 厂商 > 问答 > hough变换,MATLAB的hough变换

hough变换,MATLAB的hough变换

来源:整理 时间:2023-09-08 17:38:15 编辑:智能门户 手机版

本文目录一览

1,MATLAB的hough变换

edge函数可以求canny边缘 houghlines函数可以求直线信息

MATLAB的hough变换

2,霍夫变换直线检测原理

霍夫变换(Hough Transform)于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推广使用,是图像处理领域内从图像中检测几何形状的基本方法之一。经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆。霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题。给定一幅图像(一般为二值图像)中的点集合,如何检测直线?一种解决方法:任选一对点,决定一条线,然后测试所有其他点是否接近这条线,从而得出接近这条特殊线的所有点的子集。该方法比较复杂。另外一种方法便是采用霍夫变换。霍夫变换是图像处理必然接触到的一个算法,它通过一种投票算法检测具有特定形状的物体,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果,该方法可以进行圆,直线,椭圆等形状的检测。在车道线检测中,当初考虑的一个方案便是采用霍夫变换检测直线进行车道线提取。

霍夫变换直线检测原理

3,hough变换能检测无规则的曲线吗

不行,只能检测直线和特定形状的曲线,就是说曲线的公式必须是预先知道的,转换曲线是也是先对曲线求导数,转换成直线形式。
hough 求助编辑百科名片国内外对hough变换的研究及应用动态:hough变换于1962年由paul hough提出,并在美国作为专利被发表。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质

hough变换能检测无规则的曲线吗

4,MATLAB数字图像处理 Hough变换

Hough变换是1962年由Hough提出来的,用于检测图像中直线、圆、抛物线、椭圆等形状能够用一定函数关系描述的曲线。 在这里我们重点研究的是 利用Hough变换检测图中的直线。 对于上图中的直线L,用常规方程表示 L: y=ax+b 那么用极坐标怎么表示呢? 对于任意的R,都有 R×cos(β-θ)=ρ 展开得 R×cosβcosθ+R×sinβsinθ=ρ 又x=R×cosβ y=R×sinβ(这个就不用解释了吧 高中知识了 O(∩_∩)O) x×cosθ+y×sinθ=ρ 从这个极坐标表示的式子来看,是不是在一条直线上面所有的(x,y)都对应一个ρ、θ呢? 所以这个就是hough变换的: 点-线对偶性 通俗的讲:在直角坐标系中的一条直线,在极坐标下,其实就是一个点,坐标为(ρ,θ) 由a、b两图:位于一条直线上的两点,在极坐标会产生一个交点,说明他们共线。 可是在直角坐标系中明明只有两个点,b图中反而是两条曲线? 对于任意一点,过该点有无数条直线,每条直线都有一个(ρ,θ)值,那么无数条直线,就会组成连续的(ρ,θ)值,就会构成极坐标系下的一条连续曲线。 这样,我们对一副图像所有点进行同样的操作,得到一副(ρ,θ)图像。 如果我们需要找出图像中最长的那条直线,那么肯定组成该直线的点最多,那么在极坐标系中肯定有个(ρ,θ)点是有最多条直线相交得到的。 如下图,利用函数就可以找到 相交曲线数 最多的一个点。 那么找到该点有什么用呢? 找到该点,就可以得到(ρ,θ)值、直线起始、终止点坐标。(MATLAB提供函数支持) 这里来说说,计算机是怎么由(ρ,θ)坐标图找到相交曲线最多的那个点。 首先,提供一个坐标轴 这里就说简单些:在基础二我们可以得出 一个点在极坐标系下的一条曲线 然后我们 对该曲线进行细分,分成很多个点 (得到坐标) 在第一步提供的坐标轴里面,凡是前面分出来的点坐标,该位置的值就累加1 重复所有点,就可以得出一副累加图 如果需要找到曲线相交最多那个点,就只需要在该坐标轴中找到值最大的点坐标即可。 结果

5,Hough变换检测直线时能检测什么样的图像

http://www.baidu.com/s?ie=gb2312&bs=Hough%B1%E4%BB%BB%BC%EC%B2%E2%D6%B1%CF%DF%CA%B1%C4%DC%BC%EC%B2%E2%CA%B2%C3%B4%D1%F9%B5%C4%CD%BC%CF%F1%3F&sr=&z=&cl=3&f=8&tn=baidu&wd=Hough%B1%E4%BB%BB%BC%EC%B2%E2%D6%B1%CF%DF%CA%B1%C4%DC%BC%EC%B2%E2%CA%B2%C3%B4%D1%F9%B5%C4%CD%BC%CF%F1%3F&ct=0 进去就知道了

6,Hough变换

Hough变换是利用图像全局特性有可能把边缘象素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便地得到边界曲线,把不连续的边缘象素点连接起来,还可以直接检测某些已知形状的目标,并有可能确定边界到亚象元精度。其主要优点是受噪声和曲线间断的影响小。为了便于理解Hough变换这种功能,先举一个简单例子。设给定图像中的n个点,要从中确定连在同一直线上的点的子集。这可看作已检测出的若干点,去求出它们所在的直线。一种直接解决办法是先确定所有由任意两点决定的直线(约需n2次运算以确定n(n-1)/2 条直线),再找出接近具体直线的点的集合(约需n2次运算以比较n个点中的每一个与n(n-1)/2条直线中的每一条)。这么大的计算量实际上不易实现。如果用Hough变换:的方法就可用较少的计算量来解决这个问题。这种变换的基本思想是点一线的对偶性,Duality在图像空间XY中,所有过点(x,y)的直线都满足方程:Y=px + q (5-15)式中P为斜率,q为截距,式(5-15)也可以写成:q=- px + Y (5-16)式(5-16)可以认为是代表参数空间PQ中过点(p,q)的一条直线。现在来看图5-9a表示图像空间,(b)表示参数空间。在图像空间XY中,过点(xi,yi)的通用直线方程按式(5-15)可写为yi=pxi+q,也可以按式(5-16)写为q=-pxi+yi;它表示在参数空间PQ里的另一条直线。设这两条直线在参数空间PQ里相交于点(p′,q′),这里点(p′,q′)对应图像空间XY中一条过点(xi,yi)和(xi,yi)的直线,因此在图像空间XY中过点(xi,yi)和(xj,yj)的直线上的每个点都对应在参数空间PQ里的一条直线,这条直线相交于点(p′,q′)。由此可知,在图像空间中共线的点对应在参数空间里相交的线。反过来在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。这就是点线对偶性。Hough变换就是根据这些关系把在图像空间中的检测问题转换到参数空间里,通过较简单的累加统计完成检测任务。在具体计算时需要在参数空间PQ里建立一个二维累加数组。设这个累加数组为A(p,q),如图5-10所示。其中[Pmin,Pmax]和[qmin,qmax]分别为预期的斜率和截距的取值范围。开始时置数组A为零,然后对每一个图像空间中的给定点,让p取遍p轴上所有可能的值,并根据式(5-16)算出对应的q,再根据p和q的值(设都已经取整)对A累加:A(p,q)=A(p,q)+1,累加结束后,根据A(p,q)的值就可知道有多少点是共线的,即A(p,q)的值就是在(p,q)处共线点的个数。同时(p,q)值也给出了直线方程的参数,于是我们得到了点所在的线。图5-9 图像空间和参数空间中点和线的对偶性图5-10 参数空间里的累加数组示意图假设我们把P轴分成K份,即P取K个值,那么对每一个点(xk,yk)由式(5-16)可得到q的K个值。因为图中有n个点,所以这里就需要nK次运算。可见运算量是n的线性函数。如果K比n小,则总计算量必小于n2,这就是Hough变换的优势所在。Hough变换不仅可用来检测直线和连接处在同一条直线上的点,也可以用来检测满足解析式f(x,c)=0形式的各类曲线并把曲线上的点连接起来。这里x是一个坐标矢量,在二维图像中是一个二维矢量,c是一个系数矢量,它可以根据曲线的不同,从二维、三维到四维等,凡能写出方程的图形,都可以利用Hough变换来检测。自然界有许多要素有一定的形状、分布与伸展方向,但可能受其他因素遮蔽而显现得不清晰或断断续续,例如,地质体的线性构造、环形构造等,在地质探矿、地质稳定性分析等方面都有重要意义,可是在遥感图像上有时反映得不太清楚,如果借鉴Hough变换的基本思想来处理图像,可能有助于构造信息的提取。

7,什么是Hough变换

Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。
你你说的是什么意思说的
hough变换利用图像空间和hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在hough参数空间寻找累加器峰值的方法检测直线。例如,图1(a)中的九条线段对应于如图1(b)所示的其hough参数空间的九个累加器峰值。图1(b)中,hough参数空间的横纵坐标分别为直线极坐标方程:ρ=x×cos(θ) + y×sin(θ) 的两个参数ρ和θ。九个峰值的ρ和θ值唯一的确定其对应线段所在直线的两个参数。并且线段的长度决定坐标(ρ,θ)处的累加值的大小。

8,Python OpenCV 霍夫Hough Transform直线变换检测原理图像处理第 3

霍夫变换(Hough Transform)是图像处理领域中,从图像中识别几何形状的基本方法之一。主要识别具有某些相同特征的几何形状,例如直线,圆形,本篇博客的目标就是从黑白图像中识别出直线。 翻阅霍夫直线变换的原理时候,橡皮擦觉得原理部分需要先略过,否则很容易在这个地方陷进去,但是问题来了,这个原理略过了,直接应用函数,里面有些参数竟然看不懂。例如极坐标,角度扫描范围,这种函数就属于绕不过去的知识点了,所以本文转移方向,死磕原理,下面的博文将语无伦次的为你展示如何学习原理知识。 因为数学知识的贫乏,所以在学习阶段会涉及到很多基础概念的学习,一起来吧。 首先找到相对官方的资料,打开该 地址 下面是一个数学小白对原理的学习经验。 教材说:众所周知,一条直线在图像二维空间可由两个变量表示。 抱歉,小白还真不知道……即使学习过,这些年也早已经还给老师了。 一开始难道要学习笛卡尔坐标系,不,你低估小白的能力了,我第一个查询的是 θ 读作 西塔 ,是一个希腊字母。 什么是笛卡尔坐标系? 这个比较简单,直角坐标系。 斜率和截距 斜率,亦称“角系数”,表示一条直线相对于横坐标轴的倾斜程度。 一条直线与某平面直角坐标系横坐标轴正半轴方向的夹角的正切值即该直线相对于该坐标系的斜率。 如果直线与 x 轴互相垂直,直角的正切直无穷大,故此直线不存在斜率。 对于一次函数 y=kx+b , k 就是该函数图像的斜率。 在学习的时候,也学到如下内容: 截距:对 x 的截距就是 y=0 时, x 的值,对 y 的截距就是 x=0 时, y 的值, 截距就是直线与坐标轴的交点的横(纵)坐标。 x 截距为 a , y 截距 b ,截距式就是: x/a+y/b=1(a≠0且b≠0) 。 斜率:对于任意函数上任意一点,其斜率等于其切线与 x 轴正方向所成的角,即 k=tanα 。 ax+by+c=0中,k=-a/b 。 什么是极坐标系? 关于极坐标系,打开 百度百科 学习一下即可。 重点学到下面这个结论就行: 找资料的时候,发现一个解释的比较清楚的 博客 ,后续可以继续学习使用。 继续阅读资料,看到如下所示的图,这个图也出现在了很多解释原理的博客里面,但是图下面写了一句话 在这里直接蒙掉了,怎么就表示成极坐标系了?上面这个公式依旧是笛卡尔坐标系表示直线的方式呀,只是把 k 和 b 的值给替换掉了。 为何是这样的,具体原因可以参照下图。 <center>chou 图</center> 继续寻找关于霍夫变换的资料,找到一个新的概念 霍夫空间 。 在笛卡尔坐标系中,一条直线可以用公式 表示,其中 k 和 b 是参数,表示的是斜率和截距。 接下来将方程改写为 ,这时就建立了一个基于 k - b 的笛卡尔坐标系。 此时这个新的方程在 k - b 坐标系也有一个新的直线。 你可以在纸上画出这两个方程对应的线和点,如下图所示即可。 <center>chou 图</center> 新的 k - b 坐标系就叫做霍夫空间,这时得到一个结论,图像空间 x - y 中的点 对应了 霍夫空间 k - b 中的一条直线 ,即图像空间的点与霍夫空间的直线发生了对应关系。 如果在图像空间 x - y 中在增加一个点 ,那相应的该点在霍夫空间也会产生相同的点与线的对应关系,并且 A 点与 B 点产生的直线会在霍夫空间相交于一个点。而这个点的坐标值 就是直线 AB 的参数。 如果到这里你掌握了,这个性质就为我们解决直线检测提供了方法,只需要把图像空间的直线对应到霍夫空间的点,然后统计交点就可以达到目的,例如图像空间中有 3 条直线,那对应到霍夫空间就会有 3 个峰值点。 遍历图像空间中的所有点,将点转换到霍夫空间,形成大量直线,然后统计出直线交会的点,每个点的坐标都是图像空间直线方程参数,这时就能得到图像空间的直线了。 上述的内容没有问题,但是存在一种情况是,当直线趋近于垂直时,斜率 k 会趋近于无穷大,这时就没有办法转换了,解决办法是使用法线来表示直线。 上文提及的斜截式如下: 通过第二个公式,可以得到下述公式: 此时,我们可以带入一些数值进行转换。 图像空间有如下的几个点: 转换后的函数,都可以在霍夫空间 θ - ρ (横坐标是 θ ,纵坐标是 ρ )进行表示。 原理这时就比较清晰了: 除了一些数学知识以外,经典的博客我们也有必要记录一下,方便后面学习的时候,进行复盘。 本部分用于记录本文中提及的相关数学原理,后续还要逐步埋坑。 今天涉及了一点点数学知识,能力限制,大家一起学习,有错误的地方,可以在评论区指出,不胜感激。 希望今天的 1 个小时(今天内容有点多,不一定可以看完),你有所收获,我们下篇博客见~ 相关阅读 技术专栏 逗趣程序员

9,求hough变换问题

这样的代码网上很多。这个是我copy来的 Input: Original image in the form of an array: Image1[xMax][yMax] Output: New image : Image2 [xMax][yMax] containing the detected straight lines. Intermediate data structure: Hough [tMax][rMax] to calculate the corresponding lines. Algorithm: /* Fill in the Hough array*/ for (x=0; x< xMax; x++)for (y=0 ; y< yMax ; y++)if ( Image1[x][y] > IThresh)for (t=0 ; t< tMax ; t++)r = (x-xMax/2)*cos(t) +(y-yMax/2)*sin(t) ; if (r >0) } /* Process Hough array to find strong maxima */ for (t = 0; t < tMax / 2; t++) for (r = 0; r < rMax; r++) if (Hough[t][r] > Hthresh) /* Check 5x5 neighborhood for max */ max = TRUE; for (dt = (t - 2); dt <= (t + 2); dt++) for (dr = (r - 2); dr <= (r + 2); dr++) if ((dr >= 0) && (dr < rMax) && (dt >= 0) && (dt < tMax) && (Hough[dt][dr] > Hough[t][r])) max = FALSE; break; } /* Process Hough array to create output image array */ if (max == TRUE) makeLine(r, t); } } void makeLine (r,t) for (x=0 ; x<xMax ; x++) /* calculate y = r/sin (t) ?x*cotg(t) and fill in the Image2 array */ } /********************************************************/
这样的代码网上很多。这个是我copy来的 Input: Original image in the form of an array: Image1[xMax][yMax] Output: New image : Image2 [xMax][yMax] containing the detected straight lines. Intermediate data structure: Hough [tMax][rMax] to calculate the corresponding lines. Algorithm: /* Fill in the Hough array*/ for (x=0; x< xMax; x++)for (y=0 ; y< yMax ; y++)if ( Image1[x][y] > IThresh)for (t=0 ; t< tMax ; t++)r = (x-xMax/2)*cos(t) +(y-yMax/2)*sin(t) ; if (r >0) } /* Process Hough array to find strong maxima */ for (t = 0; t < tMax / 2; t++) for (r = 0; r < rMax; r++) if (Hough[t][r] > Hthresh) /* Check 5x5 neighborhood for max */ max = TRUE; for (dt = (t - 2); dt <= (t + 2); dt++) for (dr = (r - 2); dr <= (r + 2); dr++) if ((dr >= 0) && (dr < rMax) && (dt >= 0) && (dt < tMax) && (Hough[dt][dr] > Hough[t][r])) max = FALSE; break; } /* Process Hough array to create output image array */ if (max == TRUE) makeLine(r, t); } } void makeLine (r,t) for (x=0 ; x/* calculate y = r/sin (t) ?x*cotg(t) and fill in the Image2 array */ } /********************************************************/

10,c 中关于角度计算的hough算法

/// /// 检测直线/// /// hough变换后的曲线交点个数,取值越大,找出的直线越少public Bitmap hough_line(Bitmap bmpobj, int cross_num) int x = bmpobj.Width; int y = bmpobj.Height; int rho_max = (int)Math.Floor(Math.Sqrt(x*x+y*y))+1; //由原图数组坐标算出ρ最大值,并取整数部分加1 //此值作为ρ,θ坐标系ρ最大值 int[,] accarray = new int[rho_max,180]; //定义ρ,θ坐标系的数组,初值为0。 //θ的最大值,180度 double[] Theta = new double[180]; //定义θ数组,确定θ取值范围 double i = 0; for (int index = 0; index < 180; index++) Theta[index] = i; i += Math.PI/180; } double rho; int rho_int; for (int n = 0; n < x; n++) for (int m = 0; m < y; m++) Color pixel = bmpobj.GetPixel(n, m); if (pixel.R == 0) for (int k = 0; k < 180; k++) //将θ值代入hough变换方程,求ρ值 rho = (m * Math.Cos(Theta[k])) + (n * Math.Sin(Theta[k])); //将ρ值与ρ最大值的和的一半作为ρ的坐标值(数组坐标),这样做是为了防止ρ值出现负数 rho_int = (int)Math.Round(rho / 2 + rho_max / 2); //在ρθ坐标(数组)中标识点,即计数累加 accarray[rho_int, k] = accarray[rho_int, k] + 1; } } } } //=======利用hough变换提取直线====== //寻找100个像素以上的直线在hough变换后形成的点 const int max_line = 100; int[] case_accarray_n = new int[max_line]; int[] case_accarray_m = new int[max_line]; int K=0; //存储数组计数器 for (int rho_n = 0; rho_n < rho_max; rho_n++) //在hough变换后的数组中搜索 for (int theta_m = 0; theta_m < 180; theta_m++) if (accarray[rho_n, theta_m] >= cross_num && K < max_line) //设定直线的最小值 case_accarray_n[K]=rho_n; //存储搜索出的数组下标 case_accarray_m[K]=theta_m; K=K+1; } } } //把这些点构成的直线提取出来,输出图像数组为I_out //I_out=ones(x,y).*255; Bitmap I_out = new Bitmap(x, y); for (int n = 0; n < x; n++) for (int m = 0; m < y; m++) //首先设置为白色 I_out.SetPixel(n, m, Color.White); Color pixel = bmpobj.GetPixel(n, m); if ( pixel.R == 0) for ( int k = 0; k < 180; k++) rho=(m*Math.Cos(Theta[k]))+(n*Math.Sin(Theta[k])); rho_int=(int)Math.Round(rho/2+rho_max/2); //如果正在计算的点属于100像素以上点,则把它提取出来 for ( int a = 0; a < K-1; a++) if (rho_int==case_accarray_n[a] && k==case_accarray_m[a]) I_out.SetPixel(n, m, Color.Black); } } } } } return I_out;}相关代码附上。有问题问我。。
那你知道怎么通过hough找直线吗?
35+564687
文章TAG:hough变换matlabhough变换

最近更新

  • 家庭发电,我想请问家庭发电需要什么家庭发电,我想请问家庭发电需要什么

    我想请问家庭发电需要什么2,家用光伏发电划算吗3,家里停电了要用那一种方式发电好4,家庭安装光伏发电的好处和坏处5,家用太阳能发电家里一个3p和2p空调每天都一直用还有热水器一6,家庭光伏.....

    问答 日期:2023-09-08

  • direct3d,Direct3D是什么意思direct3d,Direct3D是什么意思

    Direct3D是什么意思2,Direct3D是什么3,Direct3D是什么4,什么是Direct3D啊5,Direct3D是什么6,Direct3D是什么意思吖1,Direct3D是什么意思去下载一个新版的显卡驱动,或者重装DirectX试试换一张.....

    问答 日期:2023-09-08

  • 北京大数据外包公司有哪些北京大数据外包公司有哪些

    国内有哪些大型软件外包公司?北京舒慧时空信息技术有限公司No外包公司。北京舒慧是时空吗外包公司你想问北京舒慧时空信息科技有限公司公司是-0?北京万向是人力外包公司,北京万向is外包是.....

    问答 日期:2023-09-08

  • 储能系统,什么是分布式储能系统储能系统,什么是分布式储能系统

    什么是分布式储能系统2,变电站中的储能系统做什么用3,储能系统中电池时如何成组的4,家庭储能系统是否可以满足白天空调使用5,储能技术的电磁储能6,飞轮储能系统1,什么是分布式储能系统分布式.....

    问答 日期:2023-09-08

  • 经济学人 大数据,前瞻经济学人经济学人 大数据,前瞻经济学人

    简而言之,“Da数据”的特点是:数据量大、数据类型多样、数据加速增长、数据来源多样。掘金大学数据“鬼票”当时是,掘金大学数据“鬼票”当时是,_数据分析师考试昨日,《贵阳学院数据产业人.....

    问答 日期:2023-09-08

  • 升压模块,两个升压模块可以通过并联使用使整个升压的功率升高吗不是说使单升压模块,两个升压模块可以通过并联使用使整个升压的功率升高吗不是说使单

    两个升压模块可以通过并联使用使整个升压的功率升高吗不是说使单2,不损坏升压模块升压模块给4个450V2000uf的电容充电4个电容3,这是一块升压模块可以将电压升高我给它用手机充电宝输入5V.....

    问答 日期:2023-09-08

  • 缓存击穿,spring 注解缓存 能解决缓存穿透的问题吗缓存击穿,spring 注解缓存 能解决缓存穿透的问题吗

    spring注解缓存能解决缓存穿透的问题吗2,这个是电脑问题还是系统问题3,电脑出现开机画面后就重启这是怎么回事啊4,鼠标经常性的无反应但是在别人的电脑上运行良好别人的鼠标在我5,请电脑高.....

    问答 日期:2023-09-08

  • 芯片的制造过程,芯片IC制造的工艺流程是什么芯片的制造过程,芯片IC制造的工艺流程是什么

    芯片IC制造的工艺流程是什么2,集成电路的制作流程是怎样的3,ASIC芯片从研发到生产的整个过程是怎么样的能详细的介绍一下吗4,LED芯片制造工艺流程是什么5,芯片是怎样制造的6,芯片是怎么做的.....

    问答 日期:2023-09-08

118