У меня возникла довольно странная проблема с моим приложением, которое предназначено для применения фильтра Sobel к изображению.Странное (умноженное) изображение PPM после фильтрации Sobel
Проблема в том, что каждый раз, когда у меня есть изображение, множится и перемещается немного. Номер умножения зависит от размера изображения.
Это пример того, как это выглядит:
Исходное изображение
После FILTR добавил
Для простоты я сейчас работает на одном цвете и один топор.
Это код Собела фильтра:
///sobel code
int SY[3][3] = {{ 1, 2, 1},
{ 0, 0, 0},
{-1, -2, -1}};
int sobY,sobX,sobI,sobJ;
long sumX,sumY;
int SUM;
for(sobX = 0;sobX<=(x-1);sobX++)
{
for(sobY = 0;sobY<=(y-1);sobY++)
{
sumY = 0;
sumX = 0;
if(sobY==0||sobY==(y-1))
{
SUM = 0;
} else if(sobX==0||sobX==(x-1))
{
SUM = 0;
} else
{
///Y gradient
for(sobI=-1;sobI<=1;sobI++)
{
for(sobJ=-1;sobJ<=1;sobJ++)
{
sumY = sumY + (int)(red[sobX+sobI][sobY+sobJ] * SY[sobI+1][sobJ+1]);
}
}
SUM = abs(sumX) + abs(sumY);
}
if(SUM>255)
SUM = 255;
if(SUM<0)
SUM = 0;
outputRed[sobX][sobY] = 255 - SUM;
}
}
Упрощенный код вместе с образцом изображения можно найти здесь: https://db.tt/szpEMZ3f
Я проверил чтение и сохранение без фильтра так этот фрагмент:
outputRed[sobX][sobY] = 255 - SUM;
выглядит, что
outputRed[sobX][sobY] = red[sobX][sobY];
и это работает правильно.
Может кто-нибудь, пожалуйста, скажите мне, что не так с этим кодом?
Это было не это, но thatnk вы за указание на это. Я не знаю, как, но те значения, которые редактируются после публикации. Теперь я отправляю правильные. – sebap123