diff options
author | zedarider <ymherklotz@gmail.com> | 2016-03-09 00:07:06 +0000 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-03-09 00:07:06 +0000 |
commit | 84a5ee8a242b03458d7b4fb311219465fb58f285 (patch) | |
tree | 8bdd956db65c707d64b3606d76f1eecda80dad24 | |
parent | 1582d106e3cafba5fad9ffeb6f1b0e0bd3cf5589 (diff) | |
download | FPGA-2015-84a5ee8a242b03458d7b4fb311219465fb58f285.tar.gz FPGA-2015-84a5ee8a242b03458d7b4fb311219465fb58f285.zip |
improving sobel
-rw-r--r-- | sobel_filter/sobel.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/sobel_filter/sobel.cpp b/sobel_filter/sobel.cpp index 3654422..cdddbfb 100644 --- a/sobel_filter/sobel.cpp +++ b/sobel_filter/sobel.cpp @@ -39,6 +39,7 @@ #include <ac_fixed.h> #include "sobel.h" #include <iostream> +#include <cmath> // shift_class: page 119 HLS Blue Book #include "shift_class.h" @@ -51,7 +52,6 @@ void sobel(ac_int<PIXEL_WL*KERNEL_WIDTH,false> vin[NUM_PIXELS], ac_int<PIXEL_WL, { ac_int<16, false> intensity, inte[KERNEL_WIDTH]; - // #if 1: use filter // #if 0: copy input to output bypassing filter #if 1 @@ -73,19 +73,16 @@ void sobel(ac_int<PIXEL_WL*KERNEL_WIDTH,false> vin[NUM_PIXELS], ac_int<PIXEL_WL, ACC1: for (i = 0; i < KERNEL_WIDTH; ++i) { - inte[0] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL))*XMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL))*XMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(0))*XMATRIX[0][i])) / 3; - inte[0] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL))*YMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL))*YMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(0))*YMATRIX[0][i])) / 3; + inte[0] += sqrt(pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL))*XMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL))*XMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(0))*XMATRIX[0][i]))/3, 2)+pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL))*YMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL))*YMATRIX[0][i])+((regs[i].slc<COLOUR_WL>(0))*YMATRIX[0][i]))/3, 2)); - inte[1] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + PIXEL_WL))*XMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + PIXEL_WL))*XMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(PIXEL_WL))*XMATRIX[1][i])) / 3; - inte[1] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + PIXEL_WL))*YMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + PIXEL_WL))*YMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(PIXEL_WL))*YMATRIX[1][i])) / 3; + inte[1] += sqrt(pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + PIXEL_WL))*XMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + PIXEL_WL))*XMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(PIXEL_WL))*XMATRIX[1][i]))/3, 2)+pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + PIXEL_WL))*YMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + PIXEL_WL))*YMATRIX[1][i])+((regs[i].slc<COLOUR_WL>(PIXEL_WL))*YMATRIX[1][i]))/3, 2)); - inte[2] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + 2*PIXEL_WL))*XMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + 2*PIXEL_WL))*XMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(2*PIXEL_WL))*XMATRIX[2][i])) / 3; - inte[2] += (((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + 2*PIXEL_WL))*YMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + 2*PIXEL_WL))*YMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(2*PIXEL_WL))*YMATRIX[2][i])) / 3; + inte[2] += sqrt(pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + 2*PIXEL_WL))*XMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + 2*PIXEL_WL))*XMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(2*PIXEL_WL))*XMATRIX[2][i]))/3, 2)+pow((((regs[i].slc<COLOUR_WL>(2*COLOUR_WL + 2*PIXEL_WL))*YMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(COLOUR_WL + 2*PIXEL_WL))*YMATRIX[2][i])+((regs[i].slc<COLOUR_WL>(2*PIXEL_WL))*YMATRIX[2][i]))/3, 2)); } // add the accumualted value for all processed lines - ACC2: + ACC2: for(i = 0; i < KERNEL_WIDTH; i++) - { + { intensity += inte[i]; } @@ -95,7 +92,8 @@ void sobel(ac_int<PIXEL_WL*KERNEL_WIDTH,false> vin[NUM_PIXELS], ac_int<PIXEL_WL, intensity /= 2*KERNEL_NUMEL; // group the RGB components into a single signal - vout[p] = ((((ac_int<PIXEL_WL, false>)intensity) << (2*COLOUR_WL)) | (((ac_int<PIXEL_WL, false>)intensity) << COLOUR_WL) | (ac_int<PIXEL_WL, false>)intensity); + vout[p] = ((((ac_int<PIXEL_WL, false>)intensity) << (2*COLOUR_WL)) | + (((ac_int<PIXEL_WL, false>)intensity) << COLOUR_WL) | (ac_int<PIXEL_WL, false>)intensity); } } @@ -118,4 +116,4 @@ void sobel(ac_int<PIXEL_WL*KERNEL_WIDTH,false> vin[NUM_PIXELS], ac_int<PIXEL_WL, #endif -// end of file
\ No newline at end of file +// end of file |