Log カーネルの実装に問題があります。このリンクhttp://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htmに示されているように、theta = 1.4 で 9x9 カーネルを実装しようとしています。
ただし、式自体に問題があります。誰かが中心の計算方法、つまり 9x9 カーネルで -40 を取得するために使用する x と y の値を教えてくれれば、非常にありがたいです。
Log カーネルの実装に問題があります。このリンクhttp://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htmに示されているように、theta = 1.4 で 9x9 カーネルを実装しようとしています。
ただし、式自体に問題があります。誰かが中心の計算方法、つまり 9x9 カーネルで -40 を取得するために使用する x と y の値を教えてくれれば、非常にありがたいです。
最近、私はLoGフィルターを実装しました。必要なのは、パラメーターとしての数式とシグマだけです。固定サイズのマスクが必要な場合は、フィルターマスク値をマトリックスに保存して使用するか、毎回再計算して必要なマトリックスを作成できます。フィルタのサイズは、そのサイズを超えるサイズが使用されている場合、シグマ値によって異なります。最大サイズを超えている残りの部分は、その式を使用してゼロに計算されるため、意味がありません。したがって、たとえば、フィルターサイズ= 9X9を取得します。次に、フィルター自体を行列として計算するには、次の値を使用して数式を実行する必要があります。
int halfsize = size / 2;
for (int x = -halfsize; x < halfsize; ++x)
for (int y = -halfsize; y < halfsize; ++y)
mask[x][y] = LoGFunction(x, y);
そんな感じ。また、フィルターサイズは奇数値でなければならないことも意味します。お役に立てれば。あなたの場合、サイズ=9シグマ=1.4 xおよびyは-4から4に変化します。ポイント(0、0)(フィルターの中心)で数式を使用すると、-12に近い値が得られます。
しかし、シグマを0.2986にすると、-40に近い必要な答えが得られます。また、シグマ値が1.4に等しいと書かれている理由もわかりません。5月ba何かが足りません。間違えた場合は訂正してください。
数式について心配する必要はありません。これは係数を生成するために使用されるだけです。これらの 9x9 係数を画像に適用するだけです。
例 (テストされていないコード!):
const int K = 9;
const int K2 = K / 2;
const int NORM = 500; // constant for normalising filter gain
const int coeffs[K][K] = { ... };
int in_image[M][N];
int out_image[M][N];
for (i = K2; i < M - K2; ++i)
{
for (j = K2; j < N - K2; ++j)
{
int term = 0;
for (di = -K2; di <= K2; ++di)
{
for (dj = -K2; dj <= K2; ++dj)
{
term += in_image[i + di][j + dj] * coeff[K2 + ii][K2 + jj];
}
}
out_image = term / NORM;
}
}