Skip to content

Commit bd01761

Browse files
committed
First_cleaning_attempt
1 parent fe1621e commit bd01761

File tree

15 files changed

+1475
-113
lines changed

15 files changed

+1475
-113
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: CI
22

3-
on:
3+
on:
44
pull_request:
55
push:
66
branches:

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ message(STATUS "Boost.GIL: Using Boost_LIBRARY_DIRS=${Boost_LIBRARY_DIRS}")
109109

110110
target_link_libraries(gil_dependencies INTERFACE Boost::filesystem)
111111

112+
if (BOOST_GIL_ENABLE_OPENCV)
113+
find_package (OpenCV 4.0.0 REQUIRED)
114+
target_include_directories(gil_dependencies INTERFACE ${OpenCV_INCLUDE_DIRS})
115+
target_link_libraries(gil_dependencies INTERFACE ${OpenCV_LIBS})
116+
endif()
117+
112118
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
113119
target_link_libraries(gil_dependencies INTERFACE Boost::disable_autolinking)
114120
endif()

example/convolve2d.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ int main()
1919

2020
std::vector<float> v(9, 1.0f / 9.0f);
2121
detail::kernel_2d<float> kernel(v.begin(), v.size(), 1, 1);
22-
detail::convolve_2d(view(img), kernel, view(img_out1));
22+
convolve_2d<gray8_pixel_t>(view(img), kernel, view(img_out1));
2323

2424
//write_view("out-convolve2d.png", view(img_out), png_tag{});
2525
write_view("out-convolve2d.png", view(img_out1), jpeg_tag{});

example/harris.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,9 @@ int main(int argc, char* argv[])
171171
auto x_gradient = gil::view(x_gradient_image);
172172
auto y_gradient = gil::view(y_gradient_image);
173173
auto scharr_x = gil::generate_dx_scharr();
174-
gil::detail::convolve_2d(smoothed, scharr_x, x_gradient);
174+
gil::convolve_2d<gil::gray8_pixel_t>(smoothed, scharr_x, x_gradient);
175175
auto scharr_y = gil::generate_dy_scharr();
176-
gil::detail::convolve_2d(smoothed, scharr_y, y_gradient);
176+
gil::convolve_2d<gil::gray8_pixel_t>(smoothed, scharr_y, y_gradient);
177177

178178
gil::gray32f_image_t m11(x_gradient.dimensions());
179179
gil::gray32f_image_t m12_21(x_gradient.dimensions());

