2016-03-13 3 views
-1

Я реализовал алгоритм размытия, и он работает. Результатом является размытое изображение, но если пропуск несколько раз алгоритм для моего изображения, изображение остается неизменным. Это похоже на дополнительные (более 1) проходы, которые не оказывают никакого эффекта.Применение алгоритма размытия несколько раз

for (f=0; f<100; f++) { 
    for (y = 0; y < image->h; y++) { 
     for (x = 0; x < image->w; x++) { 
      int SUM = 0; 



      imageBlur->pixels[y * imageBlur->w + x] = SUM/9; 
     } 
    } 
} 

Не имеет значения, если f равно 1 или 500, это все тот же результат, что и однократное размытие.

+1

Возьмите очень маленькое изображение, а затем шаг через код по строкам в отладчике, чтобы узнать, что произойдет. –

+1

Это вряд ли кажется удивительным, так как ваше размытое значение пикселя представляется в среднем равным 9 окружающим пиксельным значениям каждый раз. –

+0

@ 500-InternalServerError Да алгоритм суммирует окружающие пиксели и усредняет значение для центра. На каждом проходе среднее значение должно быть разным. – G90

ответ

0

Каждый проход вы снова читаете ту же image не заменив его с размытой один: imageBlur Вам нужно выполнить задание так или иначе - некоторые вещи, как

image->pixels[y * imageBlur->w + x] = SUM/9; 
+0

Да, вы правы. Виноват. – G90

+0

Поскольку пиксель, который обрабатывает изменения, не влияет на его соседей, поскольку он станет окружающим пикселем ??? – G90

+1

ну, вы можете просто вычислить новое изображение imageBlur каждый раз, а затем, прежде чем перейти к следующему пропуску, присвойте значения изображений тем же цветам из размытого. Таким образом, вы не сможете изменять значения пикселей во время выполнения текущего прохода. Конечно, это вдвое больше памяти, – GavinBrelstaff

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