CSS アルゴリズムについて勉強していますが、「アーク長パラメーター」の概念がわかりません。
文献によると、平面曲線 Gamma(u)=(x(u),y(u)) であり、この u はアーク長パラメーターであり、ガウス カーネル g もこの u によってパラメーター化されているとのことです。
私が何か間違っていたら止めてください、しかし、ピクセルの x と y の位置ではありませんか? 別のパラメータでどのように表されますか?
文献で最初に見たときはわからなかったので、コードを調べました。どうやら、私はさらに戸惑いました。
ここにコードの一部があります
void getGaussianDerivs(double sigma, int M, vector<double>& gaussian,
vector<double>& dg, vector<double>& d2g) {
int L = (M - 1) / 2;
double sigma_sq = sigma * sigma;
double sigma_quad = sigma_sq*sigma_sq;
dg.resize(M); d2g.resize(M); gaussian.resize(M);
Mat_<double> g = getGaussianKernel(M, sigma, CV_64F);
for (double i = -L; i < L+1.0; i += 1.0) {
int idx = (int)(i+L);
gaussian[idx] = g(idx);
// from http://www.cedar.buffalo.edu/~srihari/CSE555/Normal2.pdf
dg[idx] = (-i/sigma_sq) * g(idx);
d2g[idx] = (-sigma_sq + i*i)/sigma_quad * g(idx);
}
}
そのため、コードは M の単純な 1D ガウス カーネル アパーチャ サイズを使用しているようで、その 1 次導関数と 2 次導関数を計算しようとしています。私の知る限り、1D Gaussian カーネルには、水平座標である x とスケールである sigma のパラメーターがあります。「弧長パラメータu」はxの変数に相当するようです。コードの後半で、輪郭上の x と y のセットを直接畳み込むため、これは意味がありません。
これは何ですか?
PS。私の質問に答えようとした仲間に返信したので、質問を修正する必要があると思います。
私が混乱しているのは、このパラメーター 'u' がコードにどのように実装されているかということです。上記のコード全体を理解したと思います-もちろん、コードの一部のみを挿入しました-しかし、問題は、アルゴリズムの「改善された」バージョンでそれがどうなるかわかりません。この「アーク長パラメーター」の代わりに「アフィン長パラメーター」を使用していると書かれており、その概念をコードに実装する方法がよくわかりません。
文献によると、アーク長パラメーターとアフィン長パラメーターの主な違いは、サンプリング間隔であり、アーク長パラメーターは垂直方向と水平方向に 1 を使用し、対角方向に 2 の根を使用します。上記のコードの一部は for ループを使用して 1d Gaussian の 1 次導関数と 2 次導関数を計算し、間隔 1 の値を直接挿入しているので意味がありますが、異なる変数で異なる間隔を使用するとどうなるでしょうか? 「for ループ」を使用できない可能性はありますか?