我在極座標網格上有圖像。這個圖像應該被轉換成笛卡爾網格,但我知道的唯一算法對此非常緩慢。現在我使用笛卡爾網格,爲每個點找到r和theta值,然後查看兩個向量以找到由以下定義的最小誤差:極座標 - >笛卡爾轉換的快速算法
min {(th_vec - theta)^ 2 +(range - r)^ 2}
這給外部嵌套的for循環內嵌套的for循環,所以我有複雜的O(N^4)。 512x512圖像使用一整分鐘來完成。當然,這樣的複雜性不能使用,所以我想知道是否有人知道任何更快的算法來做到這一點?
我有圖像和兩個向量。圖像的X軸是角度,而圖像的Y軸是距離中心的長度。角度始終爲0-2pi,範圍從0到r_max。
預先感謝您。
編輯:範圍從0到r_max,而不是從之前的-r_max到r_max。我看到有一些錯誤的理解。我已經使用了正常的,反向的轉換;
r=sqrt(x^2 + y^2);
theta=atan2(y,x);
的問題是,我必須首先轉換x和y值與x「和y」的值,由於網格是從-r_max在所得圖像中,以r_max時,但在數據像素。所以我有一個512x512的圖像,但r_max可以是3.512。所以我必須將每個像素值轉換爲網格值,然後找到r和theta值。當我找到r和theta值時,我必須跑兩個向量,範圍和th_vec,找到匹配的原始圖像像素:
min {(range - r)^ 2 +(th_vec - theta )^ 2}
這給我一個複雜的O(n^4),因爲th_vec和範圍向量與圖像大小相同。所以如果我有一個512x512元素的矩形矩陣,我必須運行槽68 719 476 736個元素,這很慢。所以我想知道是否有更快的算法?我不能改變輸入數據,所以據我所知,如果不從三角測量和內容開始,這是唯一的方法,但是這在內存時代是很昂貴的。
這是幹什麼用的?另外,爲什麼你沒有從0到π的角度或範圍從0到r_max? 2 * pi給出一個完整的圓,那麼爲什麼你需要負距離? – 2009-08-17 18:43:56
您的極座標網格是否相對於極座標統一分區? – 2009-08-17 19:13:45
如果你發現r_0和th_0是你的x,y的浮點值,那麼你只需要看看你的極座標圖像中的四對(r,th),即(r_0,th_0)的四個最近鄰居,所以(r_0),ceil(r_0)和floor(th_0),ceil(th_0)的四種組合,其中floor()和ceil()產生的是圓角到極座標網格的東西。 – 2009-08-19 11:54:22