]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | // |
2 | // Copyright 2005-2007 Adobe Systems Incorporated | |
3 | // | |
4 | // Distributed under the Boost Software License, Version 1.0 | |
5 | // See accompanying file LICENSE_1_0.txt or copy at | |
6 | // http://www.boost.org/LICENSE_1_0.txt | |
7 | #include <boost/gil.hpp> | |
8 | #include <boost/gil/extension/io/jpeg.hpp> | |
7c673cae FG |
9 | #include <boost/gil/extension/numeric/kernel.hpp> |
10 | #include <boost/gil/extension/numeric/convolve.hpp> | |
11 | ||
92f5a8d4 TL |
12 | // Example for convolve_rows() and convolve_cols() in the numeric extension |
13 | ||
7c673cae FG |
14 | int main() { |
15 | using namespace boost::gil; | |
16 | ||
17 | rgb8_image_t img; | |
92f5a8d4 | 18 | read_image("test.jpg", img, jpeg_tag{}); |
7c673cae FG |
19 | |
20 | // Convolve the rows and the columns of the image with a fixed kernel | |
21 | rgb8_image_t convolved(img); | |
22 | ||
23 | // radius-1 Gaussian kernel, size 9 | |
24 | float gaussian_1[]={0.00022923296f,0.0059770769f,0.060597949f,0.24173197f,0.38292751f, | |
25 | 0.24173197f,0.060597949f,0.0059770769f,0.00022923296f}; | |
26 | /* | |
27 | // radius-2 Gaussian kernel, size 15 | |
28 | float gaussian_2[]={ | |
29 | 0.00048869418f,0.0024031631f,0.0092463447f, | |
30 | 0.027839607f,0.065602221f,0.12099898f,0.17469721f, | |
31 | 0.19744757f, | |
32 | 0.17469721f,0.12099898f,0.065602221f,0.027839607f, | |
33 | 0.0092463447f,0.0024031631f,0.00048869418f | |
34 | }; | |
35 | //radius-3 Gaussian kernel, size 23 | |
36 | float gaussian_3[]={ | |
37 | 0.00016944126f,0.00053842377f,0.0015324751f,0.0039068931f, | |
38 | 0.0089216027f,0.018248675f,0.033434924f,0.054872241f, | |
39 | 0.080666073f,0.10622258f,0.12529446f, | |
40 | 0.13238440f, | |
41 | 0.12529446f,0.10622258f,0.080666073f, | |
42 | 0.054872241f,0.033434924f,0.018248675f,0.0089216027f, | |
43 | 0.0039068931f,0.0015324751f,0.00053842377f,0.00016944126f | |
44 | }; | |
45 | //radius-4 Gaussian kernel, size 29 | |
46 | float gaussian_4[]={ | |
47 | 0.00022466264f,0.00052009715f,0.0011314391f,0.0023129794f, | |
48 | 0.0044433107f,0.0080211498f,0.013606987f,0.021691186f, | |
49 | 0.032493830f,0.045742013f,0.060509924f,0.075220309f, | |
50 | 0.087870099f,0.096459411f,0.099505201f,0.096459411f,0.087870099f, | |
51 | 0.075220309f,0.060509924f,0.045742013f,0.032493830f, | |
52 | 0.021691186f,0.013606987f,0.0080211498f,0.0044433107f, | |
53 | 0.0023129794f,0.0011314391f,0.00052009715f,0.00022466264f, | |
54 | }; | |
55 | */ | |
56 | ||
57 | kernel_1d_fixed<float,9> kernel(gaussian_1,4); | |
7c673cae FG |
58 | convolve_rows_fixed<rgb32f_pixel_t>(const_view(convolved),kernel,view(convolved)); |
59 | convolve_cols_fixed<rgb32f_pixel_t>(const_view(convolved),kernel,view(convolved)); | |
92f5a8d4 | 60 | write_view("out-convolution.jpg", view(convolved), jpeg_tag{}); |
7c673cae FG |
61 | |
62 | // This is how to use a resizable kernel | |
63 | kernel_1d<float> kernel2(gaussian_1,9,4); | |
64 | convolve_rows<rgb32f_pixel_t>(const_view(img),kernel2,view(img)); | |
65 | convolve_cols<rgb32f_pixel_t>(const_view(img),kernel2,view(img)); | |
92f5a8d4 | 66 | write_view("out-convolution2.jpg", view(img), jpeg_tag{}); |
7c673cae FG |
67 | |
68 | return 0; | |
69 | } |