2011-07-08 63 views
0

我正在研究一個涉及使用A *算法(Thanks, Patrick Lester, for a great tutorial)查找路徑的項目。提供了一系列PNG地圖,感興趣的地點由Web服務接收的座標指定,問題是顯示這些地點之間的路徑。起初有點災難,因爲各個層次不在同一個座標系統中,所以從一個層面移動到另一個層面牽涉到無意中在x和y座標上的移動,而不是僅僅改變z - 使得成本和啓發式電平變化完全是奇怪的,有一些非最優路徑被生成。導出給定圖像和變換圖像的變換矩陣?

要解決這個問題,我可以將路徑計算分解爲每個級別的解決方案,並將其作爲中間的未計算的步驟移動到新的級別。相反,我選擇將所有的水平貼圖都作爲一個座標系統的一部分,這樣,如果您查看一個水平面上的升降梯,升降臺會出現在它到達相同x和y座標的所有水平面上。

唯一的問題是原始地圖使用的興趣點的座標。這些座標不匹配新地圖上的任何有意義的內容。雖然我相信路徑正在很好地工作,但整個系統並不是因爲路徑的起點和終點沒有在地圖系統中正確繪製。

要從舊地圖中獲取新地圖(全部位於一個座標空間中),每個地圖都以簡單且可重複的方式進行轉換。我想如果我得到一個座標並對其應用相同的變換,就像應用到它所指的地圖一樣,一切都會好的。地圖被旋轉​​,調整大小和翻譯。

給定一個圖像和生成的變換圖像是否有一種方法來導出變換矩陣?這是一個iPhone項目,非常理想,我正在尋找CGAffineTransform。對於每張地圖,我都可以再次操作舊地圖以獲取新地圖並記錄正在完成的轉換,但我很好奇是否有辦法在此處倒退。

(讀者 - 如果你能幫助標籤這個問題更好行行好,這是出了一點我的面積)

+0

這個轉換是一個仿射的轉換,所以它不是嚴格意義上的矩陣 –

+0

我不清楚你是否有原始的興趣點和轉換的,所以你可以寫下轉換的方程式或不是 –

+0

我在原始地圖的座標系中具有POI。我有原始地圖以及轉換後的地圖。我希望使用原始和變換後的地圖(大部分來自學術興趣)推導出變換,以便將其應用於POI,將它們轉換爲新地圖的座標系。如果可以導出變換,我可以從舊的和新的(變換的)地圖中獲取一些任意的POI。 –

回答

1

爲了找到一個轉換,您需要最小的點座標(原始和轉換)等於參數的數量。

如果您使用的是圖像,而不是完美的幾何實體,那麼Least Squares的計算要好得多。通過使用更多點,可以減少由空間量化(即像素)引起的誤差。

如果你的谷歌爲"fit affine transformation least squares"你會發現用於這個目的的幾個函數的代碼,包括Python中的this one

HTH!

0

我只能走馬觀花看了你的問題 - 對不起!但是從標題和一些數學,聽起來應該有一種方法。使用一些矩陣代數:

xA = B 

//Where A is the original image, B is the transform, and x is the transform matrix. 
//Now to find x: 

x = B(A^-1) 

即雙方通過A的倒數乘以將讓你找到X,變換矩陣(見here更多的矩陣求逆)。

如何將它應用於CGAffineTransform,或者在您的案例中查找圖像的反轉,我不太確定!但上面的數學表明,你問的是絕對可行的。希望這可以幫助!

+1

OP需要一個「仿射」變換,而不是線性變換。雖然類似,但仿射變換的數學並不像線性變換那麼簡單。 http://en.wikipedia.org/wiki/Affine_transformation –

+0

@belisarius感謝糾正我 - 我不知道是這種情況! –