25 void Filter(
const uint8_t* image_data,
26 const size_t window_radius,
27 const size_t window_step,
28 const float sigma_spatial,
29 const float sigma_color);
32 std::unique_ptr<GpuMat<uint8_t>>
image;
41 const static size_t kBlockDimX = 16;
42 const static size_t kBlockDimY = 12;
50 const float sigma_color)
51 : spatial_normalization_(1.0f / (2.0f * sigma_spatial * sigma_spatial)),
52 color_normalization_(1.0f / (2.0f * sigma_color * sigma_color)) {}
54 __device__
inline float Compute(
const float row_diff,
57 const float color2)
const {
58 const float spatial_dist_squared =
59 row_diff * row_diff + col_diff * col_diff;
60 const float color_dist = color1 - color2;
61 return exp(-spatial_dist_squared * spatial_normalization_ -
62 color_dist * color_dist * color_normalization_);
66 const float spatial_normalization_;
67 const float color_normalization_;
std::unique_ptr< GpuMat< float > > sum_image
void Filter(const uint8_t *image_data, const size_t window_radius, const size_t window_step, const float sigma_spatial, const float sigma_color)
std::unique_ptr< GpuMat< uint8_t > > image
std::unique_ptr< GpuMat< float > > squared_sum_image
GpuMatRefImage(const size_t width, const size_t height)
__device__ BilateralWeightComputer(const float sigma_spatial, const float sigma_color)
__device__ float Compute(const float row_diff, const float col_diff, const float color1, const float color2) const