9 #include <aliceVision/image/Image.hpp>
16 GaussianPyramidNoMask(
const size_t width_base,
const size_t height_base,
const size_t limit_scales = 64);
22 const size_t getScalesCount()
const {
return _scales; }
24 const std::vector<image::Image<image::RGBfColor>>& getPyramidColor()
const {
return _pyramid_color; }
26 std::vector<image::Image<image::RGBfColor>>& getPyramidColor() {
return _pyramid_color; }
29 std::vector<image::Image<image::RGBfColor>> _pyramid_color;
30 std::vector<image::Image<image::RGBfColor>> _filter_buffer;
39 const Eigen::Matrix<float, 5, 1>& kernel,
44 for (
int j = 0; j < input_row.cols(); j++)
49 for (
int k = 0; k < kernel.size(); k++)
52 int col = j + k - radius;
63 if (col >= input_row.cols())
65 col = input_row.cols() - 1 - (col + 1 - input_row.cols());
72 col = input_row.cols() + col;
75 if (col >= input_row.cols())
77 col = col - input_row.cols();
81 sum += w * input_row(col);
85 output_row(j) = sum / sumw;
90 inline void convolveColumns(
typename image::Image<T>::RowXpr output_row,
const image::Image<T>& input_rows,
const Eigen::Matrix<float, 5, 1>& kernel)
92 for (
int j = 0; j < output_row.cols(); j++)
97 for (
int k = 0; k < kernel.size(); k++)
100 sum += w * input_rows(k, j);
104 output_row(j) = sum / sumw;
111 if (output.size() != input.size())
116 Eigen::Matrix<float, 5, 1> kernel;
122 kernel = kernel / kernel.sum();
128 convolveRow<T>(buf.row(0), input.row(2), kernel, loop);
129 convolveRow<T>(buf.row(1), input.row(1), kernel, loop);
130 convolveRow<T>(buf.row(2), input.row(0), kernel, loop);
131 convolveRow<T>(buf.row(3), input.row(1), kernel, loop);
132 convolveRow<T>(buf.row(4), input.row(2), kernel, loop);
134 for (
int i = 0; i < output.
height() - 3; i++)
136 convolveColumns<T>(output.row(i), buf, kernel);
138 buf.row(0) = buf.row(1);
139 buf.row(1) = buf.row(2);
140 buf.row(2) = buf.row(3);
141 buf.row(3) = buf.row(4);
142 convolveRow<T>(buf.row(4), input.row(i + 3), kernel, loop);
150 convolveColumns<T>(output.row(output.
height() - 3), buf, kernel);
152 buf.row(0) = buf.row(1);
153 buf.row(1) = buf.row(2);
154 buf.row(2) = buf.row(3);
155 buf.row(3) = buf.row(4);
156 convolveRow<T>(buf.row(4), input.row(output.
height() - 2), kernel, loop);
157 convolveColumns<T>(output.row(output.
height() - 2), buf, kernel);
159 buf.row(0) = buf.row(1);
160 buf.row(1) = buf.row(2);
161 buf.row(2) = buf.row(3);
162 buf.row(3) = buf.row(4);
163 convolveRow<T>(buf.row(4), input.row(output.
height() - 3), kernel, loop);
164 convolveColumns<T>(output.row(output.
height() - 1), buf, kernel);