Как получить среднее и стандартное значение как Gabor Wavelet Feature

я пытаюсь реализовать функцию Gabor Wavelet, как описано в этой статье:
«Особенности текстуры для просмотра и извлечения данных изображения»

вектор признаков составлен из среднего значения и стандартного отклонения (пример вектора признаков имеет масштаб = 4 и ориентацию = 6)

введите описание изображения здесь

Код реализации:

void gabor_main(int argc, char **argv)
{
int img_height;             // height of input image
int img_width;              // width of input image
int side;                   // side (filter dimension = (2*side+1)*(2*side+1)) = 60
int scale;                  // number of scale
int orientation;            // number of orientation
int flag;                   // flag (removing the DC term) = 0 (False)

FILE* fp;
unsigned char *tmp_raw_img; // temporary raw image data
double Ul;                  // Uh (highest spatial frequency)
double Uh;                  // Ul (lowest spatial frequency)

Matrix* img_mat;            // input image
Matrix* F_r;                // result, real part
Matrix* F_i;                // result, imaginary part
Matrix* F_m;                // result, magnitude of real part and imaginary part

scale = 4;
orientation = 6;
Ul = 0.1;
Uh = 0.4;
flag = 0;
side = 60;.../* ----------------- Reading raw image ----------------- */.../* ----------------- Gabor filtered outputs ----------------- */
CreateMatrix(&F_r, img_height * scale, img_width * orientation); // memory allocation of real part matrix of the output
CreateMatrix(&F_i, img_height * scale, img_width * orientation); // memory allocation of imaginary part matrix of the output
CreateMatrix(&F_m, img_height * scale, img_width * orientation); // // memory allocation of magnitude of the output

GaborFilteredImg(F_r, F_i, img_mat, side, Ul, Uh, scale, orientation, flag);/* ----------------- Compute Feature Vector ----------------- */
// Magnitude of complex value
for (int h = 0; h < (img_height * scale); h++)
{
for (int w = 0; w < (img_width * orientation); w++)
{
F_m->data[h][w] = sqrt(F_r->data[h][w] * F_r->data[h][w] + F_i->data[h][w] * F_i->data[h][w]);
}
}

for(int i = 0; i < scale; i++)
{
for(int j = 0;j < orientation; j++)
{
double avg = Average(F_m, img_height, img_width, i, j);
double std = StandardDeviation(F_m, img_height, img_width, i, j);

// Print the result
std::cout << avg << " " << std << "\n";
}
}

FreeMatrix(F_r);
FreeMatrix(F_i);
FreeMatrix(F_m);
}

код среднего и стандартного отклонения:

double Average(Matrix* F_m, int img_height, int img_width, int scale, int orientation)
{
double avg = 0.0;

for (int h = (img_height * scale); h < (img_height * (scale + 1)); h++)
{
for (int w = (img_width * orientation); w < (img_width * (orientation + 1)); w++)
{
avg += F_m->data[h][w];
}
}
avg /= (img_height * img_width);

return avg;
}

double StandardDeviation(Matrix* F_m, int img_height, int img_width, int scale, int orientation)
{
double std = 0.0;
double avg = Average(F_m, img_height, img_width, scale, orientation);

for (int h = (img_height * scale); h < (img_height * (scale + 1)); h++)
{
for (int w = (img_width * orientation); w < (img_width * (orientation + 1)); w++)
{
double dif = F_m->data[h][w] - avg;
std += (dif * dif);
}
}
std = sqrt(std / (img_height * img_width));

return std;
}

нота:
код функции GaborFilteredImg я скопировал из этого http://vision.ece.ucsb.edu/texture/software/gabor.c

Я хотел бы спросить, если код, который я написал (начиная с раздела «Compute Texture Feature»), является правильным. Я не уверен в получении среднего и стандартного значения с учетом выходных данных F_r (действительная часть) и F_i (мнимая часть). В основном я вычисляю среднее значение и стандартное отклонение для каждого ответа банка фильтров Габора.

=== UPDATE ===

введите описание изображения здесь

Эти F_r и F_i являются результатом фильтрации Габора с использованием масштаба = 4 и ориентации = 6.
И F_r, и F_i имеют размерность (масштаб img_height *) * (ориентация img_width *) в основном состоят из сеток для каждого ответа банка фильтров Габора.

Затем я вычисляю величину F_m (x, y) = sqrt (F_r (x, y) * F_r (x, y) + F_i (x, y) * F_i (x, y))

Наконец, я вычисляю вектор признаков, который является средним и стандартным отклонением F_m

=== ИЗОБРАЖЕНИЙ ===

Ввод изображения (реальный): http://goo.gl/kc5BG

Габор банки (настоящие): http://goo.gl/0qM4E

Габор банки (мнимые): http://goo.gl/r7Fnk

Выход (реальный): http://goo.gl/nxVMn

Вывод (мнимый): http://goo.gl/SnD7p

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]