Сглаживание ядра по преобразованию Хафа?

У меня есть массив, содержащий голоса (из преобразования Хафа) о том, где есть данные в кругах, которые я собрал. Как бы я пошел о сглаживании данных?

Это пример, который я сделал до сих пор (данных гораздо больше, и получить обзор невозможно). Я пытался делать то, что считал ядром более гладким, но, возможно, это не то, что я думал.

#include <iostream>

int main() {
double data[20][20];        // Unsmoothed array
double smoothed[20][20];    // Output array
double kernel[3][3];        // Kernel for smoothing

kernel[0][0] = 0.05;
kernel[0][1] = 0.1;
kernel[0][2] = 0.05;
kernel[1][0] = 0.1;
kernel[1][1] = 0.8;
kernel[1][2] = 0.1;
kernel[2][0] = 0.05;
kernel[2][1] = 0.1;
kernel[2][2] = 0.05;

double factor = (double)5 / (double)7; // To normalize the kernel
double counter = 0.0;

for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20; i++)
{
data[i][j] = counter;   // Elements go from 0 to 299
smoothed[i][j] = 0;     // Set all elements to zero
counter++;
}
}
for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20; i++)
{
if (i > 0 && j > 0 && i < 19 && j < 19)
{
smoothed[i][j] = (
kernel[0][0] * data[i - 1][j - 1] +
kernel[0][1] * data[i    ][j - 1] +
kernel[0][2] * data[i + 1][j - 1] +
kernel[1][0] * data[i - 1][j    ] +
kernel[1][1] * data[i    ][j    ] +
kernel[1][2] * data[i + 1][j    ] +
kernel[2][0] * data[i - 1][j + 1] +
kernel[2][1] * data[i    ][j + 1] +
kernel[2][2] * data[i + 1][j + 1]
) * factor;
}
}
}

for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20; i++)
{
std::cout << smoothed[i][j] << "    ";
}
std::cout << "\n";
}
}

Тем не менее, это дает тот же результат, что и входные данные — за исключением того, что они обрезают край данных, но в любом случае это не проблема для моих данных.

Это абсолютно неправильный способ сделать это, или я просто упускаю некоторые детали?

0

Решение

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

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

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

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