@@ -119,8 +119,9 @@ void harris_response(float* x_out, float* y_out, float* score_out,
119
119
unsigned * usable_feat, CParam<T> image,
120
120
const unsigned block_size, const float k_thr,
121
121
const unsigned patch_size) {
122
- const af::dim4 idims = image.dims ();
123
- const T* image_ptr = image.get ();
122
+ const af::dim4 idims = image.dims ();
123
+ const af::dim4 istrides = image.strides ();
124
+ const T* image_ptr = image.get ();
124
125
for (unsigned f = 0 ; f < total_feat; f++) {
125
126
unsigned x, y;
126
127
float scl = 1 .f ;
@@ -154,10 +155,12 @@ void harris_response(float* x_out, float* y_out, float* score_out,
154
155
int j = k % block_size - r;
155
156
156
157
// Calculate local x and y derivatives
157
- float ix = image_ptr[(x + i + 1 ) * idims[0 ] + y + j] -
158
- image_ptr[(x + i - 1 ) * idims[0 ] + y + j];
159
- float iy = image_ptr[(x + i) * idims[0 ] + y + j + 1 ] -
160
- image_ptr[(x + i) * idims[0 ] + y + j - 1 ];
158
+ float ix =
159
+ image_ptr[(x + i + 1 ) * istrides[1 ] + (y + j) * istrides[0 ]] -
160
+ image_ptr[(x + i - 1 ) * istrides[1 ] + (y + j) * istrides[0 ]];
161
+ float iy =
162
+ image_ptr[(x + i) * istrides[1 ] + (y + j + 1 ) * istrides[0 ]] -
163
+ image_ptr[(x + i) * istrides[1 ] + (y + j - 1 ) * istrides[0 ]];
161
164
162
165
// Accumulate second order derivatives
163
166
ixx += ix * ix;
@@ -189,8 +192,9 @@ template<typename T>
189
192
void centroid_angle (const float * x_in, const float * y_in,
190
193
float * orientation_out, const unsigned total_feat,
191
194
CParam<T> image, const unsigned patch_size) {
192
- const af::dim4 idims = image.dims ();
193
- const T* image_ptr = image.get ();
195
+ const af::dim4 idims = image.dims ();
196
+ const af::dim4 istrides = image.strides ();
197
+ const T* image_ptr = image.get ();
194
198
for (unsigned f = 0 ; f < total_feat; f++) {
195
199
unsigned x = (unsigned )round (x_in[f]);
196
200
unsigned y = (unsigned )round (y_in[f]);
@@ -205,7 +209,7 @@ void centroid_angle(const float* x_in, const float* y_in,
205
209
int j = k % patch_size - r;
206
210
207
211
// Calculate first order moments
208
- T p = image_ptr[(x + i) * idims[ 0 ] + y + j];
212
+ T p = image_ptr[(x + i) * istrides[ 1 ] + ( y + j) * istrides[ 0 ] ];
209
213
m01 += j * p;
210
214
m10 += i * p;
211
215
}
@@ -219,17 +223,17 @@ template<typename T>
219
223
inline T get_pixel (unsigned x, unsigned y, const float ori, const unsigned size,
220
224
const int dist_x, const int dist_y, CParam<T> image,
221
225
const unsigned patch_size) {
222
- const af::dim4 idims = image.dims ();
223
- const T* image_ptr = image.get ();
224
- float ori_sin = sin (ori);
225
- float ori_cos = cos (ori);
226
- float patch_scl = (float )size / (float )patch_size;
226
+ const af::dim4 istrides = image.strides ();
227
+ const T* image_ptr = image.get ();
228
+ float ori_sin = sin (ori);
229
+ float ori_cos = cos (ori);
230
+ float patch_scl = (float )size / (float )patch_size;
227
231
228
232
// Calculate point coordinates based on orientation and size
229
233
x += round (dist_x * patch_scl * ori_cos - dist_y * patch_scl * ori_sin);
230
234
y += round (dist_x * patch_scl * ori_sin + dist_y * patch_scl * ori_cos);
231
235
232
- return image_ptr[x * idims[ 0 ] + y];
236
+ return image_ptr[x * istrides[ 1 ] + y * istrides[ 0 ] ];
233
237
}
234
238
235
239
template <typename T>
0 commit comments