这是在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)的值不同。