Skip to content

Commit 1f79381

Browse files
committed
Refactor expected image generation part
Add copyright header
1 parent 30d5068 commit 1f79381

File tree

4 files changed

+109
-144
lines changed

4 files changed

+109
-144
lines changed

test/extension/numeric/convolve.cpp

Lines changed: 32 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,10 @@ struct test_image_5x5_kernel_1x9_boundary_extend_zero
131131
image_t img_expected_col(img_view.width(), img_view.height());
132132
unsigned int const kernel_shift_offset = 2;
133133

134-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
135-
{
136-
auto img_it = img_view.row_begin(y);
137-
auto img_expected_row_it = gil::view(img_expected_row).row_begin(y);
138-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
139-
img_expected_row_it[x] = img_it[x - 2];
140-
}
141-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
142-
{
143-
auto img_expected_row_it = gil::view(img_expected_row).col_begin(x);
144-
auto img_expected_col_it = gil::view(img_expected_col).col_begin(x);
145-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height(); ++y)
146-
img_expected_col_it[y] = img_expected_row_it[y - 2];
147-
}
134+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
135+
kernel_shift_offset);
136+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
137+
gil::view(img_expected_col), kernel_shift_offset);
148138

149139
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>(
150140
{0, 0, 0, 0, 0, 0, 1, 0, 0});
@@ -173,23 +163,17 @@ struct test_image_5x5_kernel_1x9_boundary_extend_constant
173163
image_t img_out(img), img_expected_row(img);
174164
unsigned int const kernel_shift_offset = 2;
175165

176-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
177-
{
178-
auto img_it = img_view.row_begin(y);
179-
auto img_expected_row_it = gil::view(img_expected_row).row_begin(y);
180-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
181-
img_expected_row_it[x] = img_it[x - 2];
182-
img_expected_row_it[1] = img_it[0];
183-
}
166+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
167+
kernel_shift_offset);
168+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
169+
1, 0, 0, img_view.height(), 2);
170+
184171
image_t img_expected_col(img_expected_row);
185-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
186-
{
187-
auto img_expected_row_it = gil::view(img_expected_row).col_begin(x);
188-
auto img_expected_col_it = gil::view(img_expected_col).col_begin(x);
189-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height(); ++y)
190-
img_expected_col_it[y] = img_expected_row_it[y - 2];
191-
img_expected_col_it[1] = img_expected_row_it[0];
192-
}
172+
173+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
174+
gil::view(img_expected_col), kernel_shift_offset);
175+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
176+
gil::view(img_expected_col), 1, 0, 0, 2, img_view.width());
193177

194178
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>({0, 0, 0, 0, 0, 0, 1, 0, 0});
195179
gil::detail::convolve_1d<pixel_t>(gil::const_view(img_out), kernel_shift_by_two,
@@ -218,20 +202,11 @@ struct test_image_5x5_kernel_1x3_boundary_output_zero
218202
image_t img_expected_col(img_view.width(), img_view.height());
219203
unsigned int const kernel_shift_offset = 1;
220204

221-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
222-
{
223-
auto img_it = img_view.row_begin(y);
224-
auto img_expected_row_it = gil::view(img_expected_row).row_begin(y);
225-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width() - 1; ++x)
226-
img_expected_row_it[x] = img_it[x - 1];
227-
}
228-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
229-
{
230-
auto img_expected_row_it = gil::view(img_expected_row).col_begin(x);
231-
auto img_expected_col_it = gil::view(img_expected_col).col_begin(x);
232-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height() - 1; ++y)
233-
img_expected_col_it[y] = img_expected_row_it[y - 1];
234-
}
205+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
206+
kernel_shift_offset, 0, 0, img_view.height(), img_view.width() - 1);
207+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
208+
gil::view(img_expected_col), kernel_shift_offset, 0, 0, img_view.height() - 1,
209+
img_view.width());
235210

236211
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
237212
gil::detail::convolve_1d<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -259,21 +234,14 @@ struct test_image_5x5_kernel_1x3_boundary_output_ignore
259234
image_t img_out(img), img_expected_row(img);
260235
unsigned int const kernel_shift_offset = 1;
261236

