Android Java - Как быстрее удалить шум изображения?
У меня есть этот код для уменьшения шума изображения:
for (int x = 0; x < bitmap.getWidth(); x++) {
for (int y = 0; y < bitmap.getHeight(); y++) {
// get one pixel color
int pixel = processedBitmap.getPixel(x, y);
// retrieve color of RGB
int R = Color.red(pixel);
int G = Color.green(pixel);
int B = Color.blue(pixel);
// convert into single value
R = G = B = (int) (0.299 * R + 0.587 * G + 0.114 * B);
// convert to black and white + remove noise
if (R > 162 && G > 162 && B > 162)
bitmap.setPixel(x, y, Color.WHITE);
else if (R < 162 && G < 162 && B < 162)
bitmap.setPixel(x, y, Color.BLACK);
}
}
Но время занимает очень много времени, чтобы получить результат. Есть ли другой способ оптимизировать этот код, чтобы сделать его быстрее?
1 ответ
Решение
Не используйте getPixel. Получить данные изображения в виде массива и использовать математику для доступа к правильному пикселю. Напишите математику так, чтобы использовалось наименьшее возможное умножение. То же самое для setPixel.
Не используйте Color.red(), Color.green() и т. Д. Используйте маскирование, это более эффективно, чем вызов функции.
Более того, загляните в NDK и сделайте это на языке C. Манипулирование изображениями в Java обычно менее чем оптимально.