Bugfix for AMaZE, correcting the appearance of impulsive pixels when CA_autocorrect is enabled.

This commit is contained in:
Emil Martinec
2010-11-30 06:55:19 -06:00
parent 5ba5f2679f
commit 11f4c8ee9b

View File

@@ -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)<arthresh) {guar=cfa[indx]*cru;} else {guar=guha;}
if (fabs(1-crd)<arthresh) {gdar=cfa[indx]*crd;} else {gdar=gdha;}
@@ -521,7 +522,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
if (vcdaltvar<vcdvar) vcd[indx]=vcdalt[indx];
//bound the interpolation in regions of high saturation
if (c&1) {
if (c&1) {//G site
Ginth = -hcd[indx]+cfa[indx];//R or B
Gintv = -vcd[indx]+cfa[indx];//B or R
@@ -547,7 +548,7 @@ 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];
} else {
} else {//R or B site
Ginth = hcd[indx]+cfa[indx];//interpolated G
Gintv = vcd[indx]+cfa[indx];
@@ -575,6 +576,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
//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]);