262-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
263-
{
264-
auto img_it = img_view.row_begin(y);
265-
auto img_expected_row_it = gil::view(img_expected_row).row_begin(y);
266-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width() - 1; ++x)
267-
img_expected_row_it[x] = img_it[x - 1];
268-
}
237+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
238+
kernel_shift_offset, 0, 0, img_view.height(), img_view.width() - 1);
239+
269240
image_t img_expected_col(img_expected_row);
270-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
271-
{
272-
auto img_expected_row_it = gil::view(img_expected_row).col_begin(x);
273-
auto img_expected_col_it = gil::view(img_expected_col).col_begin(x);
274-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height() - 1; ++y)
275-
img_expected_col_it[y] = img_expected_row_it[y - 1];
276-
}
241+
242+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
243+
gil::view(img_expected_col), kernel_shift_offset, 0, 0, img_view.height() - 1,
244+
img_view.width());
277245

278246
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
279247
gil::detail::convolve_1d<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -301,21 +269,13 @@ struct test_image_5x5_kernel_1x3_boundary_extend_padded
301269
image_t img_out(img), img_expected_row(img);
302270
unsigned int const kernel_shift_offset = 1;
303271

304-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
305-
{
306-
auto img_it = img_view.row_begin(y);
307-
auto img_expected_row_it = gil::view(img_expected_row).row_begin(y);
308-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
309-
img_expected_row_it[x] = img_it[x - 1];
310-
}
272+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected_row),
273+
kernel_shift_offset);
274+
311275
image_t img_expected_col(img_expected_row);
312-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
313-
{
314-
auto img_expected_row_it = gil::view(img_expected_row).col_begin(x);
315-
auto img_expected_col_it = gil::view(img_expected_col).col_begin(x);
316-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.width(); ++y)
317-
img_expected_col_it[y] = img_expected_row_it[y - 1];
318-
}
276+
277+
fixture::col_conv1D_offset_img_generator(gil::view(img_expected_row),
278+
gil::view(img_expected_col), kernel_shift_offset);
319279

320280
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
321281
gil::detail::convolve_1d<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,

test/extension/numeric/convolve_cols.cpp

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,8 @@ struct test_image_5x5_kernel_1x9_boundary_extend_zero
7878
image_t img_out(img), img_expected(img_view.width(), img_view.height());
7979
unsigned int const kernel_shift_offset = 2;
8080

81-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
82-
{
83-
auto img_it = img_view.col_begin(x);
84-
auto img_expected_it = gil::view(img_expected).col_begin(x);
85-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height(); ++y)
86-
img_expected_it[y] = img_it[y - 2];
87-
}
81+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
82+
kernel_shift_offset);
8883

8984
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>(
9085
{0, 0, 0, 0, 0, 0, 1, 0, 0});
@@ -112,14 +107,11 @@ struct test_image_5x5_kernel_1x9_boundary_extend_constant
112107
image_t img_out(img), img_expected(img);
113108
unsigned int const kernel_shift_offset = 2;
114109

115-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
116-
{
117-
auto img_it = img_view.col_begin(x);
118-
auto img_expected_it = gil::view(img_expected).col_begin(x);
119-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height(); ++y)
120-
img_expected_it[y] = img_it[y - 2];
121-
img_expected_it[1] = img_it[0];
122-
}
110+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
111+
kernel_shift_offset);
112+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
113+
1, 0, 0, 2, img_view.width());
114+
123115
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>(
124116
{0, 0, 0, 0, 0, 0, 1, 0, 0});
125117
gil::convolve_cols<pixel_t>(gil::const_view(img_out), kernel_shift_by_two,
@@ -147,13 +139,8 @@ struct test_image_5x5_kernel_1x3_boundary_output_zero
147139
image_t img_out(img), img_expected(img_view.width(), img_view.height());
148140
unsigned int const kernel_shift_offset = 1;
149141

150-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
151-
{
152-
auto img_it = img_view.col_begin(x);
153-
auto img_expected_it = gil::view(img_expected).col_begin(x);
154-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height() - 1; ++y)
155-
img_expected_it[y] = img_it[y - 1];
156-
}
142+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
143+
kernel_shift_offset, 0, 0, img_view.height() - 1, img_view.width());
157144

