高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心椭圆马氏距离,二)
先看以下是个什么?
真看不出什么,对比一下还行,还是看不出来,我们让马氏距离放大十倍等于15,高斯值放大1000倍等于4的像素加以阻挡指示出来,使用白色。
同心椭圆:(为什么协方差矩阵?0值改0.5,
,不是水平方向的椭圆?而是135度的椭圆?)
下面是C#对这个协方差矩阵改变后的高斯模板的计算:
//协方差矩阵
// a*a P*a*d====3.3 0.5
// P*a*d d*d====0.5 3.3
int nWidowSize = 11;
double nSigma = 3.3;
double[] pdKernal_2 = new double[11 * 11];
double P = 0.5 / 3.3;
///二维高斯函数公式
// x*x+y*y 2*P*x*y ///
// (1-P*P)^(-1)( --------------- - ------------- )*(-1/2 ) ///
// 1 nSigma*nSigma nSigma*nSigma ///
// ---------------- *(sqrt(1-P*P))^(-1) *e ///
// 2*pi*nSigma*nSigma ///
///
int nCenter = (nWidowSize) / 2;
for (int i = 0; i < nWidowSize; i++)
{
for (int j = 0; j < nWidowSize; j++)
{
int nDis_x = i - nCenter;
int nDis_y = j - nCenter;
double temp = (nDis_x * nDis_x + nDis_y * nDis_y - 2 * P * nDis_x * nDis_y)/(1-P*P);
temp = temp / (nSigma * nSigma);
double r = Math.Sqrt(temp);//马氏距离
double 指数 = Math.Exp(-(1 / 2.0) * temp);
double 系数 = 1/Math.Sqrt(1 - P * P);
double temp2 = 系数*指数 / (2 * 3.1415926 * nSigma * nSigma);
pdKernal_2[i + j * nWidowSize] = (int)(temp2 * 1000);
}
}
下一节,椭圆画法,以及旋转椭圆的画法。