template<class ArrayT, class KerArrayT, class ArithT, class PixOpT, class RedOpT>
Line : Y direction, simple.
Definition at line 130 of file FuncRecGenConv2dSep.h. References ArrayCH(), ArrayCPB(), ArrayCW(), ArrayInc(), PtrRead(), and PtrWrite(). Referenced by FuncRecGenConv2dSep_YdirSim(). 00133 { 00134 typedef typename ArrayT::StorType StorT; 00135 typedef typename KerArrayT::StorType KerStorT; 00136 00137 int height = ArrayCH(a); 00138 int kerWidth = ArrayCW(ker); 00139 int kerBW = ArrayCW(ker) / 2; 00140 StorT* aPtr = ArrayCPB(a, x, -kerBW); 00141 int incY = ArrayInc(a, 0, 1); 00142 ArithT result; 00143 ArithT* ngbPtr = ngbBuf; 00144 int y, n; 00145 int scanSize = height+kerBW; 00146 //int scanSize = height; 00147 00148 // scan order 00149 00150 for (n=0 ; n<kerBW ; n++) 00151 { 00152 ngbBuf[n] = PtrRead(aPtr, ArithT()); 00153 aPtr += incY; 00154 } 00155 00156 for (y=0 ; y<scanSize ; y++) 00157 { 00158 ngbPtr[kerBW] = PtrRead(aPtr, ArithT()); 00159 aPtr += incY; 00160 KerStorT* kPtr = ArrayCPB(ker, 0, 0); 00161 result = pixOp.DoIt(ngbPtr[0], PtrRead(kPtr, ArithT())); 00162 kPtr += KerArrayT::ElemSize(); 00163 for (n=1 ; n<=kerBW ; n++) 00164 { 00165 redOp.DoIt(result, pixOp.DoIt(ngbPtr[n], PtrRead(kPtr, ArithT()))); 00166 kPtr += KerArrayT::ElemSize(); 00167 } 00168 ngbPtr[kerBW] = result; 00169 ngbPtr++; 00170 } 00171 00172 // Propagate last pixel value into border 00173 00174 ngbPtr += kerBW-1; // now at last pixel 00175 ArithT borderVal = ngbPtr[0]; 00176 borderVal = borderVal * bottomNorm; 00177 ngbPtr++; 00178 for (y=0 ; y<kerBW ; y++) 00179 ngbPtr[y] = borderVal; 00180 aPtr += incY * kerBW; 00181 00182 // anti scan order 00183 00184 aPtr -= incY * (kerBW+1); 00185 ngbPtr -= 1; 00186 00187 for (y=0 ; y<scanSize ; y++) 00188 { 00189 KerStorT* kPtr = ArrayCPB(ker, kerBW, 0); 00190 result = pixOp.DoIt(ngbPtr[0], PtrRead(kPtr, ArithT())); 00191 kPtr += KerArrayT::ElemSize(); 00192 for (n=1 ; n<=kerBW ; n++) 00193 { 00194 redOp.DoIt(result, pixOp.DoIt(ngbPtr[n], PtrRead(kPtr, ArithT()))); 00195 kPtr += KerArrayT::ElemSize(); 00196 } 00197 *ngbPtr-- = result; 00198 PtrWrite(aPtr, result); 00199 aPtr -= incY; 00200 } 00201 }
Here is the call graph for this function:
|