158145
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
159146
gil::convolve_cols<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -181,13 +168,8 @@ struct test_image_5x5_kernel_1x3_boundary_output_ignore
181168
image_t img_out(img), img_expected(img);
182169
unsigned int const kernel_shift_offset = 1;
183170

184-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
185-
{
186-
auto img_it = img_view.col_begin(x);
187-
auto img_expected_it = gil::view(img_expected).col_begin(x);
188-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.height() - 1; ++y)
189-
img_expected_it[y] = img_it[y - 1];
190-
}
171+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
172+
kernel_shift_offset, 0, 0, img_view.height() - 1, img_view.width());
191173

192174
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
193175
gil::convolve_cols<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -215,13 +197,8 @@ struct test_image_5x5_kernel_1x3_boundary_extend_padded
215197
image_t img_out(img), img_expected(img);
216198
unsigned int const kernel_shift_offset = 1;
217199

218-
for (std::ptrdiff_t x = 0; x < img_view.width(); ++x)
219-
{
220-
auto img_it = img_view.col_begin(x);
221-
auto img_expected_it = gil::view(img_expected).col_begin(x);
222-
for (std::ptrdiff_t y = kernel_shift_offset; y < img_view.width(); ++y)
223-
img_expected_it[y] = img_it[y - 1];
224-
}
200+
fixture::col_conv1D_offset_img_generator(img_view, gil::view(img_expected),
201+
kernel_shift_offset);
225202

226203
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
227204
gil::convolve_cols<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,

test/extension/numeric/convolve_rows.cpp

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,8 @@ struct test_image_5x5_kernel_1x9_boundary_extend_zero
7878
image_t img_out(img), img_expected(img_view.width(), img_view.height());
7979
unsigned int const kernel_shift_offset = 2;
8080

81-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
82-
{
83-
auto img_it = img_view.row_begin(y);
84-
auto img_expected_it = gil::view(img_expected).row_begin(y);
85-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
86-
img_expected_it[x] = img_it[x - 2];
87-
}
81+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
82+
kernel_shift_offset);
8883

8984
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>(
9085
{0, 0, 0, 0, 0, 0, 1, 0, 0});
@@ -112,14 +107,11 @@ struct test_image_5x5_kernel_1x9_boundary_extend_constant
112107
image_t img_out(img), img_expected(img);
113108
unsigned int const kernel_shift_offset = 2;
114109

115-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
116-
{
117-
auto img_it = img_view.row_begin(y);
118-
auto img_expected_it = gil::view(img_expected).row_begin(y);
119-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
120-
img_expected_it[x] = img_it[x - 2];
121-
img_expected_it[1] = img_it[0];
122-
}
110+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
111+
kernel_shift_offset);
112+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
113+
1, 0, 0, img_view.height(), 2);
114+
123115
auto const kernel_shift_by_two = fixture::create_kernel<channel_t>(
124116
{0, 0, 0, 0, 0, 0, 1, 0, 0});
125117
gil::convolve_rows<pixel_t>(gil::const_view(img_out), kernel_shift_by_two,
@@ -147,13 +139,8 @@ struct test_image_5x5_kernel_1x3_boundary_output_zero
147139
image_t img_out(img), img_expected(img_view.width(), img_view.height());
148140
unsigned int const kernel_shift_offset = 1;
149141

150-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
151-
{
152-
auto img_it = img_view.row_begin(y);
153-
auto img_expected_it = gil::view(img_expected).row_begin(y);
154-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width() - 1; ++x)
155-
img_expected_it[x] = img_it[x - 1];
156-
}
142+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
143+
kernel_shift_offset, 0, 0, img_view.height(), img_view.width() - 1);
157144

158145
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
159146
gil::convolve_rows<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -181,13 +168,8 @@ struct test_image_5x5_kernel_1x3_boundary_output_ignore
181168
image_t img_out(img), img_expected(img);
182169
unsigned int const kernel_shift_offset = 1;
183170

