From 11f4c8ee9b97cc8e3a5648a8bddfff2bf3fda6d0 Mon Sep 17 00:00:00 2001 From: Emil Martinec Date: Tue, 30 Nov 2010 06:55:19 -0600 Subject: [PATCH] Bugfix for AMaZE, correcting the appearance of impulsive pixels when CA_autocorrect is enabled. --- rtengine/amaze_demosaic_RT.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index d7248e7fa..ec83e1fb1 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -34,6 +34,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { #define LIM(x,min,max) MAX(min,MIN(x,max)) #define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) //#define CLIP(x) LIM(x,0,65535) +#define HCLIP(x) MIN(clip_pt,x); int width=winw, height=winh; @@ -463,10 +464,10 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { crl = cfa[indx-1]*(dirwts[indx-2][1]+dirwts[indx][1])/(dirwts[indx-2][1]*(eps+cfa[indx])+dirwts[indx][1]*(eps+cfa[indx-2])); crr = cfa[indx+1]*(dirwts[indx+2][1]+dirwts[indx][1])/(dirwts[indx+2][1]*(eps+cfa[indx])+dirwts[indx][1]*(eps+cfa[indx+2])); - guha=cfa[indx-v1]+0.5*(cfa[indx]-cfa[indx-v2]); - gdha=cfa[indx+v1]+0.5*(cfa[indx]-cfa[indx+v2]); - glha=cfa[indx-1]+0.5*(cfa[indx]-cfa[indx-2]); - grha=cfa[indx+1]+0.5*(cfa[indx]-cfa[indx+2]); + guha=HCLIP(cfa[indx-v1])+0.5*(cfa[indx]-cfa[indx-v2]); + gdha=HCLIP(cfa[indx+v1])+0.5*(cfa[indx]-cfa[indx+v2]); + glha=HCLIP(cfa[indx-1])+0.5*(cfa[indx]-cfa[indx-2]); + grha=HCLIP(cfa[indx+1])+0.5*(cfa[indx]-cfa[indx+2]); if (fabs(1-cru) pre_mul[c]) hcd[indx]=-ULIM(Ginth,cfa[indx-1],cfa[indx+1])+cfa[indx];//for dcraw implementation //if (Gintv > pre_mul[c]) vcd[indx]=-ULIM(Gintv,cfa[indx-v1],cfa[indx+v1])+cfa[indx]; - } else { + } else {//R or B site Ginth = hcd[indx]+cfa[indx];//interpolated G Gintv = vcd[indx]+cfa[indx]; @@ -574,7 +575,8 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { //if (Ginth > pre_mul[c]) hcd[indx]=ULIM(Ginth,cfa[indx-1],cfa[indx+1])-cfa[indx];//for dcraw implementation //if (Gintv > pre_mul[c]) vcd[indx]=ULIM(Gintv,cfa[indx-v1],cfa[indx+v1])-cfa[indx]; } - + + vcdsq[indx] = SQR(vcd[indx]); hcdsq[indx] = SQR(hcd[indx]); cddiffsq[indx] = SQR(vcd[indx]-hcd[indx]); @@ -865,7 +867,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { for (rr=12; rr