ncc匹配(二,补足旋转)

先看运行结果:

ncc匹配(二,补足旋转)_第1张图片

ncc匹配(二,补足旋转)_第2张图片

第一张图是基于形状匹配结果0.992,第二张是匹配结果的ncc结果,1

再看旋转后:

ncc匹配(二,补足旋转)_第3张图片

ncc匹配(二,补足旋转)_第4张图片

看到没,旋转后,基于形状匹配结果28度,0.517,根据匹配结果ncc结果是0.99

我们看到ncc以形状匹配到的结果,算出的得分还高,是不是立马对形状匹配信心满满?

我们可以算旋转的ncc,基于下面的方法,即就是hog,即梯度角度直方图,我利用下面hog数据,带入ncc公式,搞定:

ncc匹配(二,补足旋转)_第5张图片ncc匹配(二,补足旋转)_第6张图片

左边是学习到的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这两个均值计算错误。

我们仍然使用如下数据:

ncc匹配(二,补足旋转)_第7张图片

 

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);

你可能感兴趣的:(算法,机器视觉)