Я пытаюсь написать программу (на практике C ++), которая может определять края изображения.Я использую SFML для загрузки изображения.
Я попробовал операцию Собеля и запутался с выходными значениями.Я получаю значение интенсивности от пикселей вокруг моего текущего пикселя, и я умножаю их на соответствующее значение ядра Собеля.Эти значения складываются вместе.
Моя проблема в том, что значения интенсивности входного сигнала варьируются от 0 до 255, но мое значение выхода может варьироваться от некоторого отрицательного значения (может быть меньше -255) до некоторого положительного значения (может быть больше 255).
Я не смог найти подсказки о том, как преобразовать их в значения в оттенках серого;мой InputImage - Greyscale, то есть r, g, b похожи.В качестве матрицы / ядра Собеля я использовал собственный класс Matrix.
// The Sobel-kernel-x looks like that
int kernel_x[] = { 1, 0, -1,
2, 0, -2,
1, 0, -1 }
for (int y = 1; y < height - 1; y++)
{
for (int x = 1; x < width - 1; x++)
{
int sum = 0;
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
sum += img.getPixel(x + j, y + i).r * sobelkernel_x.at(j + 1, i + 1);
}
}
//std::cout << sum << std::endl;
cur_img->setPixel(x, y, sf::Color(sum, sum, sum));
}
}