2013-08-01 3 views
1

Я пытаюсь реализовать средний фильтр для цветного изображения для приложения для Android. Когда я применяю фильтр на выбранном изображении.Что я делаю неправильно с этим средним фильтром 3x3?

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

enter image description here Отфильтрованного изображение enter image description here

+0

возможно дубликат [ArrayIndexOutOfBoundsException при расчете Mean/Средние значения из массива пикселов] (http://stackoverflow.com/questions/18074678/arrayindexoutofboundsexception-while-calculating-mean-average-values-from -arra) – User1204501

ответ

2

В каждом пикселе вы читаете значение цвета из pixels[index], но переменная индекс является индексом для отфильтрованного массива, а не оригинал изображения , Вы должны прочитать данные пикселя по индексу x+filterX+width*(y+filterY) и будьте осторожны по краям изображения.

Большая проблема заключается в том, что суммы красного, зеленого и синего никогда не будут сброшены на 0, а это означает, что они будут продолжать накапливать значения пикселей. Это должно объяснить обесцвечивание. Добавить:

 sumR = 0; 
     sumG = 0; 
     sumB = 0; 

     for (int i = 0; i < RArray.length; i++) { 
      sumR += RArray[i]; 
      sumG += GArray[i]; 
      sumB += BArray[i]; 
     } 
+0

Как вы думаете, что не так с цветовым пространством? – User1204501

+1

Я думал, что обесцвечивание может быть вызвано проблемой цветового пространства, но это, вероятно, другое дело (не сбрасывая суммы для красного, зеленого и синего на ноль) – Joni

+0

программа по какой-то причине сменила часть пикселей [index], а также сброс sumR/G/B. – User1204501

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