2014-01-26 46 views
0

我試圖將代表網格(已知數量的行和列)的圖像轉換爲或多或少匹配表示網格狀圖案的圖片。Matlab中的圖像變換:平移和縮放

我使用imregtform函數來獲得仿射變換:

[ a b 0 ; 
    c d 0 ; 
    e f 1 ] 

和獲得TForm的應用到我的網格。它不能很好地工作。

請考慮以下簡化:

base=im2uint8(zeros(16)); base([3:5 10:12],[3:5 10:12])=255; 
target=im2uint8(zeros(16)); target([4:8 11:15],[4:8 11:15])=255; 
[optimizer, metric] = imregconfig('monomodal'); 
    optimizer.MaximumStepLength = 0.591; 
    optimizer.MaximumIterations = 100; 
tform = imregtform(base,target,'affine',optimizer,metric,'PyramidLevels',2); 
transformedBase = imwarp(base,tform,'OutputView',imref2d(size(target))); 

請參考以下link

其呈現在簡化圖像上使用上述功能的結果。我計算tform並將其應用於「基本」圖像以查看它是否與「目標」相匹配。這種策略適用於簡單翻譯的「目標」圖像,但如圖所示,不適用於翻譯和縮放的圖像。經過大量的優化器參數擺弄之後,這是我能得到的最接近的。

減小該optimizer.MaximumStepLength進一步導致其中TForm的變成單位矩陣的點[100; 010; 001]。

爲什麼這個簡單轉換很難實現?我會繞錯誤嗎?

我知道圖像不旋轉,它會幫助獲得一個沒有旋轉的變換矩陣嗎?我一直在追求這個想法,但還沒有想出如何做到這一點;有沒有可能自己計算縮放矩陣的方法?然後我可以創建一個tform基於imgtform'翻譯'設置。

回答

0

示例中的基礎和目標圖像與簡單的仿射變換無關。塊之間的間距不會與塊本身的數量相同。