我有2个灰度图像A和B.我在B上执行仿射变换(旋转和平移)。然后计算(A-B *)的标准偏差,其中B *是:
B* = affine_transform(B)
我想运行梯度下降来找到θ,tx和ty的最佳值,这样我的函数f(θ,tx,ty)就会最小化。
f(θ,tx,ty) = σ(A-B*)
然而,我在实际上用数学方法写出仿射变换时遇到了麻烦。在我为优化过程计算梯度之前,我需要这样做。
我知道转换后的点数将按以下方式计算:
[U V 1] = [X Y 1]*[cos(θ) -sin(θ) 0; sin(θ) cos(θ) 0; tx ty 1]
其中X = [x1,x2 ..... xn]'和Y = [y1,y2 ..... ym]'将是表示B的像素索引的列向量。
在此之后,我将使用一些插值方法在其新计算的索引处重新分配像素值。然而,上述索引转换步骤是实际使用θ,tx或ty的计算的唯一部分。
我最初假设我必须通过θ,tx和ty部分区分转换矩阵,但这会产生看似不正确的结果:
区分wrtθ:
[sin(θ) -cos(θ) 0; cos(θ) -sin(θ) 0; 0 0 0]
wrt tx:
[0 0 0; 0 0 0; 1 0 1]
wrt ty:
[0 0 0; 0 0 0; 0 1 1]
tx和ty的偏微分将图像中的所有像素映射到相同的2个索引[1,0]和[0,1],这些索引不能正确。
任何有关如何确定成本函数框架的帮助都将受到高度赞赏。