example/hessian.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -174,20 +174,20 @@ int main(int argc, char* argv[]) {
174174
auto x_gradient = gil::view(x_gradient_image);
175175
auto y_gradient = gil::view(y_gradient_image);
176176
auto scharr_x = gil::generate_dx_scharr();
177-
gil::detail::convolve_2d(smoothed, scharr_x, x_gradient);
177+
gil::convolve_2d<gil::gray16s_pixel_t>(smoothed, scharr_x, x_gradient);
178178
auto scharr_y = gil::generate_dy_scharr();
179-
gil::detail::convolve_2d(smoothed, scharr_y, y_gradient);
179+
gil::convolve_2d<gil::gray16s_pixel_t>(smoothed, scharr_y, y_gradient);
180180

181181
gil::gray32f_image_t m11(x_gradient.dimensions());
182182
gil::gray32f_image_t m12_21(x_gradient.dimensions());
183183
gil::gray32f_image_t m22(x_gradient.dimensions());
184-
gil::compute_hessian_entries(
185-
x_gradient,
186-
y_gradient,
187-
gil::view(m11),
188-
gil::view(m12_21),
189-
gil::view(m22)
190-
);
184+
// gil::compute_hessian_entries(
185+
// gil::view(x_gradient_image),
186+
// gil::view(y_gradient_image),
187+
// gil::view(m11),
188+
// gil::view(m12_21),
189+
// gil::view(m22)
190+
// );
191191

192192
gil::gray32f_image_t hessian_response(x_gradient.dimensions());
193193
auto gaussian_kernel = gil::generate_gaussian_kernel(window_size, 0.84089642);

example/sobel_scharr.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ int main(int argc, char* argv[])
2626
auto dy = gil::view(dy_image);
2727
if (filter_type == "sobel")
2828
{
29-
gil::detail::convolve_2d(input, gil::generate_dx_sobel(1), dx);
30-
gil::detail::convolve_2d(input, gil::generate_dy_sobel(1), dy);
29+
gil::convolve_2d<gil::gray8_pixel_t>(input, gil::generate_dx_sobel(1), dx);
30+
gil::convolve_2d<gil::gray8_pixel_t>(input, gil::generate_dy_sobel(1), dy);
3131
}
3232
else if (filter_type == "scharr")
3333
{
34-
gil::detail::convolve_2d(input, gil::generate_dx_scharr(1), dx);
35-
gil::detail::convolve_2d(input, gil::generate_dy_scharr(1), dy);
34+
gil::convolve_2d<gil::gray8_pixel_t>(input, gil::generate_dx_scharr(1), dx);
35+
gil::convolve_2d<gil::gray8_pixel_t>(input, gil::generate_dy_scharr(1), dy);
3636
}
3737
else
3838
{

include/boost/gil/extension/numeric/algorithm.hpp

Lines changed: 104 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,104 @@ auto correlate_pixels_k(
218218
return dst_begin;
219219
}
220220

221+
template
222+
<
223+
typename PixelAccum,
224+
typename SrcIterator,
225+
typename KernelIterator,
226+
typename DstIterator
227+
>
228+
inline
229+
auto correlate_pixels_n_2d(
230+
SrcIterator src_begin,
231+
std::size_t src_size,
232+
KernelIterator kernel_begin,
233+
std::size_t kernel_dimension,
234+
DstIterator dst_begin)
235+
-> DstIterator
236+
{
237+
using src_pixel_ref_t = typename pixel_proxy
238+
<
239+
typename std::iterator_traits<SrcIterator>::value_type
240+
>::type;
241+
using dst_pixel_ref_t = typename pixel_proxy
242+
<
243+
typename std::iterator_traits<DstIterator>::value_type
244+
>::type;
245+
using kernel_value_t = typename std::iterator_traits<KernelIterator>::value_type;
246+
247+
PixelAccum accum_zero;
248+
pixel_zeros_t<PixelAccum>()(accum_zero);
249+
std::ptrdiff_t index = 0;
250+
std::ptrdiff_t const kernel_size = kernel_dimension * kernel_dimension;
251+
252+
// try eliminating "index" variable.
253+
while (index < src_size - kernel_size + 1)
254+
{
255+
pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
256+
std::inner_product(
257+
src_begin + index,
258+
src_begin + kernel_size + index,
259+
kernel_begin,
260+
accum_zero,
261+
pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
262+
pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_value_t, PixelAccum>()),
263+
*dst_begin);
264+
265+
index += kernel_dimension;
266+
++dst_begin;
267+
}
268+
return dst_begin;
269+
}
270+
271+
template
272+
<
273+
std::size_t kernel_dimension,
274+
typename PixelAccum,
275+
typename SrcIterator,
276+
typename KernelIterator,
277+
typename DstIterator
278+
>
279+
inline
280+
auto correlate_pixels_k_2d(
281+
SrcIterator src_begin,
282+
std::size_t src_size,
283+
KernelIterator kernel_begin,
284+
DstIterator dst_begin)
285+
-> DstIterator
286+
{
287+
using src_pixel_ref_t = typename pixel_proxy
288+
<
289+
typename std::iterator_traits<SrcIterator>::value_type
290+
>::type;
291+
using dst_pixel_ref_t = typename pixel_proxy
292+
<
293+
typename std::iterator_traits<DstIterator>::value_type
294+
>::type;
295+
using kernel_type = typename std::iterator_traits<KernelIterator>::value_type;
296+
297+
PixelAccum accum_zero;
298+
pixel_zeros_t<PixelAccum>()(accum_zero);
299+
std::ptrdiff_t index = 0;
300+
std::ptrdiff_t const kernel_size = kernel_dimension * kernel_dimension;
301+
302+
while (index < src_size - kernel_size + 1)
303+
{
304+
pixel_assigns_t<PixelAccum, dst_pixel_ref_t>()(
305+
inner_product_k<kernel_size>(
306+
src_begin + index,
307+
kernel_begin,
308+
accum_zero,
309+
pixel_plus_t<PixelAccum, PixelAccum, PixelAccum>(),
310+
pixel_multiplies_scalar_t<src_pixel_ref_t, kernel_type, PixelAccum>()),
311+
*dst_begin);
312+
313+
index += kernel_dimension;
314+
++dst_begin;
315+
}
316+
return dst_begin;
317+
}
318+
221319
/// \brief destination is set to be product of the source and a scalar
222320
/// \tparam PixelAccum - TODO
223321
/// \tparam SrcView Models ImageViewConcept
@@ -255,11 +353,12 @@ void view_multiplies_scalar(SrcView const& src_view, Scalar const& scalar, DstVi
255353
/// \brief Boundary options for image boundary extension
256354
enum class boundary_option
257355
{
258-
output_ignore, /// do nothing to the output
259-
output_zero, /// set the output to zero
260-
extend_padded, /// assume the source boundaries to be padded already
261-
extend_zero, /// assume the source boundaries to be zero
262-
extend_constant /// assume the source boundaries to be the boundary value
356+
output_ignore, /// do nothing to the output
357+
output_zero, /// set the output to zero
358+
extend_padded, /// assume the source boundaries to be padded already
359+
extend_zero, /// assume the source boundaries to be zero
360+
extend_constant, /// assume the source boundaries to be the boundary value
361+
extend_reflection /// assumes boundary values as reflection of source row/column pixels
263362
};
264363

265364
namespace detail

0 commit comments

Comments
 (0)