• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C/C++
  • 标签: Hu矩  图像分类  

资源简介

基于图像Hu不变矩及图像的欧氏距离对二值图像进行分类

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include  //itoa
#pragma comment(lib“cv.lib“) 
#pragma comment(lib“highgui.lib“) 



void gethuju(char * filenamedouble *Huju)//Huju[7]为hu不变距
{
IplImage *myimg;

myimg = cvLoadImage(filename0);///////////////
double M[4][4];
double u00u20u02u11u12u21u30u03;//归一化中心距
int ijxy;
double x0y0;//x0,y0图像质心

for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
M[i][j]=0;
if(i+j<4)
{
for(x=0;xwidth;x++)
for(y=0;yheight;y++)
M[i][j]=M[i][j]+((unsigned char*)(myimg->imageData + myimg->widthStep*y))[x]*pow((x+1)i)*pow((y+1)j);//计算M

}
}



x0=M[1][0]/M[0][0];
y0=M[0][1]/M[0][0];

u00=M[0][0];
u20=(M[2][0]-x0*M[1][0])/pow(u002);
u02=(M[0][2]-y0*M[0][1])/pow(u002);
u11=(M[1][1]-x0*M[0][1])/pow(u002);
u21=(M[2][1]-2*x0*M[1][1]-y0*M[2][0]+2*x0*x0*M[0][1])/pow(u002.5);
u12=(M[1][2]-2*y0*M[1][1]-x0*M[0][2]+2*y0*y0*M[1][0])/pow(u002.5);
u30=(M[3][0]-3*x0*M[2][0]+2*x0*x0*M[1][0])/pow(u002.5);
u03=(M[0][3]-3*y0*M[0][2]+2*y0*y0*M[0][1])/pow(u002.5);

Huju[0]=u20+u02;
Huju[1]=(u20-u02)*(u20-u02)+4*u11*u11;
Huju[2]=(u30-3*u12)*(u30-3*u12)+(3*u21-u03)*(3*u21-u03);
Huju[3]=(u30+u12)*(u30+u12)+(u21+u03)*(u21+u03);
Huju[4]=(u30-3*u12)*(u30+u12)*((u30+u12)*(u30+u12)-3*(u21+u03)*(u21+u03))+(3*u21-u03)*(u21+u03)*(3*(u30+u12)*(u30+u12)-(u21+u03)*(u21+u03));
Huju[5]=(u20-u02)*((u30+u12)*(u30+u12)-(u21+u03)*(u21+u03))+4*u11*(u30+u12)*(u21+u03);
Huju[6]=(3*u21-u03)*(u30+u12)*((u30+u12)*(u30+u12)-3*(u21+u03)*(u21+u03))+(3*u12-u30)*(u21+u03)*(3*(u30+u12)*(u30+u12)-(u21+u03)*(u21+u03));


}
void main(void)
{

char bmp[5]=“.bmp“filename1[20]=“bat“filename2[20]=“flatfish“filename3[20]=“hammer“filename4[20]=“key“filename[20];
    int ij;
   char str[3];
   double Huju[7];
   double bat0[7]flatfish0[7]hammer0[7]key0[7];//基准hu距
   double juli1juli2juli3juli4;

   gethuju(“bat0.bmp“bat0);
   gethuju(“flatfish0.bmp“flatfish0);
   gethuju(“hammer0.bmp“hammer0);
   gethuju(“key0.bmp“key0);
for(i=0;i<7;i++)
cout<   for(i=1;i<11;i++)
{
   for(j=0;j<20;j++)
filename[j]=filename1[j];
    itoa(istr10);
strcat(filenamestr);
strcat(filenamebmp);
// cout< gethuju(filenameHuju);
juli1=0;//初始化
juli2=0;
juli3=0;
juli4=0;
for(j=0;j<7;j++)
{
juli1=juli1+(bat0[j]-Huju[j])*(bat0[j]-Huju[j]);//
juli2=juli2+(flatfish0[j]-Huju[j])*(flatfish0[j]-Huju[j]);
juli3=juli3+(hammer0[j]-Huju[j])*(hammer0[j]-Huju[j]);
juli4=juli4+(key0[j]-Huju[j])*(key0[j]-Huju[j]);
}
if (juli1 cout<<“bat“< else if (juli2<

评论

共有 条评论

相关资源