Definition at line 25 of file ColorGaborResponses.h. References C, Ci, ColorSpace(), Div(), E, M_PI, Norm2(), OnlyZero, Impala::Core::Array::Element::OOO, ProjectRange(), RecGabor(), RecGauss(), Impala::Core::Array::Element::RGB, Set(), Texture, and W. Referenced by ColorGaborResponses(), and ColorSegmentation(). 00030 { 00031 // set the different orientations 00032 double* orients = new double[nrOrient]; 00033 orients[0] = 0; 00034 for (int i=1 ; i<nrOrient; i++) 00035 orients[i] = orients[i-1] + M_PI/nrOrient; 00036 00037 // convert to opponent color space 00038 ColorSpace(im, im, Element::RGB, Element::OOO); 00039 00040 int width = im->CW(); 00041 int height = im->CH(); 00042 00043 // declare and initialize temporary images 00044 std::vector<Array2dScalarReal64*> imList; 00045 00046 Array2dScalarReal64* imOOO_SR64[3]; 00047 Array2dComplex64* imOOO_C64[3]; 00048 for (int ii=0 ; ii<3 ; ii++) 00049 { 00050 imOOO_SR64[ii] = 0; 00051 ProjectRange(imOOO_SR64[ii], im, ii+1); 00052 imOOO_C64[ii] = 0; 00053 Set(imOOO_C64[ii], imOOO_SR64[ii]); 00054 } 00055 Array2dScalarReal64* E_0_SR64 = 0; 00056 Array2dComplex64* E_0_C64 = 0; 00057 Array2dComplex64* gabor = 0; 00058 Array2dScalarReal64* tmp_SR64 = 0; 00059 Array2dComplex64* tmp_C64 = 0; 00060 00061 // get a list of all gabor responses 00062 00063 // if texture is required 00064 if (segAlg!=OnlyZero) 00065 { 00066 for (int fi=0; fi<nrScales; fi++) 00067 { 00068 for (int oi=0; oi<nrOrient; oi++) 00069 { 00070 00071 if (invariantType != E) 00072 RecGauss(E_0_SR64, imOOO_SR64[0], scales[fi], scales[fi], 00073 0, 0, 3); 00074 00075 // only the E and W invariant use the intensity channel 00076 for (int pixDim=(invariantType==E || invariantType==W)?1:2 ; 00077 pixDim<=3 ; pixDim++) 00078 { 00079 00080 // with Ci invariant first divide by intensity E_0 00081 if (invariantType!=Ci) 00082 RecGabor(gabor, imOOO_C64[pixDim-1], scales[fi], 00083 freqs[fi], orients[oi]); 00084 else 00085 { 00086 // to do : combine Div and Set 00087 Div(tmp_SR64, imOOO_SR64[pixDim-1], E_0_SR64); 00088 Set(tmp_C64, tmp_SR64); 00089 RecGabor(gabor, tmp_C64, scales[fi], freqs[fi], 00090 orients[oi]); 00091 } 00092 00093 Array2dScalarReal64* res = 0; 00094 Norm2(res, gabor); 00095 00096 // with C and W invariant divide by intensity E_0 after 00097 // Gabor filtering 00098 if (invariantType == W || invariantType ==C) 00099 Div(res, res, E_0_SR64); 00100 00101 //smooth and add to image list 00102 RecGauss(res, res, 1.95*scales[fi], 1.95*scales[fi], 00103 0, 0, 3); 00104 imList.push_back(res); 00105 //CX_COUT << "imList.size = " << imList.size() << CX_ENDL; 00106 } 00107 } 00108 } 00109 } 00110 00111 // if the zero freq. (no texture) is required 00112 if (segAlg != Texture) 00113 { 00114 double scale0 = 8.0 ; 00115 00116 // add a zero-frequency response, for uniform color regions 00117 if (invariantType != E) 00118 RecGauss(E_0_SR64, imOOO_SR64[0], scale0, scale0, 0, 0, 3); 00119 00120 // only the E and W invariant use the intensity channel 00121 // yet, as this is only color, the W invariant becomes 1, so we can 00122 // leave W out, here. 00123 00124 for (int pixDim=invariantType==E?1:2 ; pixDim<=3 ; pixDim++) 00125 { 00126 Array2dScalarReal64* res = 0; 00127 00128 // with Ci invariant first divide by intensity E_0 00129 if (invariantType!=Ci) 00130 RecGauss(res, imOOO_SR64[pixDim-1], scale0, scale0, 0, 0, 3); 00131 else 00132 { 00133 Div(tmp_SR64, imOOO_SR64[pixDim-1], E_0_SR64); 00134 RecGauss(res, tmp_SR64, scale0, scale0, 0, 0, 3); 00135 } 00136 00137 // with C and W invariant divide by intensity E_0 after Gabor filtering 00138 if (invariantType == W || invariantType ==C) 00139 Div(res, res, E_0_SR64); 00140 00141 imList.push_back(res); 00142 //CX_COUT << "imList.size = " << imList.size() << CX_ENDL; 00143 } 00144 } 00145 00146 delete orients; 00147 for (int j=0 ; j<3 ; j++) 00148 { 00149 delete imOOO_SR64[j]; 00150 delete imOOO_C64[j]; 00151 } 00152 delete E_0_SR64; 00153 delete E_0_C64; 00154 delete gabor; 00155 delete tmp_SR64; 00156 delete tmp_C64; 00157 00158 return imList; 00159 }
Here is the call graph for this function:
|