aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-03-09 00:07:06 +0000
committerzedarider <ymherklotz@gmail.com>2016-03-09 00:07:06 +0000
commit84a5ee8a242b03458d7b4fb311219465fb58f285 (patch)
tree8bdd956db65c707d64b3606d76f1eecda80dad24
parent1582d106e3cafba5fad9ffeb6f1b0e0bd3cf5589 (diff)
downloadFPGA-2015-84a5ee8a242b03458d7b4fb311219465fb58f285.tar.gz
FPGA-2015-84a5ee8a242b03458d7b4fb311219465fb58f285.zip
improving sobel
-rw-r--r--sobel_filter/sobel.cpp20
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