在Hough变换上平滑内核?

时间:2017-05-17 17:55:18

标签: c++ smoothing

我有一个包含投票(来自Hough变换)的数组,其中有数据中的圆圈,我收集了。我将如何平滑数据?

这是我到目前为止所做的一个例子(数据更大,无法概述)。我尝试做我认为内核更平滑的东西,但它可能不是我想的那样。

#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 个答案:

没有答案