184-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
185-
{
186-
auto img_it = img_view.row_begin(y);
187-
auto img_expected_it = gil::view(img_expected).row_begin(y);
188-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width() - 1; ++x)
189-
img_expected_it[x] = img_it[x - 1];
190-
}
171+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
172+
kernel_shift_offset, 0, 0, img_view.height(), img_view.width() - 1);
191173

192174
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
193175
gil::convolve_rows<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,
@@ -215,13 +197,8 @@ struct test_image_5x5_kernel_1x3_boundary_extend_padded
215197
image_t img_out(img), img_expected(img);
216198
unsigned int const kernel_shift_offset = 1;
217199

218-
for (std::ptrdiff_t y = 0; y < img_view.height(); ++y)
219-
{
220-
auto img_it = img_view.row_begin(y);
221-
auto img_expected_it = gil::view(img_expected).row_begin(y);
222-
for (std::ptrdiff_t x = kernel_shift_offset; x < img_view.width(); ++x)
223-
img_expected_it[x] = img_it[x - 1];
224-
}
200+
fixture::row_conv1D_offset_img_generator(img_view, gil::view(img_expected),
201+
kernel_shift_offset);
225202

226203
auto const kernel_shift_by_one = fixture::create_kernel<channel_t>({0, 0, 1});
227204
gil::convolve_rows<pixel_t>(gil::const_view(img_out), kernel_shift_by_one,

test/extension/numeric/test_fixture.hpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//
22
// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
3+
// Copyright 2021 Prathamesh Tagore <[email protected]>
34
//
45
// Distributed under the Boost Software License, Version 1.0
56
// See accompanying file LICENSE_1_0.txt or copy at
@@ -27,4 +28,54 @@ auto create_kernel(std::initializer_list<T> const& values)
2728
return kernel;
2829
}
2930

31+
template <typename SrcView, typename DstView>
32+
void row_conv1D_offset_img_generator(SrcView src_view, DstView dst_view, unsigned int const offset,
33+
std::ptrdiff_t start_row = 0, std::ptrdiff_t start_col = 0, std::ptrdiff_t end_row = -1,
34+
std::ptrdiff_t end_col = -1)
35+
{
36+
BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions());
37+
static_assert(color_spaces_are_compatible
38+
<
39+
typename color_space_type<SrcView>::type,
40+
typename color_space_type<DstView>::type
41+
>::value, "Source and destination views must have pixels with the same color space");
42+
43+
if (end_row == -1)
44+
end_row = src_view.height();
45+
if (end_col == -1)
46+
end_col = src_view.width();
47+
for (std::ptrdiff_t y = start_row; y < end_row; ++y)
48+
{
49+
auto src_it = src_view.row_begin(y);
50+
auto dst_it = dst_view.row_begin(y);
51+
for (std::ptrdiff_t x = offset + start_col; x < end_col; ++x)
52+
dst_it[x] = src_it[x - offset];
53+
}
54+
}
55+
56+
template <typename SrcView, typename DstView>
57+
void col_conv1D_offset_img_generator(SrcView src_view, DstView dst_view, unsigned int const offset,
58+
std::ptrdiff_t start_row = 0, std::ptrdiff_t start_col = 0, std::ptrdiff_t end_row = -1,
59+
std::ptrdiff_t end_col = -1)
60+
{
61+
BOOST_ASSERT(src_view.dimensions() == dst_view.dimensions());
62+
static_assert(color_spaces_are_compatible
63+
<
64+
typename color_space_type<SrcView>::type,
65+
typename color_space_type<DstView>::type
66+
>::value, "Source and destination views must have pixels with the same color space");
67+
68+
if (end_row == -1)
69+
end_row = src_view.height();
70+
if (end_col == -1)
71+
end_col = src_view.width();
72+
for (std::ptrdiff_t x = start_col; x < end_col; ++x)
73+
{
74+
auto src_it = src_view.col_begin(x);
75+
auto dst_it = dst_view.col_begin(x);
76+
for (std::ptrdiff_t y = offset + start_row; y < end_row; ++y)
77+
dst_it[y] = src_it[y - offset];
78+
}
79+
}
80+
3081
}}}} // namespace boost::gil::test::fixture

0 commit comments

Comments
 (0)