日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hough变换是如何检测出直线和圆的

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hough变换是如何检测出直线和圆的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(I)直線篇

1 直線是如何表示的?
對于平面中的一條直線,在笛卡爾坐標系中,常見的有點斜式,兩點式兩種表示方法。然而在hough變換中,考慮的是另外一種表示方式:使用(r,theta)來表示一條直線。其中r為該直線到原點的距離,theta為該直線的垂線與x軸的夾角。如下圖所示。

2 如果坐標系中有多個點,又怎樣識別出哪些點在一條直線上呢?
使用hough變換來檢測直線的思想就是:為每一個點假設n個方向的直線,通常n=180,此時檢測的直線的角度精度為1°,分別計算這n條直線的(r,theta)坐標,得到n個坐標點。如果要判斷的點共有N個,最終得到的(r,theta)坐標有N*n個。有關這N*n個(r,theta)坐標,其中theta是離散的角度,共有180個取值。
最重要的地方來了,如果多個點在一條直線上,那么必有這多個點在theta=某個值theta_i時,這多個點的r近似相等于r_i。也就是說這多個點都在直線(r_i,theta_i)上。
3 下面拿個例子說明:? 如果空間中有3個點,如何判斷這三個點在不在一個直線上,如果在,這條直線是的位置為? ?這個例子中,對于每個點均求過該點的6條直線的(r,theta)坐標,共求了3*6個(r,theta)坐標。可以發現在theta=60時,三個點的r都近似為80.7,由此可判定這三個點都在直線(80.7,60)上。
通過 r0theta 坐標系可以更直觀表示這種關系,如下圖:圖中三個點的(r,theta)曲線匯集在一起,該交點就是同時經過這三個點的直線。?

在實際的直線檢測情況中,如果超過一定數目的點擁有相同的(r,theta)坐標,那么就可以判定此處有一條直線。在r0theta 坐標系圖中,明顯的交匯點就標示一條檢測出的直線。
如下圖,可以判定出平面上的點共構成了兩條直線,即檢測出兩條直線。


4 代碼: 在matlab中提供了hough變換的代碼,有hough,houghlines,houghpeaks,具體的使用可以在help中查到。
(II)圓篇

繼使用hough變換檢測出直線之后,順著坐標變換的思路,提出了一種檢測圓的方法。
1 如何表示一個圓?
與使用(r,theta)來表示一條直線相似,使用(a,b,r)來確定一個圓心為(a,b)半徑為 r? 的圓。
2 如何表示過某個點的所有圓?
某個圓過點(x1,y1),則有:(x1-a1)^2 + (y1-b1)^2 = r1^2 。
那么過點(x1,y1)的所有圓可以表示為(a1(i),b1(i),r1(i)),其中r1∈(0,無窮),每一個 i 值都對應一個不同的圓,(a1(i),b1(i),r1(i))表示了無窮多個過點(x1,y1)的圓。
3 如何確定多個點在同一個圓上?
如(2)中說明,過點(x1,y1)的所有圓可以表示為(a1(i),b1(i),r1(i)),過點(x2,y2)的所有圓可以表示為(a2(i),b2(i),r2(i)),過點(x3,y3)的所有圓可以表示為(a3(i),b3(i),r3(i)),如果這三個點在同一個圓上,那么存在一個值(a0,b0,r0),使得 a0 = a1(k)=a2(k)=a3(k) 且b0 = b1(k)=b2(k)=b3(k) 且r0 =? r1(k)=r2(k)=r3(k),即這三個點同時在圓(a0,b0,r0)上。
從下圖可以形象的看出:

首先,分析過點(x1,y1)的所有圓(a1(i),b1(i),r1(i)),當確定r1(i)時 ,(a1(i),b1(i))的軌跡是一個以(x1,y1,r1(i))為中心半徑為r1(i)的圓。那么,所有圓(a1(i),b1(i),r1(i))的組成了一個以(x1,y1,0)為頂點,錐角為90度的圓錐面。
三個圓錐面的交點A 既是同時過這三個點的圓。
4 怎樣用代碼實現檢測圓的過程?
?上面的分析雖然很簡單,但是用代碼實現起來就麻煩了,首先過每一個點的(a(i),b(i),r(i))都有無窮多個,若是要檢測的點很多,要兩兩比較所有的(a,b,r)值是否相等實在是一個巨大的運算量。

總結

以上是生活随笔為你收集整理的hough变换是如何检测出直线和圆的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。