23 #include <core/exception.h>
24 #include <fvfilters/laplace.h>
31 #elif defined(HAVE_OPENCV)
32 # include <opencv2/opencv.hpp>
34 # error "Neither IPP nor OpenCV available"
37 namespace firevision {
60 kernel = (
int *)malloc((
size_t)size * (size_t)size *
sizeof(
int));
63 kernel_float = (
float *)malloc((
size_t)size * (size_t)size *
sizeof(
float));
64 for (
unsigned int i = 0; i < size * size; ++i) {
65 kernel_float[i] = kernel[i];
76 if (kernel_float != NULL) {
102 IppiSize ksize = {kernel_size, kernel_size};
103 IppiPoint kanchor = {(kernel_size + 1) / 2, (kernel_size + 1) / 2};
125 if (status != ippStsNoErr) {
152 #elif defined(HAVE_OPENCV)
157 cv::Mat srcm(
src_roi[0]->height,
171 if (kernel_float == NULL) {
172 cv::Laplacian(srcm, dstm, CV_8UC1, 5);
174 cv::Mat kernel(kernel_size, kernel_size, CV_32F, kernel_float);
175 cv::Point kanchor((kernel_size + 1) / 2, (kernel_size + 1) / 2);
176 cv::filter2D(srcm, dstm, -1, kernel, kanchor);
207 for (
int h = (-(
int)(size / 2)); h <= (int)((size - 1) / 2); ++h) {
208 for (
int w = (-(
int)(size / 2)); w <= (int)((size - 1) / 2); ++w) {
211 int v = (int)roundf(-1 / (M_PI * sigma * sigma * sigma * sigma)
212 * (1 - ((w * w + h * h) / (2 * sigma * sigma)))
213 * exp(-((w * w + h * h) / (2 * sigma * sigma))) * scale);
215 kernel[(h + (size / 2)) * size + (w + (size / 2))] = v;
Base class for exceptions in Fawkes.
~FilterLaplace()
Destructor.
virtual void apply()
Apply the filter.
FilterLaplace()
Constructor.
static void calculate_kernel(int *kernel_buffer, float sigma, unsigned int size, float scale)
Calculate a Laplacian of Gaussian kernel.
ROI ** src_roi
Source ROIs, dynamically allocated by Filter ctor.
unsigned char ** src
Source buffers, dynamically allocated by Filter ctor.
unsigned char * dst
Destination buffer.
ROI * dst_roi
Destination ROI.
unsigned int height
ROI height.
fawkes::upoint_t start
ROI start.
unsigned int line_step
line step
unsigned int width
ROI width.
unsigned int pixel_step
pixel step
unsigned int x
x coordinate
unsigned int y
y coordinate