2014-01-08 2 views
0

У меня возникла довольно странная проблема с моим приложением, которое предназначено для применения фильтра Sobel к изображению.Странное (умноженное) изображение PPM после фильтрации Sobel

Проблема в том, что каждый раз, когда у меня есть изображение, множится и перемещается немного. Номер умножения зависит от размера изображения.

Это пример того, как это выглядит:

Исходное изображение

initial image

После FILTR добавил

out picture

Для простоты я сейчас работает на одном цвете и один топор.

Это код Собела фильтра:

///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]; 

и это работает правильно.

Может кто-нибудь, пожалуйста, скажите мне, что не так с этим кодом?

ответ

0

Ваши размеры SY: [3][3], но вы инициализируете значения до [2][14]. Это классическое неопределенное поведение.

+0

Это было не это, но thatnk вы за указание на это. Я не знаю, как, но те значения, которые редактируются после публикации. Теперь я отправляю правильные. – sebap123

Смежные вопросы