📄 imc.c
字号:
#include"imc.h"
float m10,m01,m00,m11,m20,m02,m21,m12,m30,m03;
float e11,e20,e02,e30,e03,e21,e12,r;
void IM(Uint8* in,Uint16 ROWS,Uint16 COLS,float* out)
{
float xb,yb,xd,yd;
int i,j;
m10=0;
m01=0;
m00=0;
m11=0;
m20=0;
m02=0;
m21=0;
m12=0;
m30=0;
m03=0;
xb=0;
yb=0;
xd=0;
yd=0;
e11=0;
e20=0;
e02=0;
e30=0;
e03=0;
e21=0;
e12=0;
for(j = 0; j < COLS; j++)
{
for(i = 0; i < ROWS; i++)
{
m00=m00+(*(in+i*COLS+j));//data[i*COLS+j];
m10=m10+(*(in+i*COLS+j))*(j+1);
m01=m01+(*(in+i*COLS+j))*(i+1);
}
}
xb=m10/m00;
yb=m01/m00;
for(j = 1; j < COLS+1; j++)
{
for(i = 1; i < ROWS+1; i++)
{
if((*(in+(i-1)*COLS+j-1))>0)//data[(i-1)*COL+(j-1)]
{
xd=j-xb;
yd=i-yb;
m11=m11+xd*yd*(*(in+(i-1)*COLS+j-1));
m20=m20+xd*xd*(*(in+(i-1)*COLS+j-1));
m02=m02+yd*yd*(*(in+(i-1)*COLS+j-1));
m21=m21+xd*xd*yd*(*(in+(i-1)*COLS+j-1));
m12=m12+xd*yd*yd*(*(in+(i-1)*COLS+j-1));
m30=m30+xd*xd*xd*(*(in+(i-1)*COLS+j-1));
m03=m03+yd*yd*yd*(*(in+(i-1)*COLS+j-1));
}
}
}
e11=m11/(m00*m00);
e20=m20/(m00*m00);
e02=m02/(m00*m00);
e30=m30/pow(m00,2.5);
e03=m03/pow(m00,2.5);
e21=m21/pow(m00,2.5);
e12=m12/pow(m00,2.5);
*(out)=e20+e02;
*(out+1)=(e20-e02)*(e20-e02)+4*e11*e11;
*(out+2)=(e30-3*e12)*(e30-3*e12)+(3*e21-e03)*(3*e21-e03);
*(out+3)=(e30+e12)*(e30+e12)+(e21+e03)*(e21+e03);
*(out+4)=(e30-3*e12)*(e30+e12)*((e30+e12)*(e30+e12)-3*(e21+e03)*(e21+e03))+(3*e21-e03)*(e21+e03)*(3*(e30+e12)*(e30+e12)-(e21+e03)*(e21+e03));
*(out+5)=(e20-e02)*((e30+e12)*(e30+e12)-(e21+e03)*(e21+e03))+4*e11*(e30+e12)*(e21+e03);
*(out+6)=(3*e21-e03)*(e30+e12)*((e30+e12)*(e30+e12)-3*(e21+e03)*(e21+e03))+(3*e12-e30)*(e21+e03)*(3*(e30+e12)*(e30+e12)-(e21+e03)*(e21+e03));
if(*(out)!=0)
{
*(out+1)=(*(out+1))/((*(out))*(*(out)));
*(out+2)=(*(out+2))/((*(out))*(*(out))*(*(out)));
*(out+3)=(*(out+3))/((*(out))*(*(out))*(*(out)));
*(out+4)=(*(out+4))/((*(out))*(*(out))*(*(out))*(*(out))*(*(out))*(*(out)));
*(out+5)=(*(out+5))/((*(out))*(*(out))*(*(out))*(*(out)));
*(out+6)=(*(out+6))/((*(out))*(*(out))*(*(out))*(*(out))*(*(out))*(*(out)));
}
/*
*(out)=*(out)!=0?((log10((*(out))))>0?(log10((*(out)))):(-log10((*(out))))):*(out);
*(out+1)=*(out+1)!=0?((log10((*(out+1))))>0?(log10((*(out+1)))):(-log10((*(out+1))))):*(out+1);
*(out+2)=*(out+2)!=0?((log10((*(out+2))))>0?(log10((*(out+2)))):(-log10((*(out+2))))):*(out+2);
*(out+3)=*(out+3)!=0?((log10((*(out+3))))>0?(log10((*(out+3)))):(-log10((*(out+3))))):*(out+3);
*(out+4)=*(out+4)!=0?((log10((*(out+4))))>0?(log10((*(out+4)))):(-log10((*(out+4))))):*(out+4);
*(out+5)=*(out+5)!=0?((log10((*(out+5))))>0?(log10((*(out+5)))):(-log10((*(out+5))))):*(out+5);
*(out+6)=*(out+6)!=0?((log10((*(out+6))))>0?(log10((*(out+6)))):(-log10((*(out+6))))):*(out+6);
*/
if(fabs(log10(*out))!=inf)*(out)=fabs(log10(*out));
if(fabs(log10(*(out+1)))!=inf)*(out)=fabs(log10(*(out+1)));
if(fabs(log10(*(out+2)))!=inf)*(out)=fabs(log10(*(out+2)));
if(fabs(log10(*(out+3)))!=inf)*(out)=fabs(log10(*(out+3)));
if(fabs(log10(*(out+4)))!=inf)*(out)=fabs(log10(*(out+4)));
if(fabs(log10(*(out+5)))!=inf)*(out)=fabs(log10(*(out+5)));
if(fabs(log10(*(out+6)))!=inf)*(out)=fabs(log10(*(out+6)));
}
float Distance(float* in,float* ref)
{
float r,w,r1;
Int8 i;
r=0;
for (i=0;i<7;i++)
{
if((*(in+i) + *(ref+i))!=0)
r1=((*(in+i) - *(ref+i))>0)?(*(in+i) - *(ref+i)):(*(ref+i)-*(in+i));
r1=r1/(*(in+i) + *(ref+i));
r=r+r1;
}
return r;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -