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與'翻譯'設置。