http://rest-term.com/archives/2889/
http://nosyan.hatenablog.com/entry/20100612/1276355761
↑様のをそのままお借りして,若干の変更とコメントとmain文を追加したプログラムを紹介しておきます.
//普通の画像から抽出したい場合は,マスクパターンを設定して各輝度値を次元毎に掛け合わせていく事になるのかな?
//ただ,複数のサイトや論文みても2値化で使われています.計算速度との兼ね合いでしょうか.
void HLAC_Extract(IplImage* input_image, double arrayHLAC[25])
int h = input_image->height - 1;//端の例外処理を無くすため
int w = input_image->width - 1;//同じく
int wideStep = input_image->widthStep;
for(int i = 0; i < 25; ++i)
for(int iy = 1; iy < h; iy++){
for(int ix = 1; ix < w; ix++){
uchar p5 = (uchar)input_image->imageData[wideStep*iy + ix];
uchar p1 = (uchar)input_image->imageData[wideStep*(iy-1) + (ix-1)];
uchar p2 = (uchar)input_image->imageData[wideStep*(iy-1) + ix ];
uchar p3 = (uchar)input_image->imageData[wideStep*(iy-1) + (ix+1)];
uchar p4 = (uchar)input_image->imageData[wideStep*iy + (ix-1)];
uchar p6 = (uchar)input_image->imageData[wideStep*iy + (ix+1)];
uchar p7 = (uchar)input_image->imageData[wideStep*(iy+1) + (ix+1)];
uchar p8 = (uchar)input_image->imageData[wideStep*(iy+1) + ix ];
uchar p9 = (uchar)input_image->imageData[wideStep*(iy+1) + (ix+1)];
if(p1 != 0){ arrayHLAC[1]++;
if(p8 != 0) arrayHLAC[13]++;
if(p3 != 0) arrayHLAC[21]++;
if(p7 != 0) arrayHLAC[22]++;
if(p2 != 0){ arrayHLAC[2]++;
if(p8 != 0) arrayHLAC[7]++;
if(p7 != 0) arrayHLAC[11]++;
if(p9 != 0) arrayHLAC[12]++;
if(p6 != 0) arrayHLAC[17]++;
if(p3 != 0){ arrayHLAC[3]++;
if(p7 != 0) arrayHLAC[6]++;
if(p4 != 0) arrayHLAC[9]++;
if(p8 != 0) arrayHLAC[14]++;
if(p4 != 0){ arrayHLAC[4]++;
if(p6 != 0) arrayHLAC[5]++;
if(p9 != 0) arrayHLAC[10]++;
if(p2 != 0) arrayHLAC[18]++;
if(p8 != 0) arrayHLAC[19]++;
if(p7 != 0) arrayHLAC[15]++;
if(p1 != 0) arrayHLAC[16]++;
if(p8 != 0) arrayHLAC[20]++;
if(p1 != 0) arrayHLAC[8]++;
if(p7 != 0) arrayHLAC[23]++;
if(p3 != 0) arrayHLAC[24]++;
IplImage* img=cvLoadImage("../../lena.png",0);
IplImage* bin_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvThreshold(img, bin_img, 0, 255, CV_THRESH_BINARY|CV_THRESH_OTSU);//2値化している.
HLAC_Extract(bin_img,hlac_feature);
std::cout<<"HLAC"<<i<<":"<<hlac_feature[i]<<"\n";