From 814a235e9f3de14ba1e2af588d109f2d1f2396d7 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Sun, 11 Mar 2018 11:48:20 +0100 Subject: [PATCH] tweaked the behaviour of the line noise filter in PDAF mode --- rtengine/pdaflinesfilter.cc | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/rtengine/pdaflinesfilter.cc b/rtengine/pdaflinesfilter.cc index f648ad891..92fd68b41 100644 --- a/rtengine/pdaflinesfilter.cc +++ b/rtengine/pdaflinesfilter.cc @@ -130,8 +130,6 @@ private: class PDAFLineDenoiseRowFilter: public RawImageSource::CFALineDenoiseRowBlender { - static constexpr int BORDER1 = 1; - static constexpr int BORDER2 = 2; public: PDAFLineDenoiseRowFilter(const std::vector &pattern, int offset): pattern_(pattern), @@ -140,17 +138,24 @@ public: float operator()(int row) const { + static constexpr float BORDER[] = { 1.f, 1.f, 0.8f, 0.5f, 0.2f }; + static constexpr int BORDER_WIDTH = sizeof(BORDER)/sizeof(float) - 1; + if (!pattern_.empty()) { int key = (row - offset_) % pattern_.back(); auto it = std::lower_bound(pattern_.begin(), pattern_.end(), key); - int d = *it - key; - if (d <= BORDER2) { - return d <= BORDER1 ? 1.f : 0.5f; - } else if (it > pattern_.begin()) { - d = key - *(it-1); - if (d <= BORDER2) { - return d <= BORDER1 ? 1.f : 0.5f; - } + + int b = *it; + int d = b - key; + + if (it > pattern_.begin()) { + int b2 = *(it-1); + int d2 = key - b2; + float f = BORDER[std::min(std::min(d, d2), BORDER_WIDTH)]; + return f; + } else { + float f = BORDER[std::min(d, BORDER_WIDTH)]; + return f; } } return 0.f;