简化的图片匹配(利用颜色比例)

来源:互联网 发布:js实现加载等待效果 编辑:程序博客网 时间:2024/05/16 10:06
void Comp_Picture(float *&color,pmyColor &pcolor, pvariance &vance, int Method)
{
while(pcolor)
{
pvariance ppvariance = new variance;
memset(ppvariance,0,sizeof(variance));


//保存图片路径
strcpy(ppvariance->picpath,pcolor->picpath);

if(Method == 1)
{
//求均方差
float fsum = 0,  temp = 0;
for(int i = 0; i < 9; i++)
{
temp = (color[i]) - (pcolor->colors[i]);
//printf("差=%f\t",temp);
fsum += temp * temp;
//printf("差的平方=%f\n",fsum);
}
ppvariance->van = fsum / 9;
//printf("均方差=%f\n",ppvariance->van);
}


if(Method == 2)
{
//直方图相交
for(int i = 0; i < 9; i++)
{
ppvariance->van += min(color[i],pcolor->colors[i]);
}
}


if(Method == 3)
{
//直方图卡方
for(int i = 0; i < 9; i++)
{
float d_ch = ( (color[i] - pcolor->colors[i])* (color[i] - pcolor->colors[i]) ) / (color[i] + pcolor->colors[i]);
ppvariance->van += d_ch;
}
}


if(pVarianceHead == NULL)
{
pVarianceHead = ppvariance;
pVarianceEnd = ppvariance;
}
else
{
if(ppvariance->van > pVarianceEnd->van)
{
pVarianceEnd->pNext = ppvariance;
pVarianceEnd = ppvariance;
}
else
{
if(ppvariance->van < pVarianceHead->van)
{
pvariance ptem = pVarianceHead;
pVarianceHead = ppvariance;
pVarianceHead->pNext = ptem;
}
else
{
pvariance ppp = pVarianceHead->pNext;
pvariance pcur = pVarianceHead;
while(ppp)
{
if(ppvariance->van < ppp->van)
{
ppvariance->pNext = ppp;
pcur->pNext = ppvariance;
break;
}
pcur = ppp;
ppp = ppp->pNext;
}
}
}
}


pcolor = pcolor->pNext;
}
vance = pVarianceHead;
}
0 0
原创粉丝点击