diff --git a/include/filters.hpp b/include/filters.hpp index c86c095..67c7f99 100644 --- a/include/filters.hpp +++ b/include/filters.hpp @@ -15,6 +15,7 @@ class Filters enum FILTERS_IMPLEMENTATIONS { OPENCV, + Ekaterina_Maljutina, // Add your enum value here // YOUR_NAME, NUM_IMPLS diff --git a/src/filters_ekaterina_maljutina.cpp b/src/filters_ekaterina_maljutina.cpp new file mode 100644 index 0000000..b23c41e --- /dev/null +++ b/src/filters_ekaterina_maljutina.cpp @@ -0,0 +1,210 @@ +#include "filters.hpp" + +#include +#include + + +using namespace cv; + +class FiltersEkaterinaMaljutina : public Filters +{ + +public: + + virtual void boxFilter(const Matrix &src, Matrix& dst, const int kSize = 3) + { + dst = Matrix(src.rows(),src.cols()); + + int deth = kSize/2; + + for (int x=0; x< src.rows(); x++) + { + for (int y=0; y= src.rows() || y+j >= src.cols() ) + { + if ( (x+i<0 && y+j<0 ) || (x+i >= src.rows() && y+j >= src.cols()) ) + { + intens += src[x-i][y-j]/ (kSize * kSize); + } + else + { + if (x+i<0 || x+i >= src.rows()) + { + intens += src[x-i][y+j]/ (kSize * kSize); + } + else + { + intens +=src [x+i][y-j]/ (kSize * kSize); + + } + } + + } + else + { + intens += src [x+i][y+j] / (kSize * kSize); + } + + } + } + //intens = intens / (kSize * kSize) ; + dst[x][y] = intens; + } + } + + + } + virtual void filter2d(const Matrix &src, Matrix& dst, const Matrix &kernel) + { + dst = Matrix(src.rows(),src.cols()); + + int kSize = kernel.rows(); + int deth = kSize/2; + + for (int x=deth; x< src.rows()-deth; x++) + { + for (int y=deth; y= 0; i--) + { + for (int j = 0; j < i; j++) + { + if (intens[j] > intens[j+1]) + { + int tmp = intens[j]; + intens[j] = intens[j + 1]; + intens[j + 1] = tmp; + } + } + } + + dst[x][y] = intens[kSize/2]; + } + } + + + + } + virtual void SobelOx(const Matrix &src, Matrix &dst) + { + /* + matrix Sobel + -1 0 1 + -2 0 2 + -1 0 1 + */ + + + Matrix sobel(3,3); + sobel[0][0]=sobel[0][2] = -1; + sobel[1][0] = sobel[1][1] = sobel[1][2] = 0; + sobel[0][1]=-2; + sobel[2][0] = sobel[2][2]= 1; + sobel[2][1] = 2; + + + dst = Matrix(src.rows(),src.cols()); + + int deth = 1; + + for (int x=0; x< src.rows(); x++) + { + for (int y=0; y= src.rows() || y+j >= src.cols() ) + { + if ( (x+i<0 && y+j<0 ) || (x+i >= src.rows() && y+j >= src.cols()) ) + { + intens += src[x-i][y-j] * sobel[i+deth][j+deth]; + } + else + { + if (x+i<0 || x+i >= src.rows()) + { + intens += src[x-i][y+j]* sobel[i+deth][j+deth]; + } + else + { + intens +=src [x+i][y-j]* sobel[i+deth][j+deth]; + + } + } + + } + else + { + intens += src [x+i][y+j]* sobel[i+deth][j+deth] ; + } + + } + } + + dst[x][y] = intens; + } + } + + + } +}; + + +Filters* createFiltersEkaterina_Maljutina() +{ + Filters* filters = new FiltersEkaterinaMaljutina(); + return filters; +} \ No newline at end of file diff --git a/src/filters_factory.cpp b/src/filters_factory.cpp index c977bf3..c873d2c 100644 --- a/src/filters_factory.cpp +++ b/src/filters_factory.cpp @@ -3,6 +3,7 @@ Filters* createFiltersOpenCV(); // Declare your implementation here // Filters* createFiltersYourName(); +Filters* createFiltersEkaterina_Maljutina(); Filters* createFilters(FILTERS_IMPLEMENTATIONS impl) { @@ -12,7 +13,10 @@ Filters* createFilters(FILTERS_IMPLEMENTATIONS impl) // Add case for your implementation // case YOUR_NAME: // return createFiltersYourName(); + case Ekaterina_Maljutina: + return createFiltersEkaterina_Maljutina(); default: return 0; } } +