Итак, вот мой код для получения дисперсии (и стандартного отклонения) значений красного цвета. Я сделал то же самое для Green и Blue.Получение отклонения и стандартного отклонения от значений RGB Обработка изображений Java
/*Red Variance*/
public static double varianceRed(BufferedImage image){
Color r = new Color(image.getRGB(0, 0));
double mean = meanValueRed(image);
double sumOfDiff = 0.0;
for (int y = 0; y < image.getHeight(); ++y){
for (int x = 0; x < image.getWidth(); ++x){
double colour = r.getRed() - mean;
sumOfDiff += Math.pow(colour, 2);
}
}
return sumOfDiff/((image.getWidth() * image.getHeight()) - 1);
}
/*Red Standard Deviation*/
public static double standardDeviationRed(BufferedImage image){
return Math.sqrt(varianceRed(image));
}
Моя проблема в том, что каждый метод г, г, б возвращается дисперсию 0.0, и я на самом деле просто не могу обернуть мою голову вокруг почему. Я сделал то же самое для среднего значения яркости с использованием растра Java, и он отлично работает. Теперь я не могу понять, почему цвет не работает. Я все пробовал. Любая идея относительно того, почему я получаю 0.0 и как это можно исправить?
возможно, потому что 'r' никогда не переназначается внутри цикла? –
Вы только когда-либо получаете значение первого пикселя ('image.getRGB (0, 0)'), вы, вероятно, захотите получить значение для каждого пикселя внутри цикла. – haraldK
@haraldK Привет, что я должен использовать для получения значения каждого пикселя? Спасибо за ваш вклад. – user1167596