Fawkes API
Fawkes Development Version
hipass.cpp
1
2
/***************************************************************************
3
* hipass.cpp - Implementation of a generic hipass filter
4
*
5
* Created: Thu Jun 16 17:12:16 2005
6
* Copyright 2005-2012 Tim Niemueller [www.niemueller.de]
7
****************************************************************************/
8
9
/* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or
12
* (at your option) any later version. A runtime exception applies to
13
* this software (see LICENSE.GPL_WRE file mentioned below for details).
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU Library General Public License for more details.
19
*
20
* Read the full text in the LICENSE.GPL_WRE file in the doc directory.
21
*/
22
23
#include <core/exception.h>
24
#include <fvfilters/hipass.h>
25
26
#ifdef HAVE_IPP
27
# include <ippi.h>
28
#elif defined(HAVE_OPENCV)
29
# if CV_MAJOR_VERSION < 2 || (CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION < 4)
30
# include <opencv/cv.h>
31
# endif
32
# include <opencv/cv.hpp>
33
#else
34
# error "Neither IPP nor OpenCV available"
35
#endif
36
37
namespace
firevision {
38
39
/** @class FilterHipass <fvfilters/hipass.h>
40
* Hipass filter.
41
*/
42
43
/** Constructor. */
44
FilterHipass::FilterHipass
() :
Filter
(
"FilterHipass"
)
45
{
46
}
47
48
void
49
FilterHipass::apply
()
50
{
51
#if defined(HAVE_IPP)
52
IppiSize size;
53
size.width =
src_roi
[0]->
width
;
54
size.height =
src_roi
[0]->
height
;
55
56
IppStatus status;
57
58
// base + number of bytes to line y + pixel bytes
59
status = ippiFilterHipass_8u_C1R(
src
[0] + (
src_roi
[0]->start.y *
src_roi
[0]->
line_step
)
60
+ (
src_roi
[0]->
start
.
x
*
src_roi
[0]->
pixel_step
),
61
src_roi
[0]->
line_step
,
62
dst
+ (
dst_roi
->
start
.
y
*
dst_roi
->
line_step
)
63
+ (
dst_roi
->
start
.
x
*
dst_roi
->
pixel_step
),
64
dst_roi
->
line_step
,
65
size,
66
ippMskSize3x3);
67
68
if
(status != ippStsNoErr) {
69
throw
fawkes::Exception
(
"Hipass filter failed with %i\n"
, status);
70
}
71
72
#elif defined(HAVE_OPENCV)
73
cv::Mat srcm(
src_roi
[0]->height,
74
src_roi
[0]->width,
75
CV_8UC1,
76
src
[0] + (
src_roi
[0]->start.y *
src_roi
[0]->
line_step
)
77
+ (
src_roi
[0]->
start
.
x
*
src_roi
[0]->
pixel_step
),
78
src_roi
[0]->
line_step
);
79
80
if
(
dst
== NULL) {
81
dst
=
src
[0];
82
dst_roi
=
src_roi
[0];
83
}
84
85
cv::Mat dstm(
dst_roi
->
height
,
86
dst_roi
->
width
,
87
CV_8UC1,
88
dst
+ (
dst_roi
->
start
.
y
*
dst_roi
->
line_step
)
89
+ (
dst_roi
->
start
.
x
*
dst_roi
->
pixel_step
),
90
dst_roi
->
line_step
);
91
92
cv::Mat kernel(3, 3, CV_32F);
93
float
* kernel_f = (
float
*)kernel.ptr();
94
kernel_f[0] = -1;
95
kernel_f[1] = -1;
96
kernel_f[2] = -1;
97
kernel_f[3] = -1;
98
kernel_f[4] = 8;
99
kernel_f[5] = -1;
100
kernel_f[6] = -1;
101
kernel_f[7] = -1;
102
kernel_f[8] = -1;
103
104
cv::Point kanchor(1, 1);
105
106
cv::filter2D(srcm, dstm,
/* ddepth */
-1, kernel, kanchor);
107
#endif
108
}
109
110
}
// end namespace firevision
firevision::ROI::width
unsigned int width
ROI width.
Definition:
roi.h:117
firevision::Filter::src
unsigned char ** src
Source buffers, dynamically allocated by Filter ctor.
Definition:
filter.h:61
firevision::FilterHipass::FilterHipass
FilterHipass()
Constructor.
Definition:
hipass.cpp:44
firevision::ROI::height
unsigned int height
ROI height.
Definition:
roi.h:119
firevision::Filter::src_roi
ROI ** src_roi
Source ROIs, dynamically allocated by Filter ctor.
Definition:
filter.h:66
fawkes::upoint_t::y
unsigned int y
y coordinate
Definition:
types.h:37
firevision::ROI::pixel_step
unsigned int pixel_step
pixel step
Definition:
roi.h:127
firevision::Filter::dst_roi
ROI * dst_roi
Destination ROI.
Definition:
filter.h:68
firevision::ROI::start
fawkes::upoint_t start
ROI start.
Definition:
roi.h:115
firevision::ROI::line_step
unsigned int line_step
line step
Definition:
roi.h:125
fawkes::upoint_t::x
unsigned int x
x coordinate
Definition:
types.h:36
firevision::FilterHipass::apply
virtual void apply()
Apply the filter.
Definition:
hipass.cpp:49
firevision::Filter
Filter interface.
Definition:
filter.h:33
firevision::Filter::dst
unsigned char * dst
Destination buffer.
Definition:
filter.h:63
fawkes::Exception
Base class for exceptions in Fawkes.
Definition:
exception.h:36
src
libs
fvfilters
hipass.cpp
Generated by
1.8.20