//////////////////////////////////////////////////////////////////////////////// // Reference row convolution filter //////////////////////////////////////////////////////////////////////////////// extern "C" void convolutionRow( float *h_Result, float *h_Data, float *h_Kernel, int dataW, int dataH, int kernelR ){ int x, y, k, d; float sum; for(y = 0; y < dataH; y++) { for(x=0;x= 0 && x + k < dataW) sum += h_Data[y*dataW + x + k] * h_Kernel[kernelR - k]; } h_Result[y * dataW + x] = sum; } } } //////////////////////////////////////////////////////////////////////////////// // Reference column convolution filter //////////////////////////////////////////////////////////////////////////////// extern "C" void convolutionColumn( float *h_Result, float *h_Data, float *h_Kernel, int dataW, int dataH, int kernelR ){ int x, y, k, d; float sum; for(y = 0; y < dataH; y++) for(x = 0; x < dataW; x++){ sum = 0; for(k = -kernelR; k <= kernelR; k++){ if(y + k >= 0 && y + k < dataH) sum += h_Data[(y+k) * dataW + x] * h_Kernel[kernelR - k]; } h_Result[y * dataW + x] = sum; } }