圖像特徵:幾何不變矩--Hu矩

圖像特徵:幾何不變矩--Hu

原理

   幾何矩是由Hu(Visual pattern recognition by moment invariants)1962年提出的,具有平移、旋轉和尺度不變性。 定義如下:

(p+q)階不變矩定義

 

② 對於數字圖像,離散化,定義爲

 

歸一化中心矩定義

 

Hu矩定義

 

實現(源碼)

自編函數模塊

1//#################################################################################//
 2double M[7] = {0};       //HU不變矩
 3bool HuMoment(IplImage* img)
 4 {
 5int bmpWidth = img->width;
 6int bmpHeight = img->height;
 7int bmpStep = img->widthStep;
 8int bmpChannels = img->nChannels;
 9    uchar*pBmpBuf = (uchar*)img->imageData;
10
11double m00=0,m11=0,m20=0,m02=0,m30=0,m03=0,m12=0,m21=0; //中心矩
12double x0=0,y0=0;   //計算中心距時所使用的臨時變量(x-x'
13double u20=0,u02=0,u11=0,u30=0,u03=0,u12=0,u21=0;//規範化後的中心矩
14//double M[7];   //HU不變矩
15double t1=0,t2=0,t3=0,t4=0,t5=0;//臨時變量,
16//double Center_x=0,Center_y=0;//重心
17int Center_x=0,Center_y=0;//重心
18int i,j;           //循環變量
19
20// 獲得圖像的區域重心(普通矩)
21double s10=0,s01=0,s00=0; //0階矩和1階矩 
22for(j=0;j<bmpHeight;j++)//y
23    {
24for(i=0;i<bmpWidth;i++)//x
25        {
26            s10+=i*pBmpBuf[j*bmpStep+i];
27            s01+=j*pBmpBuf[j*bmpStep+i];
28            s00+=pBmpBuf[j*bmpStep+i];
29        }
30    }
31    Center_x=(int)(s10/s00+0.5);
32    Center_y=(int)(s01/s00+0.5);
33
34// 計算二階、三階矩(中心矩)
35    m00=s00;
36for(j=0;j<bmpHeight;j++)
37    {
38for(i=0;i<bmpWidth;i++)//x
39        {
40            x0=(i-Center_x);
41            y0=(j-Center_y);
42            m11+=x0*y0*pBmpBuf[j*bmpStep+i];
43            m20+=x0*x0*pBmpBuf[j*bmpStep+i];
44            m02+=y0*y0*pBmpBuf[j*bmpStep+i];
45            m03+=y0*y0*y0*pBmpBuf[j*bmpStep+i];
46            m30+=x0*x0*x0*pBmpBuf[j*bmpStep+i];
47            m12+=x0*y0*y0*pBmpBuf[j*bmpStep+i];
48            m21+=x0*x0*y0*pBmpBuf[j*bmpStep+i];
49        }
50    }
51
52// 計算規範化後的中心矩: mij/pow(m00,((i+j+2)/2)
53    u20=m20/pow(m00,2);
54    u02=m02/pow(m00,2);
55    u11=m11/pow(m00,2);
56    u30=m30/pow(m00,2.5);
57    u03=m03/pow(m00,2.5);
58    u12=m12/pow(m00,2.5);
59    u21=m21/pow(m00,2.5);
60
61// 計算中間變量
62    t1=(u20-u02);
63    t2=(u30-3*u12);
64    t3=(3*u21-u03);
65    t4=(u30+u12);
66    t5=(u21+u03);
67
68// 計算不變矩
69    M[0]=u20+u02;
70    M[1]=t1*t1+4*u11*u11;
71    M[2]=t2*t2+t3*t3;
72    M[3]=t4*t4+t5*t5;
73    M[4]=t2*t4*(t4*t4-3*t5*t5)+t3*t5*(3*t4*t4-t5*t5);
74    M[5]=t1*(t4*t4-t5*t5)+4*u11*t4*t5;
75    M[6]=t3*t4*(t4*t4-3*t5*t5)-t2*t5*(3*t4*t4-t5*t5);
76
77returntrue;
78 }

 

發佈了20 篇原創文章 · 獲贊 13 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章