extractGabor.c

上传用户:gzvictory
上传日期:2009-04-19
资源大小:4601k
文件大小:5k
源码类别:图形图像处理
开发平台:Visual C++
  1. /*
  2. Feature Extraction FELib LICENSE
  3. This software is freely available for non-commercial use such as research and education. 
  4. Please see the full disclaimer below. 
  5. We recommand you cite the reference given below in your publications related to this work.. 
  6. Jianke Zhu, Steven C.H. Hoi and Michael R. Lyu,
  7. "Face Annotation by Transductive Kernel Fisher Discriminant,"
  8. IEEE Trans. on Multimedia, vol. 10, Jan. 2008, pp. 86-96. 
  9. Copyright (c) 2003-2009 Jianke Zhu.  Email:jianke.zhu at gmail.com
  10. http://www.vision.ee.ethz.ch/~zhuji
  11. 3RD PART SOFTWARE
  12. The software is partly based on the following libraries:
  13.   - The Intel(tm) OpenCV Library
  14.  
  15. DISCLAIMER
  16. This software is provided 'as-is', without any express or implied warranty.
  17. In no event will the author be held liable for any damages arising from the
  18. use of this software.
  19. Permission is granted to anyone to use this software for any non-commercial 
  20. purpose, and to alter it, subject to the following restrictions:
  21. 1. The origin of this software must not be misrepresented; you must not claim
  22.    that you wrote the original software. 
  23. 2. Altered source versions must be plainly marked as such, and must not be 
  24.    misrepresented as being the original software.
  25. 3. This notice may not be removed or altered from any source distribution.
  26. --
  27. No guarantees of performance accompany this software, nor is any 
  28. responsibility assumed on the part of the author.
  29. This software is provided by Jianke Zhu ``as is'' and any express or implied
  30. warranties, including, but not limited to, the implied warranties of merchan-
  31. tability and fitness for a particular purpose are disclaimed. In no event shall  
  32. Jianke Zhu be liable for any direct, indirect, incidental, special, exemplary,
  33. or consequential damages (including, but not limited to, procurement of substitute
  34. goods or services; loss of use, data, or profits; or business interruption) however 
  35. caused and on any theory of liability, whether in contract, strict liability, 
  36. or tort (including negligence or otherwise) arising in any way out of the use 
  37. of this software, even if advised of the possibility of such damage.
  38. $Revision: 1.2 $ 
  39. $Date: 2008/12/31 $ 
  40. */
  41. #include "felib.h"
  42. /**
  43.   @author   Zhu Jianke
  44.   @version  8-18-2008
  45.   @memo     Extract Gabor wavelets transform features
  46.   @doc      Extract Gabor wavelets transform features of a given image list
  47.   
  48.   @param    imgList     image list
  49.  
  50.   @param gaborOpt gaborOpt[0]--size of Gabor filter mask, default 64; 
  51. gaborOpt[1]--number of scale of Gabor filter, default 5;
  52. gaborOpt[2]--number of orientation of Gabor filter, default 8;  
  53. gaborOpt[3]--control the sample rate for global representation, unused for Gabor moment, default 8;
  54.  
  55.   @param flen return the length for each extracted image feature
  56.   @return   void
  57. */
  58. double* extractFeatures( ImgFileList* imgList, int gaborOpt[4], int* flen)
  59. {
  60. // various image formats
  61. IplImage* img;
  62. IplImage* gimg;
  63. //Gabor related parameters
  64. int mask_size = gaborOpt[0]; //64
  65. int scale   = gaborOpt[1]; //5
  66. int ori   = gaborOpt[2]; //8
  67. int skip   = gaborOpt[3]; //8
  68. CvMat** mGabor;
  69.   int  i, j, gaborDim;//FEATURE_LEN;
  70. //feature vector
  71. double *gvec; 
  72. double *featureBank;
  73. if( imgList->nbImg<=0 ) return 0;
  74. gaborDim = scale*ori*mask_size*mask_size/(skip*skip);
  75. //feature vector length
  76. *flen = gaborDim;
  77. gvec  = Malloc( double, gaborDim );
  78. // Return feature bank
  79. featureBank = Malloc( double, *flen * imgList->nbImg );
  80. memset( featureBank, 0, *flen * imgList->nbImg*sizeof(double) );
  81. // generate gabor filter 
  82. mGabor = getGaborFFT( mask_size, scale, ori );
  83. for(i=0;i<imgList->nbImg;i++)
  84. {
  85. img   = cvLoadImage(imgList->imfile[i].fname,-1);
  86. if(!img)
  87. {
  88. printf( "Failed to load image: %sn" , imgList->imfile[i].fname );
  89. continue;
  90. }else
  91. {
  92. printf( "." );//printf( "%d %sn",i+1,imgList->imfile[i].fname);
  93. if( i%10==9 ) printf("n");
  94. }
  95. //convert to grayscale, prepare the data for LBP histogram
  96. gimg  = cvCreateImage( cvGetSize(img), 8, 1 );
  97. if(img->nChannels==3)
  98. cvCvtColor(img, gimg, CV_BGR2GRAY);
  99. else
  100. cvCopy( img, gimg, 0);
  101. //Gabor wavelet transform
  102. extractGabor( gimg, gvec,mask_size, scale, ori, skip, mGabor);
  103. cvReleaseImage( &gimg );
  104. cvReleaseImage( &img );
  105. // save into a buffer
  106. for(j=0; j<gaborDim; j++) featureBank[(*flen)*i + j] = gvec[j];
  107. }
  108. UnloadGaborFFT( mGabor, scale, ori );
  109.   free(gvec);
  110. return featureBank;
  111. }
  112. int main(int argc, char **argv)
  113. {
  114. int flen, gaborOpt[4];
  115. FILE* fp;
  116. ImgFileList* imList; 
  117. double  *data;
  118. if(argc<2) return(0);
  119. // Load imgList
  120. imList = LoadImgList( argv[1] );
  121. gaborOpt[0] = 128; gaborOpt[1] = 5;
  122. gaborOpt[2] = 8; gaborOpt[3] = 8;
  123. data = extractFeatures( imList, gaborOpt, &flen );
  124. fp = fopen("data.bin" ,"wb");
  125. writeData( data, imList->nbImg, flen,  fp );
  126. fclose(fp);
  127.  
  128. free(data);
  129. freeImgFileList( imList );
  130. return (0);
  131. }