先看运行结果:
第一张图是基于形状匹配结果0.992,第二张是匹配结果的ncc结果,1
再看旋转后:
看到没,旋转后,基于形状匹配结果28度,0.517,根据匹配结果ncc结果是0.99
我们看到ncc以形状匹配到的结果,算出的得分还高,是不是立马对形状匹配信心满满?
我们可以算旋转的ncc,基于下面的方法,即就是hog,即梯度角度直方图,我利用下面hog数据,带入ncc公式,搞定:
左边是学习到的hog,右边是匹配到的hog,下图是上图精简,利用数据计算ncc c#运行代码如下:
double 学习凸包的中心x = 0;
double pipei凸包的中心x = 0;
for (int i = 0; i < nccMA2.Count; i++)
{
学习凸包的中心x += nccMA1[i];//nccMA1放的是学习到的hog
pipei凸包的中心x += nccMA2[i];//nccMA2放的是匹配到的hog
}
学习凸包的中心x = 学习凸包的中心x / (nccMA2.Count);
pipei凸包的中心x = pipei凸包的中心x / (nccMA2.Count);
double aa = 0;
double bb = 0;
double cc = 0;
for (int i = 0; i < nccMA2.Count; i++)
{
aa += (nccMA1[i] - 学习凸包的中心x) * (nccMA2[i] - pipei凸包的中心x);
bb += (nccMA1[i] - 学习凸包的中心x) * (nccMA1[i] - 学习凸包的中心x);
cc += (nccMA2[i] - pipei凸包的中心x) * (nccMA2[i] - pipei凸包的中心x);
}
double p = 0;
p = aa / Math.Sqrt(bb * cc);
旋转我们借用了hog的好处,所以ncc就达到了可以旋转匹配。
ncc刚刚实验成功,我们并没有加入到megauging中去。
202402021536
今天腊月23,祝大家新年行大运!
202402040803,代码有误,改正:
学习凸包的中心x和 pipei凸包的中心x这两个均值计算错误。
我们仍然使用如下数据:
nccMA1[]={55,75,41,36,28,153,31,21,63},
nccMA1的,junzhi=55*0.1+75*0.14+41*0.08+36*0.07+28*0.05+153*0.3+31*0.06+21*0.04+63*0.12
nccMA2[]={56,81,40,33,29,150,37,16,61}
nccMA2的,junzhi1=56*0.11+81*0.16+40*0.07+33*0.06+29*0.05+150*0.29+37*0.07+16*0.03+61*0.12
double aa = 0;
double bb = 0;
double cc = 0;
for (int i = 0; i < nccMA2.Count; i++)
{
aa += (nccMA1[i] - junzhi1) * (nccMA2[i] - junzhi2);
bb += (nccMA1[i] - junzhi1) * (nccMA1[i] - junzhi1);
cc += (nccMA2[i] - junzhi2) * (nccMA2[i] - junzhi2);
}
double p = 0;
p = aa / Math.Sqrt(bb * cc);