如何在数学上表示图像的仿射变换?

时间:2018-02-19 05:33:50

标签: matlab mathematical-optimization gradient-descent affinetransform

我有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],这些索引不能正确。

任何有关如何确定成本函数框架的帮助都将受到高度赞赏。

0 个答案:

没有答案