1. 程式人生 > >多階矩在影象中的含義(方差,偏度,峰度)

多階矩在影象中的含義(方差,偏度,峰度)

設影象共有N點(影象塊則為w*h個畫素點),第i點的灰度值為Xi,其均值為X,則這些特徵的含義如下:

方差(Variance):是一種衡量樣本分佈均勻性的尺度標準。

計算公式為:

偏度(Skewness):描述的是樣本總體取值分佈的對稱性,即影象的扭曲度。

計算公式為:

偏度需要與正態分佈相比較,偏度為0表示其資料分佈形態與正態分佈的偏斜程度相同;偏度大於0表示其資料分佈形態與正態分佈相比為正偏或右偏,即有一條長尾巴拖在右邊,資料右端有較多的極端值;偏度小於0表示其資料分佈形態與正態分佈相比為負偏或左偏,即有一條長尾拖在左邊,資料左端有較多的極端值。偏度的絕對值數值越大表示其分佈形態的偏斜程度越大。


峰度(Kurtosis):描述的是樣本總體中所有取值分佈形態的陡緩程度,表示樣本分佈的峰值是否突兀或平坦。

計算公式為:

峰度同樣也需要與正態分佈相比較,峰度為0表示該總體資料分佈與正態分佈的陡緩程度相同;峰度大於0表示該總體資料分佈與正態分佈相比較為陡峭,為尖頂峰;峰度小於0表示該總體資料分佈與正態分佈相比較為平坦,為平頂峰。峰度的絕對值數值越大表示其分佈形態的陡緩程度與正態分佈的差異程度越大。

C++下計算偏度和峰度的程式碼如下:

void triple_fourth_moment(Mat& box,Boundingbox &bb) //計算影象框內的偏度、峰度
{
	double Tmean = (double)bb.mean; //影象塊均值
	double var = bb.var;//影象塊的方差
	int w = box.cols;
	int h = box.rows;
	double triple_monent = 0;
	double fourth_monent = 0;
	for (int i = 0; i < h; i++)
	{
		uchar *data = box.ptr<uchar>(i);
		for (int j = 0; j < w; j++)
		{
			triple_monent += pow(abs(data[j] - Tmean), 3); 
			fourth_monent += pow((data[j] - Tmean), 4);
		}
	}
	bb.tri_mon = triple_monent / (w*h*pow(var,1.5)); //分別得到當前框的<span style="font-family: Arial;">偏度、峰度</span>
	bb.four_mon = fourth_monent / (w*h*pow(var,2));
}