diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 018d9d017..e6af779d5 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -564,6 +564,85 @@ int RawImageSource::interpolateBadPixelsBayer( PixelsMap &bitmapBads ) return counter; // Number of interpolated pixels. } +/* interpolateBadPixels3Colours: correct raw pixels looking at the bitmap + * takes into consideration if there are multiple bad pixels in the neighborhood + */ +int RawImageSource::interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours ) +{ + static const float eps=1.f; + int counter=0; +#pragma omp parallel for reduction(+:counter) schedule(dynamic,16) + for( int row = 2; row < H-2; row++ ){ + for(int col = 2; col 0.f)){ // This means, we found at least one pair of valid pixels in the steps above, likelyhood of this case is about 99.999% + for(int c=0;c 0) { + for(int c=0;cgetSensorType()==ST_BAYER ) interpolateBadPixelsBayer( bitmapBads ); - else + else if ( ri->getSensorType()==ST_FUJI_XTRANS ) interpolateBadPixelsXtrans( bitmapBads ); + else + interpolateBadPixelsNColours( bitmapBads, ri->get_colors() ); if ( ri->getSensorType()==ST_BAYER && raw.bayersensor.linenoise >0 ) { if (plistener) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index d2bbaa488..cfebfc1cb 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -218,6 +218,7 @@ class RawImageSource : public ImageSource { void processRawWhitepoint (float expos, float preser); // exposure before interpolation int interpolateBadPixelsBayer( PixelsMap &bitmapBads ); + int interpolateBadPixelsNColours( PixelsMap &bitmapBads, const int colours ); int interpolateBadPixelsXtrans( PixelsMap &bitmapBads ); int findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels );