ヒントをいくつかあげます。画像処理の背景知識が必要です。詳細については、2、3を参照してください。
- 2は
c
接線距離の実装です
- 3は接線距離をより詳細に説明する論文です
画像の畳み込み
3によると、あなたがする必要がある最初のステップは、画像を滑らかにすることです。以下に、 3つの異なるスムーズ操作の結果を示します(セクション4/3を確認してください)(左の列は結果の画像を示し、右の列は元の画像と畳み込み演算子を示しています)。このステップでは、離散ベクトルを連続ベクトルにマッピングして、微分可能にします。著者は、ガウス関数を使用することを提案しています。画像の畳み込みについてより多くの背景が必要な場合は、ここに例があります。

この手順が完了したら、水平シフトと垂直シフトを計算しました。

スケーリング接線の計算
ここでは、 2で実装された接線計算の1つであるスケーリング接線を示します。3から、変換は次のようになります。

/* scaling */
for(k=0;k<height;k++)
for(j=0;j<width;j++) {
currentTangent[ind] = ((j+offsetW)*x1[ind] + (k+offsetH)*x2[ind])*factor;
ind++;
}
td.c
in 2の実装の最初に、次の定義を知っています。
factorW=((double)width*0.5);
offsetW=0.5-factorW;
factorW=1.0/factorW;
factorH=((double)height*0.5);
offsetH=0.5-factorH;
factorH=1.0/factorH;
factor=(factorH<factorW)?factorH:factorW; //min
著者はサイズ16x16の画像を使用しています。だから私たちは知っています
factor=factorW=factorH=1/8,
と
offsetH=offsetW = 0.5-8 = -7.5
また、すでに計算したことに注意してください
x1[ind]
=
、
x2[ind]
=
そのため、これらの定数をプラグインします。
currentTangent[ind] = ((j-7.5)*x1[ind] + (k-7.5)*x2[ind])/8
= x1 * (j-7.5)/8 + x2 * (k-7.5)/8.
j
(もk
)は0から15までの整数であるため(画像の幅と高さは16ピクセルです)、はから(j-7.5)/8
の間の小数です。-0.9375
0.9375
(j+offsetW)*factor
つまり、各ピクセルの変位は、ピクセルから画像の中心までの水平距離に比例すると思います。同様に、垂直方向の変位もわかります(k+offsetH)*factor
。
回転接線の計算
回転接線は以下のように定義されます3:

/* rotation */
for(k=0;k<height;k++)
for(j=0;j<width;j++) {
currentTangent[ind] = ((k+offsetH)*x1[ind] - (j+offsetW)*x2[ind])*factor;
ind++;
}
前の結論を使用すると、に(k+offsetH)*factor
対応することがわかりy
ます。同様にに- (j+offsetW)*factor
対応し-x
ます。つまり、これが3で使用されている式とまったく同じであることがわかります。
2で実装された3で説明されている他のすべての接線を見つけることができます。下の3の画像が好きです。これは、さまざまな変換接線の変位効果を明確に示しています。

画像間の接線距離の計算
関数の実装に従ってtangentDistance
ください:
// determine the tangents of the first image
calculateTangents(imageOne, tangents, numTangents, height, width, choice, background);
// find the orthonormal tangent subspace
numTangentsRemaining = normalizeTangents(tangents, numTangents, height, width);
// determine the distance to the closest point in the subspace
dist=calculateDistance(imageOne, imageTwo, (const double **) tangents, numTangentsRemaining, height, width);
上記で十分に始めることができると思います。不足しているものがある場合は、3を注意深く読み、 2の対応する実装を参照してください。幸運を!