]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/gil/example/convolution.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / gil / example / convolution.cpp
CommitLineData
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
14int 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}