首页 > 代码库 > 颜色矩
颜色矩
颜色矩:
颜色矩是一种简单而有效的颜色特征,是由Stricker和Oreng提出的,这种方法的数学基础是图像中的任何的颜色分布均可以用它的矩来表示。此外,由于颜色分布信息主要集中在低阶矩中,因此,仅采用颜色的一阶矩(mean)、二阶矩(Variance)和三阶矩(Skewness)就足以表达图像的颜色分布,与颜色直方图相比,该方法的另一个好处是无须对特征进行量化。
设p(i,j)图像的像素值,N为像素数,则:
Mean=(sum(p(I,j)))/N
Variance=sqrt(sum(p(I,j )-mean)^2/N)
Skewness= Variance= (sum(p(I,j )-mean)^3/N)^1/3
图像的颜色矩一共有九个分量,每个颜色通道均有三个低阶矩。颜色矩仅仅使用少数几个矩,从而导致过多的虚警,因此颜色矩常和其他特征结合使用。
public void setColorJu(){ int i , j; int k; double sumh , sums , sumv; this.colorJuH[1] = 0.0; this.colorJuS[1] = 0.0; this.colorJuV[1] = 0.0; // System.out.println(this.width * this.height); for( k = 1 ; k <= 3 ; k++ ){ sumh = 0.0; sums = 0.0; sumv = 0.0; for( i = 0 ; i < this.width ; i++ ){ for( j = 0 ; j < this.height ; j++ ){ // double temp = this.points[i][j].getHHSV(); // temp -= this.colorJuH[1]; // temp = Math.pow(temp, k); // sumh += temp; sumh += Math.pow( ( this.points[i][j].getHHSV() - this.colorJuH[1] ) , k ); sums += Math.pow( ( this.points[i][j].getSHSV() - this.colorJuS[1] ) , k ); sumv += Math.pow( ( this.points[i][j].getVHSV() - this.colorJuV[1] ) , k ); } } // System.out.println(k+":"); this.colorJuH[k] = sumh / ( this.width * this.height ); if( k == 2 ) this.colorJuH[k] = Math.sqrt(this.colorJuH[k]); if( k == 3 ) this.colorJuH[k] = Math.cbrt(this.colorJuH[k]); // System.out.println(colorJuH[k]); this.colorJuS[k] = sums / ( this.width * this.height ); if( k == 2 ) this.colorJuS[k] = Math.sqrt(this.colorJuH[k]); if( k == 3 ) this.colorJuS[k] = Math.cbrt(this.colorJuH[k]); this.colorJuV[k] = sumv / ( this.width * this.height ); if( k == 2 ) this.colorJuV[k] = Math.sqrt(this.colorJuH[k]); if( k == 3 ) this.colorJuV[k] = Math.cbrt(this.colorJuH[k]); // System.out.println("sumh"+sumh+","+"sums"+sums+","+"sumv"+sumv); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。