in IsometricPatternMatcher/DotExtractor.h [63:98]
void blur(surreal_opensource::ManagedImage<Tout>& out,
const surreal_opensource::ManagedImage<Tin>& in) {
CHECK(out.w == in.w && out.h == in.h);
surreal_opensource::ManagedImage<Tout> med(in.w, in.h);
for (int y = 0; y < in.h; y++) {
for (int x = 0; x < in.w; ++x) {
float blurSum = kernel_[0] * in(x, y);
for (int r = 1; r < this->blurKernelRadius_; ++r) {
float w = kernel_[r];
if (x - r >= 0) {
blurSum += w * in(x - r, y);
}
if (x + r < in.w) {
blurSum += w * in(x + r, y);
}
}
med(x, y) = blurSum;
}
}
for (int x = 0; x < in.w; x++) {
for (int y = 0; y < in.h; ++y) {
float blurSum = kernel_[0] * med(x, y);
for (int r = 1; r < blurKernelRadius_; ++r) {
const float w = kernel_[r];
if (y - r >= 0) {
blurSum += w * med(x, y - r);
}
if (y + r < in.h) {
blurSum += w * med(x, y + r);
}
}
out(x, y) = blurSum;
}
}
}