Bugfix for issue 783.
This commit is contained in:
@@ -107,10 +107,6 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
float (*vcdalt);
|
float (*vcdalt);
|
||||||
// alternative horizontal interpolation
|
// alternative horizontal interpolation
|
||||||
float (*hcdalt);
|
float (*hcdalt);
|
||||||
// square of vcd
|
|
||||||
float (*vcdsq);
|
|
||||||
// square of hcd
|
|
||||||
float (*hcdsq);
|
|
||||||
// square of average color difference
|
// square of average color difference
|
||||||
float (*cddiffsq);
|
float (*cddiffsq);
|
||||||
// weight to give horizontal vs vertical interpolation
|
// weight to give horizontal vs vertical interpolation
|
||||||
@@ -153,7 +149,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
|
|
||||||
|
|
||||||
// assign working space
|
// assign working space
|
||||||
buffer = (char *) malloc((34*sizeof(float)+sizeof(int))*TS*TS);
|
buffer = (char *) malloc((32*sizeof(float)+sizeof(int))*TS*TS);
|
||||||
//merror(buffer,"amaze_interpolate()");
|
//merror(buffer,"amaze_interpolate()");
|
||||||
//memset(buffer,0,(34*sizeof(float)+sizeof(int))*TS*TS);
|
//memset(buffer,0,(34*sizeof(float)+sizeof(int))*TS*TS);
|
||||||
// rgb array
|
// rgb array
|
||||||
@@ -167,28 +163,26 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
hcd = (float (*)) (buffer + 10*sizeof(float)*TS*TS);
|
hcd = (float (*)) (buffer + 10*sizeof(float)*TS*TS);
|
||||||
vcdalt = (float (*)) (buffer + 11*sizeof(float)*TS*TS);
|
vcdalt = (float (*)) (buffer + 11*sizeof(float)*TS*TS);
|
||||||
hcdalt = (float (*)) (buffer + 12*sizeof(float)*TS*TS);
|
hcdalt = (float (*)) (buffer + 12*sizeof(float)*TS*TS);
|
||||||
vcdsq = (float (*)) (buffer + 13*sizeof(float)*TS*TS);
|
cddiffsq = (float (*)) (buffer + 13*sizeof(float)*TS*TS);
|
||||||
hcdsq = (float (*)) (buffer + 14*sizeof(float)*TS*TS);
|
hvwt = (float (*)) (buffer + 14*sizeof(float)*TS*TS);
|
||||||
cddiffsq = (float (*)) (buffer + 15*sizeof(float)*TS*TS);
|
Dgrb = (float (*)[2]) (buffer + 15*sizeof(float)*TS*TS);
|
||||||
hvwt = (float (*)) (buffer + 16*sizeof(float)*TS*TS);
|
delp = (float (*)) (buffer + 17*sizeof(float)*TS*TS);
|
||||||
Dgrb = (float (*)[2]) (buffer + 17*sizeof(float)*TS*TS);
|
delm = (float (*)) (buffer + 18*sizeof(float)*TS*TS);
|
||||||
delp = (float (*)) (buffer + 19*sizeof(float)*TS*TS);
|
rbint = (float (*)) (buffer + 19*sizeof(float)*TS*TS);
|
||||||
delm = (float (*)) (buffer + 20*sizeof(float)*TS*TS);
|
Dgrbh2 = (float (*)) (buffer + 20*sizeof(float)*TS*TS);
|
||||||
rbint = (float (*)) (buffer + 21*sizeof(float)*TS*TS);
|
Dgrbv2 = (float (*)) (buffer + 21*sizeof(float)*TS*TS);
|
||||||
Dgrbh2 = (float (*)) (buffer + 22*sizeof(float)*TS*TS);
|
dgintv = (float (*)) (buffer + 22*sizeof(float)*TS*TS);
|
||||||
Dgrbv2 = (float (*)) (buffer + 23*sizeof(float)*TS*TS);
|
dginth = (float (*)) (buffer + 23*sizeof(float)*TS*TS);
|
||||||
dgintv = (float (*)) (buffer + 24*sizeof(float)*TS*TS);
|
Dgrbp1 = (float (*)) (buffer + 24*sizeof(float)*TS*TS);
|
||||||
dginth = (float (*)) (buffer + 25*sizeof(float)*TS*TS);
|
Dgrbm1 = (float (*)) (buffer + 25*sizeof(float)*TS*TS);
|
||||||
Dgrbp1 = (float (*)) (buffer + 26*sizeof(float)*TS*TS);
|
Dgrbpsq1 = (float (*)) (buffer + 26*sizeof(float)*TS*TS);
|
||||||
Dgrbm1 = (float (*)) (buffer + 27*sizeof(float)*TS*TS);
|
Dgrbmsq1 = (float (*)) (buffer + 27*sizeof(float)*TS*TS);
|
||||||
Dgrbpsq1 = (float (*)) (buffer + 28*sizeof(float)*TS*TS);
|
cfa = (float (*)) (buffer + 28*sizeof(float)*TS*TS);
|
||||||
Dgrbmsq1 = (float (*)) (buffer + 29*sizeof(float)*TS*TS);
|
pmwt = (float (*)) (buffer + 29*sizeof(float)*TS*TS);
|
||||||
cfa = (float (*)) (buffer + 30*sizeof(float)*TS*TS);
|
rbp = (float (*)) (buffer + 30*sizeof(float)*TS*TS);
|
||||||
pmwt = (float (*)) (buffer + 31*sizeof(float)*TS*TS);
|
rbm = (float (*)) (buffer + 31*sizeof(float)*TS*TS);
|
||||||
rbp = (float (*)) (buffer + 32*sizeof(float)*TS*TS);
|
|
||||||
rbm = (float (*)) (buffer + 33*sizeof(float)*TS*TS);
|
|
||||||
|
|
||||||
nyquist = (int (*)) (buffer + 34*sizeof(int)*TS*TS);
|
nyquist = (int (*)) (buffer + 32*sizeof(int)*TS*TS);
|
||||||
|
|
||||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
@@ -498,12 +492,6 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
dgintv[indx]=MIN(SQR(guha-gdha),SQR(guar-gdar));
|
dgintv[indx]=MIN(SQR(guha-gdha),SQR(guar-gdar));
|
||||||
dginth[indx]=MIN(SQR(glha-grha),SQR(glar-grar));
|
dginth[indx]=MIN(SQR(glha-grha),SQR(glar-grar));
|
||||||
|
|
||||||
//dgintv[indx]=SQR(guar-gdar);
|
|
||||||
//dginth[indx]=SQR(glar-grar);
|
|
||||||
|
|
||||||
//vcdsq[indx] = SQR(vcd[indx]);
|
|
||||||
//hcdsq[indx] = SQR(hcd[indx]);
|
|
||||||
//cddiffsq[indx] = SQR(vcd[indx]-hcd[indx]);
|
|
||||||
}
|
}
|
||||||
//t2_vcdhcd += clock() - t1_vcdhcd;
|
//t2_vcdhcd += clock() - t1_vcdhcd;
|
||||||
|
|
||||||
@@ -576,9 +564,6 @@ 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];
|
//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]);
|
cddiffsq[indx] = SQR(vcd[indx]-hcd[indx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,12 +572,15 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
|
|
||||||
//compute color difference variances in cardinal directions
|
//compute color difference variances in cardinal directions
|
||||||
|
|
||||||
|
float uave = vcd[indx]+vcd[indx-v1]+vcd[indx-v2]+vcd[indx-v3];
|
||||||
|
float dave = vcd[indx]+vcd[indx+v1]+vcd[indx+v2]+vcd[indx+v3];
|
||||||
|
float lave = (hcd[indx]+hcd[indx-1]+hcd[indx-2]+hcd[indx-3]);
|
||||||
|
float rave = (hcd[indx]+hcd[indx+1]+hcd[indx+2]+hcd[indx+3]);
|
||||||
|
|
||||||
Dgrbvvaru = 4*(vcdsq[indx]+vcdsq[indx-v1]+vcdsq[indx-v2]+vcdsq[indx-v3])-SQR(vcd[indx]+vcd[indx-v1]+vcd[indx-v2]+vcd[indx-v3]);
|
Dgrbvvaru = SQR(vcd[indx]-uave)+SQR(vcd[indx-v1]-uave)+SQR(vcd[indx-v2]-uave)+SQR(vcd[indx-v3]-uave);
|
||||||
Dgrbvvard = 4*(vcdsq[indx]+vcdsq[indx+v1]+vcdsq[indx+v2]+vcdsq[indx+v3])-SQR(vcd[indx]+vcd[indx+v1]+vcd[indx+v2]+vcd[indx+v3]);
|
Dgrbvvard = SQR(vcd[indx]-dave)+SQR(vcd[indx+v1]-dave)+SQR(vcd[indx+v2]-dave)+SQR(vcd[indx+v3]-dave);
|
||||||
Dgrbhvarl = 4*(hcdsq[indx]+hcdsq[indx-1]+hcdsq[indx-2]+hcdsq[indx-3])-SQR(hcd[indx]+hcd[indx-1]+hcd[indx-2]+hcd[indx-3]);
|
Dgrbhvarl = SQR(hcd[indx]-lave)+SQR(hcd[indx-1]-lave)+SQR(hcd[indx-2]-lave)+SQR(hcd[indx-3]-lave);
|
||||||
Dgrbhvarr = 4*(hcdsq[indx]+hcdsq[indx+1]+hcdsq[indx+2]+hcdsq[indx+3])-SQR(hcd[indx]+hcd[indx+1]+hcd[indx+2]+hcd[indx+3]);
|
Dgrbhvarr = SQR(hcd[indx]-rave)+SQR(hcd[indx+1]-rave)+SQR(hcd[indx+2]-rave)+SQR(hcd[indx+3]-rave);
|
||||||
|
|
||||||
|
|
||||||
hwt = dirwts[indx-1][1]/(dirwts[indx-1][1]+dirwts[indx+1][1]);
|
hwt = dirwts[indx-1][1]/(dirwts[indx-1][1]+dirwts[indx+1][1]);
|
||||||
vwt = dirwts[indx-v1][0]/(dirwts[indx+v1][0]+dirwts[indx-v1][0]);
|
vwt = dirwts[indx-v1][0]/(dirwts[indx+v1][0]+dirwts[indx-v1][0]);
|
||||||
@@ -600,10 +588,6 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
vcdvar = epssq+vwt*Dgrbvvard+(1.0f-vwt)*Dgrbvvaru;
|
vcdvar = epssq+vwt*Dgrbvvard+(1.0f-vwt)*Dgrbvvaru;
|
||||||
hcdvar = epssq+hwt*Dgrbhvarr+(1.0f-hwt)*Dgrbhvarl;
|
hcdvar = epssq+hwt*Dgrbhvarr+(1.0f-hwt)*Dgrbhvarl;
|
||||||
|
|
||||||
//vcdvar = 5*(vcdsq[indx]+vcdsq[indx-v1]+vcdsq[indx-v2]+vcdsq[indx+v1]+vcdsq[indx+v2])-SQR(vcd[indx]+vcd[indx-v1]+vcd[indx-v2]+vcd[indx+v1]+vcd[indx+v2]);
|
|
||||||
//hcdvar = 5*(hcdsq[indx]+hcdsq[indx-1]+hcdsq[indx-2]+hcdsq[indx+1]+hcdsq[indx+2])-SQR(hcd[indx]+hcd[indx-1]+hcd[indx-2]+hcd[indx+1]+hcd[indx+2]);
|
|
||||||
|
|
||||||
|
|
||||||
//compute fluctuations in up/down and left/right interpolations of colors
|
//compute fluctuations in up/down and left/right interpolations of colors
|
||||||
Dgrbvvaru = (dgintv[indx])+(dgintv[indx-v1])+(dgintv[indx-v2]);
|
Dgrbvvaru = (dgintv[indx])+(dgintv[indx-v1])+(dgintv[indx-v2]);
|
||||||
Dgrbvvard = (dgintv[indx])+(dgintv[indx+v1])+(dgintv[indx+v2]);
|
Dgrbvvard = (dgintv[indx])+(dgintv[indx+v1])+(dgintv[indx+v2]);
|
||||||
@@ -702,8 +686,8 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//horizontal and vertical color differences, and adaptive weight
|
//horizontal and vertical color differences, and adaptive weight
|
||||||
hcdvar=epssq+MAX(0, areawt*sumsqh-sumh*sumh);
|
hcdvar=epssq+fabs(areawt*sumsqh-sumh*sumh);
|
||||||
vcdvar=epssq+MAX(0, areawt*sumsqv-sumv*sumv);
|
vcdvar=epssq+fabs(areawt*sumsqv-sumv*sumv);
|
||||||
hvwt[indx]=hcdvar/(vcdvar+hcdvar);
|
hvwt[indx]=hcdvar/(vcdvar+hcdvar);
|
||||||
|
|
||||||
// end of area interpolation
|
// end of area interpolation
|
||||||
@@ -782,17 +766,9 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
rbvarp = epssq + (gausseven[0]*(Dgrbpsq1[indx-v1]+Dgrbpsq1[indx-1]+Dgrbpsq1[indx+1]+Dgrbpsq1[indx+v1]) + \
|
rbvarp = epssq + (gausseven[0]*(Dgrbpsq1[indx-v1]+Dgrbpsq1[indx-1]+Dgrbpsq1[indx+1]+Dgrbpsq1[indx+v1]) + \
|
||||||
gausseven[1]*(Dgrbpsq1[indx-v2-1]+Dgrbpsq1[indx-v2+1]+Dgrbpsq1[indx-2-v1]+Dgrbpsq1[indx+2-v1]+ \
|
gausseven[1]*(Dgrbpsq1[indx-v2-1]+Dgrbpsq1[indx-v2+1]+Dgrbpsq1[indx-2-v1]+Dgrbpsq1[indx+2-v1]+ \
|
||||||
Dgrbpsq1[indx-2+v1]+Dgrbpsq1[indx+2+v1]+Dgrbpsq1[indx+v2-1]+Dgrbpsq1[indx+v2+1]));
|
Dgrbpsq1[indx-2+v1]+Dgrbpsq1[indx+2+v1]+Dgrbpsq1[indx+v2-1]+Dgrbpsq1[indx+v2+1]));
|
||||||
/*rbvarp -= SQR( (gausseven[0]*(Dgrbp1[indx-v1]+Dgrbp1[indx-1]+Dgrbp1[indx+1]+Dgrbp1[indx+v1]) + \
|
|
||||||
gausseven[1]*(Dgrbp1[indx-v2-1]+Dgrbp1[indx-v2+1]+Dgrbp1[indx-2-v1]+Dgrbp1[indx+2-v1]+ \
|
|
||||||
Dgrbp1[indx-2+v1]+Dgrbp1[indx+2+v1]+Dgrbp1[indx+v2-1]+Dgrbp1[indx+v2+1])));*/
|
|
||||||
rbvarm = epssq + (gausseven[0]*(Dgrbmsq1[indx-v1]+Dgrbmsq1[indx-1]+Dgrbmsq1[indx+1]+Dgrbmsq1[indx+v1]) + \
|
rbvarm = epssq + (gausseven[0]*(Dgrbmsq1[indx-v1]+Dgrbmsq1[indx-1]+Dgrbmsq1[indx+1]+Dgrbmsq1[indx+v1]) + \
|
||||||
gausseven[1]*(Dgrbmsq1[indx-v2-1]+Dgrbmsq1[indx-v2+1]+Dgrbmsq1[indx-2-v1]+Dgrbmsq1[indx+2-v1]+ \
|
gausseven[1]*(Dgrbmsq1[indx-v2-1]+Dgrbmsq1[indx-v2+1]+Dgrbmsq1[indx-2-v1]+Dgrbmsq1[indx+2-v1]+ \
|
||||||
Dgrbmsq1[indx-2+v1]+Dgrbmsq1[indx+2+v1]+Dgrbmsq1[indx+v2-1]+Dgrbmsq1[indx+v2+1]));
|
Dgrbmsq1[indx-2+v1]+Dgrbmsq1[indx+2+v1]+Dgrbmsq1[indx+v2-1]+Dgrbmsq1[indx+v2+1]));
|
||||||
/*rbvarm -= SQR( (gausseven[0]*(Dgrbm1[indx-v1]+Dgrbm1[indx-1]+Dgrbm1[indx+1]+Dgrbm1[indx+v1]) + \
|
|
||||||
gausseven[1]*(Dgrbm1[indx-v2-1]+Dgrbm1[indx-v2+1]+Dgrbm1[indx-2-v1]+Dgrbm1[indx+2-v1]+ \
|
|
||||||
Dgrbm1[indx-2+v1]+Dgrbm1[indx+2+v1]+Dgrbm1[indx+v2-1]+Dgrbm1[indx+v2+1])));*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user