图像Java的倾斜



这是在java中实现图像倾斜度的正确方法吗?请注意,我对红色和绿色重复了同样的方法,我完全知道如何将它们结合在一起。我只想确保这个算法是正确的,然后再运行60次进行分析。

我的理解是,要计算偏度,只需将标准偏差方法从方差中的2次方更改为3次方。但似乎应该有更多的东西。如果在这个话题上比我受教育程度更高的人能看一看,那就太好了。干杯

    /*Blue Variance*/
    public static double varianceBlue(BufferedImage image){
        double mean = meanValueBlue(image);
        double sumOfDiff = 0.0;
         for (int y = 0; y < image.getHeight(); ++y){
               for (int x = 0; x < image.getWidth(); ++x){
                               Color b = new Color(image.getRGB(x, y));
                               double colour= b.getBlue() - mean;
                               sumOfDiff += Math.abs(Math.pow(colour, 3));
                             }                   
                           }
        return sumOfDiff / ((image.getWidth() * image.getHeight()) - 1);
        }
    /*Blue Standard Deviation*/
    public static double standardDeviationBlue(BufferedImage image){
        return Math.sqrt(varianceBlue(image));
    }

首先,不建议使用RGB颜色空间来分析图像,因为RGB颜色空间在感知上不是均匀的空间,其维度高度相关[Yilmaz,Alper,Omar Javed,and Mubarak Shah."对象跟踪:调查。"Acm计算调查(CSUR)38.4(2006):13.]。最好先将图像转换为HSV颜色空间。其次,我认为更常见的是计算直方图的偏斜度,而不是像计算直方图特征那样计算强度值。为了实现它,可以使用定义偏度。

如果你看一下这个页面,你会发现你必须除以标准偏差的立方体。也有一个调整版本的偏斜。

注意N值的精度。它与用于计算标准偏差和偏度(N-1 vs N)的值不同。

最新更新