我正在尝试将表示网格(具有已知行数和列数)的图像转换为或多或少匹配表示网格状图案的图片。
我正在使用 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]的点。
为什么这个简单转换难以实现?我绕错了吗?
我知道图像没有旋转,是否有助于获得不旋转的变换矩阵?我一直在追求这个想法,但还没弄明白怎么做;有没有办法自己计算缩放矩阵?然后我可以使用'translation'设置基于 imregtform 创建 tform 。
答案 0 :(得分:0)
示例中的基本和目标图像与简单的仿射变换无关。块之间的间距不会与块本身相同。