15
15
* @file TMOAlsam06.cpp
16
16
* @brief Grey colour sharpening
17
17
* @class TMOAlsam06
18
- */
18
+ */
19
19
20
20
#include " TMOAlsam06.h"
21
21
22
22
#include < algorithm>
23
- #include < math.h>
23
+ #include < math.h>
24
24
#include < iostream>
25
25
26
26
using namespace Eigen ;
@@ -36,14 +36,14 @@ TMOAlsam06::TMOAlsam06()
36
36
kernelSizeParameter.SetName (L" kernel" );
37
37
kernelSizeParameter.SetDescription (L" Kernel size of Gaussian filter applied to calculate high frequency masks." );
38
38
kernelSizeParameter.SetDefault (15 );
39
- kernelSizeParameter= 15 ;
39
+ kernelSizeParameter = 15 ;
40
40
kernelSizeParameter.SetRange (3 , 50 );
41
41
this ->Register (kernelSizeParameter);
42
42
43
43
standardDeviationParameter.SetName (L" deviation" );
44
44
standardDeviationParameter.SetDescription (L" Standard deviation of Gaussian filter applied to calculate high frequency masks." );
45
45
standardDeviationParameter.SetDefault (1 );
46
- standardDeviationParameter= 1 ;
46
+ standardDeviationParameter = 1 ;
47
47
standardDeviationParameter.SetRange (1 , 10 );
48
48
this ->Register (standardDeviationParameter);
49
49
}
@@ -60,23 +60,25 @@ TMOAlsam06::~TMOAlsam06()
60
60
*/
61
61
int TMOAlsam06::Transform ()
62
62
{
63
- double * pSourceData = pSrc->GetData ();
64
- double * pDestinationData = pDst->GetData ();
63
+ double * pSourceData = pSrc->GetData ();
64
+ double * pDestinationData = pDst->GetData ();
65
65
66
66
int i;
67
67
int pixelCount = pSrc->GetHeight () * pSrc->GetWidth ();
68
68
int width = pSrc->GetWidth ();
69
69
int height = pSrc->GetHeight ();
70
70
71
- if (kernelSizeParameter % 2 == 0 ) {
71
+ if (kernelSizeParameter % 2 == 0 )
72
+ {
72
73
kernelSizeParameter = kernelSizeParameter - 1 ;
73
74
}
74
75
75
76
MatrixXd ir (width, height);
76
77
MatrixXd ig (width, height);
77
78
MatrixXd ib (width, height);
78
79
79
- for (i = 0 ; i < pixelCount; i++) {
80
+ for (i = 0 ; i < pixelCount; i++)
81
+ {
80
82
ir (i % width, floor (i / width)) = *pSourceData++;
81
83
ig (i % width, floor (i / width)) = *pSourceData++;
82
84
ib (i % width, floor (i / width)) = *pSourceData++;
@@ -95,63 +97,71 @@ int TMOAlsam06::Transform()
95
97
*/
96
98
MatrixXd p (pixelCount, 3 );
97
99
98
- for (i = 0 ; i < pixelCount; i++) {
100
+ for (i = 0 ; i < pixelCount; i++)
101
+ {
99
102
p (i, 0 ) = *pSourceData++;
100
103
p (i, 1 ) = *pSourceData++;
101
104
p (i, 2 ) = *pSourceData++;
102
105
103
- if (p (i,0 ) > maxOriginal) {
104
- maxOriginal = p (i,0 );
106
+ if (p (i, 0 ) > maxOriginal)
107
+ {
108
+ maxOriginal = p (i, 0 );
105
109
}
106
110
107
- if (p (i,0 ) < minOriginal) {
108
- minOriginal = p (i,0 );
111
+ if (p (i, 0 ) < minOriginal)
112
+ {
113
+ minOriginal = p (i, 0 );
109
114
}
110
115
111
- if (p (i,1 ) > maxOriginal) {
112
- maxOriginal = p (i,1 );
116
+ if (p (i, 1 ) > maxOriginal)
117
+ {
118
+ maxOriginal = p (i, 1 );
113
119
}
114
120
115
- if (p (i,1 ) < minOriginal) {
116
- minOriginal = p (i,1 );
121
+ if (p (i, 1 ) < minOriginal)
122
+ {
123
+ minOriginal = p (i, 1 );
117
124
}
118
125
119
- if (p (i,2 ) > maxOriginal) {
120
- maxOriginal = p (i,2 );
126
+ if (p (i, 2 ) > maxOriginal)
127
+ {
128
+ maxOriginal = p (i, 2 );
121
129
}
122
130
123
- if (p (i,2 ) < minOriginal) {
124
- minOriginal = p (i,2 );
131
+ if (p (i, 2 ) < minOriginal)
132
+ {
133
+ minOriginal = p (i, 2 );
125
134
}
126
135
}
127
136
128
137
/* *
129
138
* Matrix pc = p^T * p (correlation matrix)
130
139
*/
131
- MatrixXd pc (3 ,3 );
140
+ MatrixXd pc (3 , 3 );
132
141
pc = p.transpose () * p;
133
142
134
143
EigenSolver<MatrixXd> es (pc);
135
-
144
+
136
145
/* *
137
146
* Matrix u = eigen vectors of matrix pc.
138
147
* pc = u * d * u^T
139
148
* Matrix d = diagonal matrix with eigen values of pc.
140
149
*/
141
- MatrixXd u (3 ,3 );
150
+ MatrixXd u (3 , 3 );
142
151
u = es.pseudoEigenvectors ();
143
152
144
153
/* *
145
154
* Matrix pu = u1 * u1^T
146
155
* projection operator of most significant vector u1
147
156
*/
148
- MatrixXd pu (3 ,3 );
157
+ MatrixXd pu (3 , 3 );
149
158
pu = u.col (0 ) * u.col (0 ).transpose ();
150
159
151
160
double g;
152
161
MatrixXd gu (width, height);
153
162
154
- for (i = 0 ; i < pixelCount; i++) {
163
+ for (i = 0 ; i < pixelCount; i++)
164
+ {
155
165
pSrc->ProgressBar (i, pixelCount * 3 );
156
166
157
167
/* *
@@ -169,10 +179,12 @@ int TMOAlsam06::Transform()
169
179
double mean = kernelSizeParameter.GetInt () / 2 ;
170
180
int flooredMean = floor (mean);
171
181
172
- for (int x = 0 ; x < kernelSizeParameter.GetInt (); x++) {
173
- for (int y = 0 ; y < kernelSizeParameter.GetInt (); y++) {
182
+ for (int x = 0 ; x < kernelSizeParameter.GetInt (); x++)
183
+ {
184
+ for (int y = 0 ; y < kernelSizeParameter.GetInt (); y++)
185
+ {
174
186
// gauss(x,y) = exp(-0.5 * (pow(x, 2) + pow(y, 2)) / pow(standardDeviationParameter, 2)) / (2 * M_PI * standardDeviationParameter * standardDeviationParameter);
175
- gauss (x,y) = exp (-0.5 * (pow ((x - mean) / standardDeviationParameter.GetInt (), 2.0 ) + pow ((y - mean) / standardDeviationParameter.GetInt (), 2.0 ))) / (2 * M_PI * standardDeviationParameter.GetInt () * standardDeviationParameter.GetInt ());
187
+ gauss (x, y) = exp (-0.5 * (pow ((x - mean) / standardDeviationParameter.GetInt (), 2.0 ) + pow ((y - mean) / standardDeviationParameter.GetInt (), 2.0 ))) / (2 * M_PI * standardDeviationParameter.GetInt () * standardDeviationParameter.GetInt ());
176
188
// sum += gauss(x,y);
177
189
}
178
190
}
@@ -189,15 +201,20 @@ int TMOAlsam06::Transform()
189
201
MatrixXd gb (width, height);
190
202
191
203
/* convolution */
192
- for (int y = 0 ; y < height; y++) {
204
+ for (int y = 0 ; y < height; y++)
205
+ {
193
206
pSrc->ProgressBar (pixelCount + y * width, pixelCount * 3 );
194
- for (int x = 0 ; x < width; x++) {
207
+ for (int x = 0 ; x < width; x++)
208
+ {
195
209
double value = 0 ;
196
210
int members = 0 ;
197
211
198
- for (int i = -flooredMean; i <= flooredMean; i++) {
199
- for (int j = -flooredMean; j <= flooredMean; j++) {
200
- if (x + i < 0 || y + j < 0 || x + i >= width || y + j >= height) {
212
+ for (int i = -flooredMean; i <= flooredMean; i++)
213
+ {
214
+ for (int j = -flooredMean; j <= flooredMean; j++)
215
+ {
216
+ if (x + i < 0 || y + j < 0 || x + i >= width || y + j >= height)
217
+ {
201
218
continue ;
202
219
}
203
220
@@ -206,7 +223,7 @@ int TMOAlsam06::Transform()
206
223
}
207
224
}
208
225
209
- gb (x,y) = value / members;
226
+ gb (x, y) = value / members;
210
227
}
211
228
}
212
229
@@ -217,11 +234,13 @@ int TMOAlsam06::Transform()
217
234
MatrixXd hg (width, height);
218
235
MatrixXd hb (width, height);
219
236
220
- for (int x = 0 ; x < width; x++) {
221
- for (int y = 0 ; y < height; y++) {
222
- hr (x,y) = ir (x,y) - gb (x,y);
223
- hg (x,y) = ig (x,y) - gb (x,y);
224
- hb (x,y) = ib (x,y) - gb (x,y);
237
+ for (int x = 0 ; x < width; x++)
238
+ {
239
+ for (int y = 0 ; y < height; y++)
240
+ {
241
+ hr (x, y) = ir (x, y) - gb (x, y);
242
+ hg (x, y) = ig (x, y) - gb (x, y);
243
+ hb (x, y) = ib (x, y) - gb (x, y);
225
244
}
226
245
}
227
246
@@ -230,25 +249,30 @@ int TMOAlsam06::Transform()
230
249
double imageNew[pixelCount];
231
250
int index = 0 ;
232
251
233
- for (int y = 0 ; y < height; y++) {
252
+ for (int y = 0 ; y < height; y++)
253
+ {
234
254
pSrc->ProgressBar (2 * pixelCount + y * width, pixelCount * 3 );
235
- for (int x = 0 ; x < width; x++) {
236
- imageNew[index ] = gu (x,y) + (hr (x,y) + hg (x,y) + hb (x,y)) / 3 ;
255
+ for (int x = 0 ; x < width; x++)
256
+ {
257
+ imageNew[index ] = gu (x, y) + (hr (x, y) + hg (x, y) + hb (x, y)) / 3 ;
237
258
238
- if (imageNew[index ] > maxNew) {
259
+ if (imageNew[index ] > maxNew)
260
+ {
239
261
maxNew = imageNew[index ];
240
262
}
241
263
242
- if (imageNew[index ] < minNew) {
264
+ if (imageNew[index ] < minNew)
265
+ {
243
266
minNew = imageNew[index ];
244
267
}
245
268
246
269
index ++;
247
270
}
248
271
}
249
272
250
- for (int i = 0 ; i < pixelCount; i++) {
251
- double value = ((imageNew[i] - minNew)/(maxNew - minNew)) * (maxOriginal - minOriginal) + minOriginal;
273
+ for (int i = 0 ; i < pixelCount; i++)
274
+ {
275
+ double value = ((imageNew[i] - minNew) / (maxNew - minNew)) * (maxOriginal - minOriginal) + minOriginal;
252
276
253
277
*pDestinationData++ = value;
254
278
*pDestinationData++ = value;
@@ -257,6 +281,3 @@ int TMOAlsam06::Transform()
257
281
258
282
return 0 ;
259
283
}
260
-
261
-
262
-
0 commit comments