23 #include <fvfilters/sobel.h> 25 #include <core/exception.h> 29 #elif defined(HAVE_OPENCV) 30 # if CV_MAJOR_VERSION < 2 || (CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION < 4) 31 # include <opencv/cv.h> 33 # include <opencv/cv.hpp> 35 # error "Neither IPP nor OpenCV available" 76 k[0] = 1; k[1] = 2; k[2] = 1;
77 k[3] = 0; k[4] = 0; k[5] = 0;
78 k[6] = -1; k[7] = -2; k[8] = -1;
81 k[0] = 2; k[1] = 1; k[2] = 0;
82 k[3] = 1; k[4] = 0; k[5] = -1;
83 k[6] = 0; k[7] = -1; k[8] = -2;
86 k[0] = 1; k[1] = 0; k[2] = -1;
87 k[3] = 2; k[4] = 0; k[5] = -2;
88 k[6] = 1; k[7] = 0; k[8] = -1;
91 k[0] = 0; k[1] = -1; k[2] = -2;
92 k[3] = 1; k[4] = 0; k[5] = -1;
93 k[6] = 2; k[7] = 1; k[8] = 0;
96 k[0] = -1; k[1] = -2; k[2] = -1;
97 k[3] = 0; k[4] = 0; k[5] = 0;
98 k[6] = 1; k[7] = 2; k[8] = 1;
101 k[0] = -2; k[1] = -1; k[2] = 0;
102 k[3] = -1; k[4] = 0; k[5] = 1;
103 k[6] = 0; k[7] = 1; k[8] = 2;
106 k[0] = -1; k[1] = 0; k[2] = 1;
107 k[3] = -2; k[4] = 0; k[5] = 2;
108 k[6] = -1; k[7] = 0; k[8] = 1;
111 k[0] = 0; k[1] = 1; k[2] = 2;
112 k[3] = -1; k[4] = 0; k[5] = 1;
113 k[6] = -2; k[7] = -1; k[8] = 0;
116 throw fawkes::Exception(
"Cannot generate Sobel kernel for the given orientation");
127 #if defined(HAVE_IPP) 134 if (
ori[0] == ORI_HORIZONTAL) {
139 }
else if (
ori[0] == ORI_VERTICAL) {
144 }
else if ( (
ori[0] == ORI_DEG_0) ||
145 (
ori[0] == ORI_DEG_45) ||
146 (
ori[0] == ORI_DEG_90) ||
147 (
ori[0] == ORI_DEG_135) ||
148 (
ori[0] == ORI_DEG_180) ||
149 (
ori[0] == ORI_DEG_225) ||
150 (
ori[0] == ORI_DEG_270) ||
151 (
ori[0] == ORI_DEG_315) ||
152 (
ori[0] == ORI_DEG_360)
156 generate_kernel(kernel,
ori[0]);
158 IppiSize kernel_size;
159 kernel_size.width = kernel_size.height = 3;
162 anchor.x = anchor.y = 1;
173 status = ippStsNullPtrErr;
176 if ( status != ippStsNoErr ) {
179 #elif defined(HAVE_OPENCV) 184 src_roi[0]->line_step);
194 if (
ori[0] == ORI_HORIZONTAL) {
199 cv::Sobel(srcm, dstm, -1, 1, 0,
201 }
else if (
ori[0] == ORI_VERTICAL) {
206 cv::Sobel(srcm, dstm, -1, 0, 1,
208 }
else if ( (
ori[0] == ORI_DEG_0) ||
209 (
ori[0] == ORI_DEG_45) ||
210 (
ori[0] == ORI_DEG_90) ||
211 (
ori[0] == ORI_DEG_135) ||
212 (
ori[0] == ORI_DEG_180) ||
213 (
ori[0] == ORI_DEG_225) ||
214 (
ori[0] == ORI_DEG_270) ||
215 (
ori[0] == ORI_DEG_315) ||
216 (
ori[0] == ORI_DEG_360)
219 cv::Mat kernel(3, 3, CV_32F);
220 generate_kernel((
float *)kernel.ptr(),
ori[0]);
222 cv::filter2D(srcm, dstm, -1, kernel, cv::Point(1, 1));
fawkes::upoint_t start
ROI start.
unsigned int y
y coordinate
unsigned int x
x coordinate
unsigned int width
ROI width.
FilterSobel(orientation_t ori=ORI_HORIZONTAL)
Constructor.
virtual void apply()
Apply the filter.
void shrink_region(ROI *r, unsigned int n)
This shrinks the regions as needed for a N x N matrix.
unsigned char ** src
Source buffers, dynamically allocated by Filter ctor.
Base class for exceptions in Fawkes.
ROI ** src_roi
Source ROIs, dynamically allocated by Filter ctor.
unsigned int height
ROI height.
unsigned int line_step
line step
unsigned char * dst
Destination buffer.
unsigned int pixel_step
pixel step
orientation_t * ori
Orientations, one for each source image.
ROI * dst_roi
Destination ROI.