這幾天在看文章的時候,看到這么一段話:
“First, we normalize the grayscale intensity in the eye region for each of the aligned facial images to zero mean and unit variance.”
意思就是第一步對眼睛的區域進行零均值單位方差。第一次知道還有這玩意。。
經過查閱matlab prestd函數就代表了這個意思:
試驗一下:
>> a=[1 2 3 4]
a =
1 2 3 4
>> [pn m std]=prestd(a)
Warning: PRESTD is an obsolete function.
> In obs_fcn at 18
In prestd at 10
Use MAPSTD instead.
pn =
-1.1619 -0.3873 0.3873 1.1619
m =
2.5000
std =
1.2910
>>
其中pn代表已經零均值單位方差的矩陣,m代表a的均值 std代表a的方差
轉成C++代碼就應該是這樣:
int a = 2; int b = 2; double gray[2 * 2] = { 1,2,3,4 }; double total = 0.0; for (int i = 0; i < b; i++) { for (int j = 0; j < a; j++) { total += (double)gray[i*a + j]; } } double meanvalue = total / (a*b); //零均值單位方差 double stdp = 0.0; for (int i = 0; i < b; i++) { for (int j = 0; j < a; j++) { double temp = gray[i*a + j]; stdp += ((temp - meanvalue)*(temp - meanvalue)); } } stdp = sqrt(stdp / (a*b));
qDebug() << meanvalue << " " << stdp;
for (int i = 0; i < b; i++)
{
for (int j = 0; j < a; j++)
{
double temp = gray[i*a + j];
qDebug()<<i<<" "<<j<<" "<<(temp - meanvalue) / stdp;
}
}
咱們看一下結果輸出:

發現在方差的值就不一樣了。為什么呢,
原來方差還存在偏差的概念;
double meanvalue = total / (a*b);//有偏差為n
double meanvalue = total / (a*b-1);//無偏差的方差n-1
而matlab默認是無偏差的方差,所以我們只要用無偏差替換到有偏差就和metlab相對應了。
