所以这是我的代码,用于获取红色值的方差(和标准偏差)。绿色和蓝色我也做了同样的事情。
/*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));
}
我的问题是,r,g,b的每个方法都返回0.0的方差,我真的无法理解为什么。我使用Java的栅格对平均亮度值做了同样的工作,它工作正常。现在我无法理解为什么颜色不起作用。我尝试了一切。知道为什么我得到0.0以及如何修复它?
答案 0 :(得分:1)
您需要获取循环内每种颜色的像素,而不仅仅是(0,0)处的颜色:
public static double varianceRed(BufferedImage image) {
double mean = meanValueRed(image);
double sumOfDiff = 0.0;
for (int y = 0; y < image.getHeight(); ++y) {
for (int x = 0; x < image.getWidth(); ++x) {
Color r = new Color(image.getRGB(x, y)); // Moved inside loop, with proper indexes
double colour = r.getRed() - mean;
sumOfDiff += Math.pow(colour, 2);
}
}
return sumOfDiff / ((image.getWidth() * image.getHeight()) - 1);
}
PS:您的代码中似乎也有一个大小为1x1的图片的错误。 ; - )