Definition at line 120 of file AniGauss.h. References TriggsM(). Referenced by anigauss(). 00121 { 00122 double *p0, *p1, *p2, *p3, *pswap; 00123 double *buf0, *buf1, *buf2, *buf3; 00124 double *uplusbuf; 00125 int i, j; 00126 double b1, b2, b3; 00127 double pix; 00128 double sum, sumsq; 00129 double uplus, vplus; 00130 double unp, unp1, unp2; 00131 double M[9]; 00132 00133 sumsq = filter[3]; 00134 sum = sumsq*sumsq; 00135 00136 uplusbuf = (double*) malloc(sx*sizeof(*uplusbuf)); 00137 00138 buf0 = (double*) malloc(sx*sizeof(*buf0)); 00139 buf1 = (double*) malloc(sx*sizeof(*buf1)); 00140 buf2 = (double*) malloc(sx*sizeof(*buf2)); 00141 buf3 = (double*) malloc(sx*sizeof(*buf3)); 00142 00143 p0 = buf0; p1 = buf1; p2 = buf2; p3 = buf3; 00144 00145 /* causal filter */ 00146 b1 = filter[2]; b2 = filter[1]; b3 = filter[0]; 00147 00148 /* border first line*/ 00149 for (j = 0; j < sx; j++) { 00150 pix = *src++/sumsq; 00151 p1[j] = pix; p2[j] = pix; p3[j] = pix; 00152 } 00153 /* calc last line for Triggs boundary condition */ 00154 src += (sy-2)*sx; 00155 for (j = 0; j < sx; j++) 00156 uplusbuf[j] = *src++/(1.0-b1-b2-b3); 00157 src -= sy*sx; 00158 00159 for (i = 0; i < sy; i++) { 00160 for (j = 0; j < sx; j++) { 00161 pix = *src++ + b1*p1[j] + b2*p2[j] + b3*p3[j]; 00162 *dest++ = pix; 00163 p0[j] = pix; 00164 } 00165 00166 /* shift history */ 00167 pswap = p3; p3 = p2; p2 = p1; p1 = p0; p0 = pswap; 00168 } 00169 00170 00171 /* anti-causal filter */ 00172 00173 /* apply Triggs border condition */ 00174 b1 = filter[4]; b2 = filter[5]; b3 = filter[6]; 00175 TriggsM(filter, M); 00176 00177 /* first line */ 00178 p0 = uplusbuf; 00179 for (j = sx-1; j >= 0; j--) { 00180 uplus = p0[j]; 00181 vplus = uplus/(1.0-b1-b2-b3); 00182 00183 unp = p1[j]-uplus; 00184 unp1 = p2[j]-uplus; 00185 unp2 = p3[j]-uplus; 00186 pix = M[0]*unp+M[1]*unp1+M[2]*unp2 + vplus; 00187 pix *= sum; 00188 *(--dest) = pix; 00189 p1[j] = pix; 00190 pix = M[3]*unp+M[4]*unp1+M[5]*unp2 + vplus; 00191 p2[j] = pix*sum; 00192 pix = M[6]*unp+M[7]*unp1+M[8]*unp2 + vplus; 00193 p3[j] = pix*sum; 00194 } 00195 00196 for (i = sy-2; i >= 0; i--) { 00197 for (j = sx-1; j >= 0; j--) { 00198 pix = sum * *(--dest) + b1*p1[j] + b2*p2[j] + b3*p3[j]; 00199 *dest = pix; 00200 p0[j] = pix; 00201 } 00202 00203 /* shift history */ 00204 pswap = p3; p3 = p2; p2 = p1; p1 = p0; p0 = pswap; 00205 } 00206 00207 free(buf0); 00208 free(buf1); 00209 free(buf2); 00210 free(buf3); 00211 free(uplusbuf); 00212 }
Here is the call graph for this function:
|