Hugin trunk
0.1
Loading...
Searching...
No Matches
celeste
GaborFilter.cpp
Go to the documentation of this file.
1
/* Import from Gabor API
2
3
Copyright (c) 2002-3 Adriaan Tijsseling
4
5
6
All Rights Reserved
7
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
11
(at your option) any later version.
12
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
17
18
You should have received a copy of the GNU General Public License
19
along with this program. If not, see <http://www.gnu.org/licenses/>.
20
*/
21
22
/*
23
Description: Implementation for GaborFilter class
24
Author: Adriaan Tijsseling (AGT)
25
Copyright: (c) Copyright 2002 Adriaan Tijsseling. All rights reserved.
26
Change History (most recent first):
27
18/04/2002 - AGT - initial version
28
*/
29
30
#include <cstring>
31
#include "
GaborFilter.h
"
32
33
#ifndef M_PI
34
#define M_PI 3.1415926535897932384626433832795
35
#endif
36
37
namespace
celeste
38
{
39
// default constructor just sets everything to default
40
GaborFilter::GaborFilter
()
41
{
42
mRadius
= 16;
43
mXYO
= 8;
44
mSigma
= (float)(
M_PI
);
45
mAngle
= 0;
46
mPhase
= 0;
47
mFrequency
= 1.0;
48
mReal
= NULL;
49
mImaginary
= NULL;
50
}
51
52
// destructor: free up memory
53
GaborFilter::~GaborFilter
()
54
{
55
int
i;
56
57
if
(
mReal
!= NULL )
58
{
59
for
( i = 0; i <
mRadius
; i++ )
delete
[]
mReal
[i];
60
delete
[]
mReal
;
61
}
62
if
(
mImaginary
!= NULL )
63
{
64
for
( i = 0; i <
mRadius
; i++ )
delete
[]
mImaginary
[i];
65
delete
[]
mImaginary
;
66
}
67
}
68
69
70
// set up the filter
71
void
GaborFilter::Initialize
(
int
radius,
float
a,
float
f,
float
s,
float
p )
72
{
73
float
x, y, exponential, sincos;
74
75
// set internal variables
76
mRadius
= 2 * radius;
77
mXYO
= radius;
// origin of filter
78
mSigma
= s;
79
mAngle
= a;
80
mPhase
= p;
81
mFrequency
= (float)(f *
M_PI
/ 2.0);
82
83
// allocate memory for this filter
84
mReal
=
new
float
*[
mRadius
];
// real part of filter
85
mImaginary
=
new
float
*[
mRadius
];
// imaginary part of filter
86
87
// initialize values of filter
88
for
(
int
i = 0; i <
mRadius
; i++ )
89
{
90
mReal
[i] =
new
float
[
mRadius
];
91
mImaginary
[i] =
new
float
[
mRadius
];
92
93
for
(
int
j = 0; j <
mRadius
; j++ )
94
{
95
// offset from origin
96
y = (float)( i -
mXYO
);
97
x = (float)( j -
mXYO
);
98
99
// calculate exponential part
100
exponential = exp( - ( x*x + y*y ) /
mSigma
);
101
102
// calculate sin-cos sum
103
sincos =
mFrequency
* ( y * cos(
mAngle
) - x * sin(
mAngle
) );
104
mReal
[i][j] = exponential * sin( sincos );
105
mImaginary
[i][j] = exponential * ( cos( sincos ) - exp( (
float
)((-1.0*
M_PI
*
M_PI
)/2.0f) ) );
106
}
107
}
108
}
109
110
111
// save the filter image
112
void
GaborFilter::Save
(
char
* file,
int
angle,
int
freq )
113
{
114
PGMImage
pgmImage;
115
char
filename[256];
116
char
suffix[32];
117
118
strcpy( filename, file );
119
sprintf( suffix,
"gf_i_%d_%d.pgm"
, angle, freq );
120
strcat( filename, suffix );
121
pgmImage.
WriteScaled
( filename,
mImaginary
,
mRadius
,
mRadius
);
122
strcpy( filename, file );
123
sprintf( suffix,
"gf_r_%d_%d.pgm"
, angle, freq );
124
strcat( filename, suffix );
125
pgmImage.
WriteScaled
( filename,
mReal
,
mRadius
,
mRadius
);
126
}
127
128
};
// namespace
M_PI
#define M_PI
Definition
GaborFilter.cpp:34
GaborFilter.h
celeste::GaborFilter::mFrequency
float mFrequency
Definition
GaborFilter.h:57
celeste::GaborFilter::Initialize
void Initialize(int radius, float a, float f, float s, float p=0)
Definition
GaborFilter.cpp:71
celeste::GaborFilter::mSigma
float mSigma
Definition
GaborFilter.h:54
celeste::GaborFilter::mRadius
int mRadius
Definition
GaborFilter.h:53
celeste::GaborFilter::GaborFilter
GaborFilter()
Definition
GaborFilter.cpp:40
celeste::GaborFilter::mPhase
float mPhase
Definition
GaborFilter.h:56
celeste::GaborFilter::mImaginary
float ** mImaginary
Definition
GaborFilter.h:59
celeste::GaborFilter::mXYO
int mXYO
Definition
GaborFilter.h:52
celeste::GaborFilter::mReal
float ** mReal
Definition
GaborFilter.h:58
celeste::GaborFilter::mAngle
float mAngle
Definition
GaborFilter.h:55
celeste::GaborFilter::Save
void Save(char *file, int angle, int freq)
Definition
GaborFilter.cpp:112
celeste::GaborFilter::~GaborFilter
~GaborFilter()
Definition
GaborFilter.cpp:53
celeste::PGMImage
Definition
PGMImage.h:37
celeste::PGMImage::WriteScaled
void WriteScaled(char *filename, float **output, int height, int width)
Definition
PGMImage.cpp:334
celeste
Definition
Celeste.cpp:40
Generated on Tue Sep 1 2026 20:52:04 for Hugin trunk by
1.9.8