2014-01-26 95 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

示例中的基础和目标图像与简单的仿射变换无关。块之间的间距不会与块本身的数量相同。