Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java图像处理中获取RGB值的方差和标准差_Java_Image_Image Processing - Fatal编程技术网

从Java图像处理中获取RGB值的方差和标准差

从Java图像处理中获取RGB值的方差和标准差,java,image,image-processing,Java,Image,Image Processing,这是我用来计算红色值的方差(和标准差)的代码。我对绿色和蓝色也做了同样的事 /*Red Variance*/ public static double varianceRed(BufferedImage image){ Color r = new Color(image.getRGB(0, 0)); double mean = meanValueRed(image); double sumOfDiff = 0.0;

这是我用来计算红色值的方差(和标准差)的代码。我对绿色和蓝色也做了同样的事

    /*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));
    }
/*红色方差*/
公共静态双变量(BuffereImage图像){
颜色r=新颜色(image.getRGB(0,0));
双平均值=平均值红色(图像);
双sumOfDiff=0.0;
对于(int y=0;y

我的问题是,r,g,b的每个方法都返回0.0的方差,我真的不知道为什么。我用Java的光栅对平均亮度值做了同样的处理,效果很好。现在我不明白为什么颜色不起作用。我什么都试过了。你知道为什么我得到0.0以及如何修正吗?

你需要得到循环中每种颜色的像素,而不仅仅是(0,0)处的像素:

public静态双变量red(buffereImage图像){
双平均值=平均值红色(图像);
双sumOfDiff=0.0;
对于(int y=0;y

PS:对于1x1大小的图像,您的代码中似乎也有一个bug

可能是因为
r
从未在循环内重新分配?您只获得第一个像素的值(
image.getRGB(0,0)
),您可能希望获得循环内每个像素的值。@haraldK Hi,那么我应该使用什么来获得每个像素的值呢?谢谢你的意见,太好了。谢谢HaraldK!我会照顾那个虫子的哈哈!!
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);
}