Code cleanup: removal of unnessesary backslashes, committed on behalf of lebedev.ri, issue 1162
This commit is contained in:
parent
fb34b38929
commit
02e6d9e9a5
@ -365,20 +365,20 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) {
|
|||||||
for (cc=4+(FC(rr,2)&1), indx=rr*TS+cc, c = FC(rr,cc); cc < cc1-4; cc+=2, indx+=2) {
|
for (cc=4+(FC(rr,2)&1), indx=rr*TS+cc, c = FC(rr,cc); cc < cc1-4; cc+=2, indx+=2) {
|
||||||
|
|
||||||
|
|
||||||
rbhpfv[indx] = fabs(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])) + \
|
rbhpfv[indx] = fabs(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])) +
|
||||||
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx][1]-rgb[indx][c])) - \
|
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx][1]-rgb[indx][c])) -
|
||||||
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])));
|
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])));
|
||||||
rbhpfh[indx] = fabs(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+4][1]-rgb[indx+4][c])) + \
|
rbhpfh[indx] = fabs(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+4][1]-rgb[indx+4][c])) +
|
||||||
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx][1]-rgb[indx][c])) - \
|
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx][1]-rgb[indx][c])) -
|
||||||
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx+4][1]-rgb[indx+4][c])));
|
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx+4][1]-rgb[indx+4][c])));
|
||||||
|
|
||||||
/*ghpfv = fabs(fabs(rgb[indx][1]-rgb[indx+v4][1])+fabs(rgb[indx][1]-rgb[indx-v4][1]) - \
|
/*ghpfv = fabs(fabs(rgb[indx][1]-rgb[indx+v4][1])+fabs(rgb[indx][1]-rgb[indx-v4][1]) -
|
||||||
fabs(rgb[indx+v4][1]-rgb[indx-v4][1]));
|
fabs(rgb[indx+v4][1]-rgb[indx-v4][1]));
|
||||||
ghpfh = fabs(fabs(rgb[indx][1]-rgb[indx+4][1])+fabs(rgb[indx][1]-rgb[indx-4][1]) - \
|
ghpfh = fabs(fabs(rgb[indx][1]-rgb[indx+4][1])+fabs(rgb[indx][1]-rgb[indx-4][1]) -
|
||||||
fabs(rgb[indx+4][1]-rgb[indx-4][1]));
|
fabs(rgb[indx+4][1]-rgb[indx-4][1]));
|
||||||
rbhpfv[indx] = fabs(ghpfv - fabs(fabs(rgb[indx][c]-rgb[indx+v4][c])+fabs(rgb[indx][c]-rgb[indx-v4][c]) - \
|
rbhpfv[indx] = fabs(ghpfv - fabs(fabs(rgb[indx][c]-rgb[indx+v4][c])+fabs(rgb[indx][c]-rgb[indx-v4][c]) -
|
||||||
fabs(rgb[indx+v4][c]-rgb[indx-v4][c])));
|
fabs(rgb[indx+v4][c]-rgb[indx-v4][c])));
|
||||||
rbhpfh[indx] = fabs(ghpfh - fabs(fabs(rgb[indx][c]-rgb[indx+4][c])+fabs(rgb[indx][c]-rgb[indx-4][c]) - \
|
rbhpfh[indx] = fabs(ghpfh - fabs(fabs(rgb[indx][c]-rgb[indx+4][c])+fabs(rgb[indx][c]-rgb[indx-4][c]) -
|
||||||
fabs(rgb[indx+4][c]-rgb[indx-4][c])));*/
|
fabs(rgb[indx+4][c]-rgb[indx-4][c])));*/
|
||||||
|
|
||||||
glpfv = 0.25*(2*rgb[indx][1]+rgb[indx+v2][1]+rgb[indx-v2][1]);
|
glpfv = 0.25*(2*rgb[indx][1]+rgb[indx+v2][1]+rgb[indx-v2][1]);
|
||||||
@ -435,11 +435,11 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) {
|
|||||||
for (cc=4+(FC(rr,2)&1), indx=rr*TS+cc, c = FC(rr,cc); cc < cc1-4; cc+=2, indx+=2) {
|
for (cc=4+(FC(rr,2)&1), indx=rr*TS+cc, c = FC(rr,cc); cc < cc1-4; cc+=2, indx+=2) {
|
||||||
|
|
||||||
|
|
||||||
rbhpfv[indx] = SQR(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])) + \
|
rbhpfv[indx] = SQR(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])) +
|
||||||
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx][1]-rgb[indx][c])) - \
|
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx][1]-rgb[indx][c])) -
|
||||||
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])));
|
fabs((rgb[indx-v4][1]-rgb[indx-v4][c])-(rgb[indx+v4][1]-rgb[indx+v4][c])));
|
||||||
rbhpfh[indx] = SQR(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+4][1]-rgb[indx+4][c])) + \
|
rbhpfh[indx] = SQR(fabs((rgb[indx][1]-rgb[indx][c])-(rgb[indx+4][1]-rgb[indx+4][c])) +
|
||||||
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx][1]-rgb[indx][c])) - \
|
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx][1]-rgb[indx][c])) -
|
||||||
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx+4][1]-rgb[indx+4][c])));
|
fabs((rgb[indx-4][1]-rgb[indx-4][c])-(rgb[indx+4][1]-rgb[indx+4][c])));
|
||||||
|
|
||||||
|
|
||||||
@ -883,7 +883,7 @@ void RawImageSource::CA_correct_RT(double cared, double cablue) {
|
|||||||
p[2]=1/(eps+fabs(rgb[indx][1]-gshift[(rr-2*GRBdir[0][c])*TS+cc]));
|
p[2]=1/(eps+fabs(rgb[indx][1]-gshift[(rr-2*GRBdir[0][c])*TS+cc]));
|
||||||
p[3]=1/(eps+fabs(rgb[indx][1]-gshift[(rr-2*GRBdir[0][c])*TS+cc-2*GRBdir[1][c]]));
|
p[3]=1/(eps+fabs(rgb[indx][1]-gshift[(rr-2*GRBdir[0][c])*TS+cc-2*GRBdir[1][c]]));
|
||||||
|
|
||||||
grbdiffint = (p[0]*grbdiff[indx]+p[1]*grbdiff[indx-2*GRBdir[1][c]]+ \
|
grbdiffint = (p[0]*grbdiff[indx]+p[1]*grbdiff[indx-2*GRBdir[1][c]]+
|
||||||
p[2]*grbdiff[(rr-2*GRBdir[0][c])*TS+cc]+p[3]*grbdiff[(rr-2*GRBdir[0][c])*TS+cc-2*GRBdir[1][c]])/(p[0]+p[1]+p[2]+p[3]);
|
p[2]*grbdiff[(rr-2*GRBdir[0][c])*TS+cc]+p[3]*grbdiff[(rr-2*GRBdir[0][c])*TS+cc-2*GRBdir[1][c]])/(p[0]+p[1]+p[2]+p[3]);
|
||||||
|
|
||||||
//now determine R/B at grid points using interpolated color differences and interpolated G value at grid point
|
//now determine R/B at grid points using interpolated color differences and interpolated G value at grid point
|
||||||
|
@ -70,7 +70,7 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
//gaussian on 5x5 quincunx, sigma=1.2
|
//gaussian on 5x5 quincunx, sigma=1.2
|
||||||
static const float gaussodd[4] = {0.14659727707323927f, 0.103592713382435f, 0.0732036125103057f, 0.0365543548389495f};
|
static const float gaussodd[4] = {0.14659727707323927f, 0.103592713382435f, 0.0732036125103057f, 0.0365543548389495f};
|
||||||
//gaussian on 5x5, sigma=1.2
|
//gaussian on 5x5, sigma=1.2
|
||||||
static const float gaussgrad[6] = {0.07384411893421103f, 0.06207511968171489f, 0.0521818194747806f, \
|
static const float gaussgrad[6] = {0.07384411893421103f, 0.06207511968171489f, 0.0521818194747806f,
|
||||||
0.03687419286733595f, 0.03099732204057846f, 0.018413194161458882f};
|
0.03687419286733595f, 0.03099732204057846f, 0.018413194161458882f};
|
||||||
//gaussian on 3x3, sigma =0.7
|
//gaussian on 3x3, sigma =0.7
|
||||||
static const float gauss1[3] = {0.3376688223162362f, 0.12171198028231786f, 0.04387081413862306f};
|
static const float gauss1[3] = {0.3376688223162362f, 0.12171198028231786f, 0.04387081413862306f};
|
||||||
@ -617,26 +617,26 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
for (cc=6+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-6; cc+=2,indx+=2) {
|
for (cc=6+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-6; cc+=2,indx+=2) {
|
||||||
|
|
||||||
//nyquist texture test: ask if difference of vcd compared to hcd is larger or smaller than RGGB gradients
|
//nyquist texture test: ask if difference of vcd compared to hcd is larger or smaller than RGGB gradients
|
||||||
nyqtest = (gaussodd[0]*cddiffsq[indx]+ \
|
nyqtest = (gaussodd[0]*cddiffsq[indx]+
|
||||||
gaussodd[1]*(cddiffsq[indx-m1]+cddiffsq[indx+p1]+ \
|
gaussodd[1]*(cddiffsq[indx-m1]+cddiffsq[indx+p1]+
|
||||||
cddiffsq[indx-p1]+cddiffsq[indx+m1])+ \
|
cddiffsq[indx-p1]+cddiffsq[indx+m1])+
|
||||||
gaussodd[2]*(cddiffsq[indx-v2]+cddiffsq[indx-2]+ \
|
gaussodd[2]*(cddiffsq[indx-v2]+cddiffsq[indx-2]+
|
||||||
cddiffsq[indx+2]+cddiffsq[indx+v2])+ \
|
cddiffsq[indx+2]+cddiffsq[indx+v2])+
|
||||||
gaussodd[3]*(cddiffsq[indx-m2]+cddiffsq[indx+p2]+ \
|
gaussodd[3]*(cddiffsq[indx-m2]+cddiffsq[indx+p2]+
|
||||||
cddiffsq[indx-p2]+cddiffsq[indx+m2]));
|
cddiffsq[indx-p2]+cddiffsq[indx+m2]));
|
||||||
|
|
||||||
nyqtest -= nyqthresh*(gaussgrad[0]*(delhsq[indx]+delvsq[indx])+ \
|
nyqtest -= nyqthresh*(gaussgrad[0]*(delhsq[indx]+delvsq[indx])+
|
||||||
gaussgrad[1]*(delhsq[indx-v1]+delvsq[indx-v1]+delhsq[indx+1]+delvsq[indx+1]+ \
|
gaussgrad[1]*(delhsq[indx-v1]+delvsq[indx-v1]+delhsq[indx+1]+delvsq[indx+1]+
|
||||||
delhsq[indx-1]+delvsq[indx-1]+delhsq[indx+v1]+delvsq[indx+v1])+ \
|
delhsq[indx-1]+delvsq[indx-1]+delhsq[indx+v1]+delvsq[indx+v1])+
|
||||||
gaussgrad[2]*(delhsq[indx-m1]+delvsq[indx-m1]+delhsq[indx+p1]+delvsq[indx+p1]+ \
|
gaussgrad[2]*(delhsq[indx-m1]+delvsq[indx-m1]+delhsq[indx+p1]+delvsq[indx+p1]+
|
||||||
delhsq[indx-p1]+delvsq[indx-p1]+delhsq[indx+m1]+delvsq[indx+m1])+ \
|
delhsq[indx-p1]+delvsq[indx-p1]+delhsq[indx+m1]+delvsq[indx+m1])+
|
||||||
gaussgrad[3]*(delhsq[indx-v2]+delvsq[indx-v2]+delhsq[indx-2]+delvsq[indx-2]+ \
|
gaussgrad[3]*(delhsq[indx-v2]+delvsq[indx-v2]+delhsq[indx-2]+delvsq[indx-2]+
|
||||||
delhsq[indx+2]+delvsq[indx+2]+delhsq[indx+v2]+delvsq[indx+v2])+ \
|
delhsq[indx+2]+delvsq[indx+2]+delhsq[indx+v2]+delvsq[indx+v2])+
|
||||||
gaussgrad[4]*(delhsq[indx-2*TS-1]+delvsq[indx-2*TS-1]+delhsq[indx-2*TS+1]+delvsq[indx-2*TS+1]+ \
|
gaussgrad[4]*(delhsq[indx-2*TS-1]+delvsq[indx-2*TS-1]+delhsq[indx-2*TS+1]+delvsq[indx-2*TS+1]+
|
||||||
delhsq[indx-TS-2]+delvsq[indx-TS-2]+delhsq[indx-TS+2]+delvsq[indx-TS+2]+ \
|
delhsq[indx-TS-2]+delvsq[indx-TS-2]+delhsq[indx-TS+2]+delvsq[indx-TS+2]+
|
||||||
delhsq[indx+TS-2]+delvsq[indx+TS-2]+delhsq[indx+TS+2]+delvsq[indx-TS+2]+ \
|
delhsq[indx+TS-2]+delvsq[indx+TS-2]+delhsq[indx+TS+2]+delvsq[indx-TS+2]+
|
||||||
delhsq[indx+2*TS-1]+delvsq[indx+2*TS-1]+delhsq[indx+2*TS+1]+delvsq[indx+2*TS+1])+ \
|
delhsq[indx+2*TS-1]+delvsq[indx+2*TS-1]+delhsq[indx+2*TS+1]+delvsq[indx+2*TS+1])+
|
||||||
gaussgrad[5]*(delhsq[indx-m2]+delvsq[indx-m2]+delhsq[indx+p2]+delvsq[indx+p2]+ \
|
gaussgrad[5]*(delhsq[indx-m2]+delvsq[indx-m2]+delhsq[indx+p2]+delvsq[indx+p2]+
|
||||||
delhsq[indx-p2]+delvsq[indx-p2]+delhsq[indx+m2]+delvsq[indx+m2]));
|
delhsq[indx-p2]+delvsq[indx-p2]+delhsq[indx+m2]+delvsq[indx+m2]));
|
||||||
|
|
||||||
|
|
||||||
@ -646,8 +646,8 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
for (rr=8; rr<rr1-8; rr++)
|
for (rr=8; rr<rr1-8; rr++)
|
||||||
for (cc=8+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-8; cc+=2,indx+=2) {
|
for (cc=8+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-8; cc+=2,indx+=2) {
|
||||||
|
|
||||||
areawt=(nyquist[indx-v2]+nyquist[indx-m1]+nyquist[indx+p1]+ \
|
areawt=(nyquist[indx-v2]+nyquist[indx-m1]+nyquist[indx+p1]+
|
||||||
nyquist[indx-2]+nyquist[indx]+nyquist[indx+2]+ \
|
nyquist[indx-2]+nyquist[indx]+nyquist[indx+2]+
|
||||||
nyquist[indx-p1]+nyquist[indx+m1]+nyquist[indx+v2]);
|
nyquist[indx-p1]+nyquist[indx+m1]+nyquist[indx+v2]);
|
||||||
//if most of your neighbors are named Nyquist, it's likely that you're one too
|
//if most of your neighbors are named Nyquist, it's likely that you're one too
|
||||||
if (areawt>4) nyquist[indx]=1;
|
if (areawt>4) nyquist[indx]=1;
|
||||||
@ -738,13 +738,13 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
|
|
||||||
if (nyquist[indx]) {
|
if (nyquist[indx]) {
|
||||||
//local averages (over Nyquist pixels only) of G curvature squared
|
//local averages (over Nyquist pixels only) of G curvature squared
|
||||||
gvarh = epssq + (gquinc[0]*Dgrbh2[indx]+ \
|
gvarh = epssq + (gquinc[0]*Dgrbh2[indx]+
|
||||||
gquinc[1]*(Dgrbh2[indx-m1]+Dgrbh2[indx+p1]+Dgrbh2[indx-p1]+Dgrbh2[indx+m1])+ \
|
gquinc[1]*(Dgrbh2[indx-m1]+Dgrbh2[indx+p1]+Dgrbh2[indx-p1]+Dgrbh2[indx+m1])+
|
||||||
gquinc[2]*(Dgrbh2[indx-v2]+Dgrbh2[indx-2]+Dgrbh2[indx+2]+Dgrbh2[indx+v2])+ \
|
gquinc[2]*(Dgrbh2[indx-v2]+Dgrbh2[indx-2]+Dgrbh2[indx+2]+Dgrbh2[indx+v2])+
|
||||||
gquinc[3]*(Dgrbh2[indx-m2]+Dgrbh2[indx+p2]+Dgrbh2[indx-p2]+Dgrbh2[indx+m2]));
|
gquinc[3]*(Dgrbh2[indx-m2]+Dgrbh2[indx+p2]+Dgrbh2[indx-p2]+Dgrbh2[indx+m2]));
|
||||||
gvarv = epssq + (gquinc[0]*Dgrbv2[indx]+ \
|
gvarv = epssq + (gquinc[0]*Dgrbv2[indx]+
|
||||||
gquinc[1]*(Dgrbv2[indx-m1]+Dgrbv2[indx+p1]+Dgrbv2[indx-p1]+Dgrbv2[indx+m1])+ \
|
gquinc[1]*(Dgrbv2[indx-m1]+Dgrbv2[indx+p1]+Dgrbv2[indx-p1]+Dgrbv2[indx+m1])+
|
||||||
gquinc[2]*(Dgrbv2[indx-v2]+Dgrbv2[indx-2]+Dgrbv2[indx+2]+Dgrbv2[indx+v2])+ \
|
gquinc[2]*(Dgrbv2[indx-v2]+Dgrbv2[indx-2]+Dgrbv2[indx+2]+Dgrbv2[indx+v2])+
|
||||||
gquinc[3]*(Dgrbv2[indx-m2]+Dgrbv2[indx+p2]+Dgrbv2[indx-p2]+Dgrbv2[indx+m2]));
|
gquinc[3]*(Dgrbv2[indx-m2]+Dgrbv2[indx+p2]+Dgrbv2[indx-p2]+Dgrbv2[indx+m2]));
|
||||||
//use the results as weights for refined G interpolation
|
//use the results as weights for refined G interpolation
|
||||||
Dgrb[indx][0] = (hcd[indx]*gvarv + vcd[indx]*gvarh)/(gvarv+gvarh);
|
Dgrb[indx][0] = (hcd[indx]*gvarv + vcd[indx]*gvarh)/(gvarv+gvarh);
|
||||||
@ -763,11 +763,11 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
for (cc=8+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-8; cc+=2,indx+=2) {
|
for (cc=8+(FC(rr,2)&1),indx=rr*TS+cc; cc<cc1-8; cc+=2,indx+=2) {
|
||||||
|
|
||||||
|
|
||||||
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]));
|
||||||
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]));
|
||||||
|
|
||||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -928,16 +928,16 @@ void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) {
|
|||||||
|
|
||||||
//Dgrb[indx][c]=(wtnw*Dgrb[indx-m1][c]+wtne*Dgrb[indx+p1][c]+wtsw*Dgrb[indx-p1][c]+wtse*Dgrb[indx+m1][c])/(wtnw+wtne+wtsw+wtse);
|
//Dgrb[indx][c]=(wtnw*Dgrb[indx-m1][c]+wtne*Dgrb[indx+p1][c]+wtsw*Dgrb[indx-p1][c]+wtse*Dgrb[indx+m1][c])/(wtnw+wtne+wtsw+wtse);
|
||||||
|
|
||||||
Dgrb[indx][c]=(wtnw*(1.325*Dgrb[indx-m1][c]-0.175*Dgrb[indx-m3][c]-0.075*Dgrb[indx-m1-2][c]-0.075*Dgrb[indx-m1-v2][c] )+ \
|
Dgrb[indx][c]=(wtnw*(1.325*Dgrb[indx-m1][c]-0.175*Dgrb[indx-m3][c]-0.075*Dgrb[indx-m1-2][c]-0.075*Dgrb[indx-m1-v2][c] )+
|
||||||
wtne*(1.325*Dgrb[indx+p1][c]-0.175*Dgrb[indx+p3][c]-0.075*Dgrb[indx+p1+2][c]-0.075*Dgrb[indx+p1+v2][c] )+ \
|
wtne*(1.325*Dgrb[indx+p1][c]-0.175*Dgrb[indx+p3][c]-0.075*Dgrb[indx+p1+2][c]-0.075*Dgrb[indx+p1+v2][c] )+
|
||||||
wtsw*(1.325*Dgrb[indx-p1][c]-0.175*Dgrb[indx-p3][c]-0.075*Dgrb[indx-p1-2][c]-0.075*Dgrb[indx-p1-v2][c] )+ \
|
wtsw*(1.325*Dgrb[indx-p1][c]-0.175*Dgrb[indx-p3][c]-0.075*Dgrb[indx-p1-2][c]-0.075*Dgrb[indx-p1-v2][c] )+
|
||||||
wtse*(1.325*Dgrb[indx+m1][c]-0.175*Dgrb[indx+m3][c]-0.075*Dgrb[indx+m1+2][c]-0.075*Dgrb[indx+m1+v2][c] ))/(wtnw+wtne+wtsw+wtse);
|
wtse*(1.325*Dgrb[indx+m1][c]-0.175*Dgrb[indx+m3][c]-0.075*Dgrb[indx+m1+2][c]-0.075*Dgrb[indx+m1+v2][c] ))/(wtnw+wtne+wtsw+wtse);
|
||||||
}
|
}
|
||||||
for (rr=12; rr<rr1-12; rr++)
|
for (rr=12; rr<rr1-12; rr++)
|
||||||
for (cc=12+(FC(rr,1)&1),indx=rr*TS+cc,c=FC(rr,cc+1)/2; cc<cc1-12; cc+=2,indx+=2)
|
for (cc=12+(FC(rr,1)&1),indx=rr*TS+cc,c=FC(rr,cc+1)/2; cc<cc1-12; cc+=2,indx+=2)
|
||||||
for(c=0;c<2;c++){
|
for(c=0;c<2;c++){
|
||||||
|
|
||||||
Dgrb[indx][c]=((hvwt[indx-v1])*Dgrb[indx-v1][c]+(1.0f-hvwt[indx+1])*Dgrb[indx+1][c]+(1.0f-hvwt[indx-1])*Dgrb[indx-1][c]+(hvwt[indx+v1])*Dgrb[indx+v1][c])/ \
|
Dgrb[indx][c]=((hvwt[indx-v1])*Dgrb[indx-v1][c]+(1.0f-hvwt[indx+1])*Dgrb[indx+1][c]+(1.0f-hvwt[indx-1])*Dgrb[indx-1][c]+(hvwt[indx+v1])*Dgrb[indx+v1][c])/
|
||||||
((hvwt[indx-v1])+(1.0f-hvwt[indx+1])+(1.0f-hvwt[indx-1])+(hvwt[indx+v1]));
|
((hvwt[indx-v1])+(1.0f-hvwt[indx+1])+(1.0f-hvwt[indx-1])+(hvwt[indx+v1]));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,8 @@ namespace rtengine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
void CurveFactory::complexsgnCurve (double saturation, bool satlimit, double satlimthresh, \
|
void CurveFactory::complexsgnCurve (double saturation, bool satlimit, double satlimthresh,
|
||||||
const std::vector<double>& acurvePoints, const std::vector<double>& bcurvePoints, \
|
const std::vector<double>& acurvePoints, const std::vector<double>& bcurvePoints,
|
||||||
LUTf & aoutCurve, LUTf & boutCurve, LUTf & satCurve, int skip) {
|
LUTf & aoutCurve, LUTf & boutCurve, LUTf & satCurve, int skip) {
|
||||||
|
|
||||||
//colormult = chroma_scale for Lab manipulations
|
//colormult = chroma_scale for Lab manipulations
|
||||||
@ -239,16 +239,16 @@ namespace rtengine {
|
|||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double hlcomprthresh, \
|
void CurveFactory::complexCurve (double ecomp, double black, double hlcompr, double hlcomprthresh,
|
||||||
double shcompr, double br, double contr, double gamma_, bool igamma_, \
|
double shcompr, double br, double contr, double gamma_, bool igamma_,
|
||||||
const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped, \
|
const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped,
|
||||||
LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, \
|
LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve,
|
||||||
LUTu & outBeforeCCurveHistogram, int skip) {
|
LUTu & outBeforeCCurveHistogram, int skip) {
|
||||||
|
|
||||||
|
|
||||||
//double def_mul = pow (2.0, defmul);
|
//double def_mul = pow (2.0, defmul);
|
||||||
|
|
||||||
/*printf ("def_mul= %f ecomp= %f black= %f hlcompr= %f shcompr= %f br= %f contr= %f defmul= %f \
|
/*printf ("def_mul= %f ecomp= %f black= %f hlcompr= %f shcompr= %f br= %f contr= %f defmul= %f
|
||||||
gamma= %f, skip= %d \n",def_mul,ecomp,black,hlcompr,shcompr,br,contr,defmul,gamma_,skip);*/
|
gamma= %f, skip= %d \n",def_mul,ecomp,black,hlcompr,shcompr,br,contr,defmul,gamma_,skip);*/
|
||||||
|
|
||||||
// compute parameters of the gamma curve
|
// compute parameters of the gamma curve
|
||||||
@ -469,8 +469,8 @@ namespace rtengine {
|
|||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void CurveFactory::complexLCurve (double br, double contr, const std::vector<double>& curvePoints, \
|
void CurveFactory::complexLCurve (double br, double contr, const std::vector<double>& curvePoints,
|
||||||
LUTu & histogram, LUTu & histogramCropped, LUTf & outCurve, \
|
LUTu & histogram, LUTu & histogramCropped, LUTf & outCurve,
|
||||||
LUTu & outBeforeCCurveHistogram, int skip) {
|
LUTu & outBeforeCCurveHistogram, int skip) {
|
||||||
|
|
||||||
// curve without contrast
|
// curve without contrast
|
||||||
|
@ -193,12 +193,12 @@ class CurveFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void complexCurve (double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double contr, \
|
static void complexCurve (double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double contr,
|
||||||
double gamma_, bool igamma_, const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped, \
|
double gamma_, bool igamma_, const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped,
|
||||||
LUTf & hlCurve, LUTf & shCurve,LUTf & outCurve, LUTu & outBeforeCCurveHistogram, int skip=1);
|
LUTf & hlCurve, LUTf & shCurve,LUTf & outCurve, LUTu & outBeforeCCurveHistogram, int skip=1);
|
||||||
static void complexsgnCurve (double saturation, bool satlimit, double satlimthresh, const std::vector<double>& acurvePoints, \
|
static void complexsgnCurve (double saturation, bool satlimit, double satlimthresh, const std::vector<double>& acurvePoints,
|
||||||
const std::vector<double>& bcurvePoints, LUTf & aoutCurve, LUTf & boutCurve, LUTf & satCurve, int skip=1);
|
const std::vector<double>& bcurvePoints, LUTf & aoutCurve, LUTf & boutCurve, LUTf & satCurve, int skip=1);
|
||||||
static void complexLCurve (double br, double contr, const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped, \
|
static void complexLCurve (double br, double contr, const std::vector<double>& curvePoints, LUTu & histogram, LUTu & histogramCropped,
|
||||||
LUTf & outCurve, LUTu & outBeforeCCurveHistogram, int skip);
|
LUTf & outCurve, LUTu & outBeforeCCurveHistogram, int skip);
|
||||||
static void RGBCurve (const std::vector<double>& curvePoints, LUTf & outCurve, int skip);
|
static void RGBCurve (const std::vector<double>& curvePoints, LUTf & outCurve, int skip);
|
||||||
};
|
};
|
||||||
|
@ -133,15 +133,15 @@ void Crop::update (int todo) {
|
|||||||
if (colortest && cropw>115 && croph>115)
|
if (colortest && cropw>115 && croph>115)
|
||||||
for(int j=1;j<5;j++){
|
for(int j=1;j<5;j++){
|
||||||
xref+=j*30;yref+=j*30;
|
xref+=j*30;yref+=j*30;
|
||||||
if (settings->verbose) printf("before rgbProc RGB Xr%i Yr%i Skip=%d R=%f G=%f B=%f gamma=%f \n",xref,yref,skip, \
|
if (settings->verbose) printf("before rgbProc RGB Xr%i Yr%i Skip=%d R=%f G=%f B=%f gamma=%f \n",xref,yref,skip,
|
||||||
baseCrop->r[(int)(xref/skip)][(int)(yref/skip)]/256,\
|
baseCrop->r[(int)(xref/skip)][(int)(yref/skip)]/256,
|
||||||
baseCrop->g[(int)(xref/skip)][(int)(yref/skip)]/256, \
|
baseCrop->g[(int)(xref/skip)][(int)(yref/skip)]/256,
|
||||||
baseCrop->b[(int)(xref/skip)][(int)(yref/skip)]/256,
|
baseCrop->b[(int)(xref/skip)][(int)(yref/skip)]/256,
|
||||||
parent->imgsrc->getGamma());
|
parent->imgsrc->getGamma());
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if (todo & M_RGBCURVE)
|
if (todo & M_RGBCURVE)
|
||||||
parent->ipf.rgbProc (baseCrop, laboCrop, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, cshmap, \
|
parent->ipf.rgbProc (baseCrop, laboCrop, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, cshmap,
|
||||||
params.toneCurve.saturation, parent->rCurve, parent->gCurve, parent->bCurve );
|
params.toneCurve.saturation, parent->rCurve, parent->gCurve, parent->bCurve );
|
||||||
|
|
||||||
/*xref=000;yref=000;
|
/*xref=000;yref=000;
|
||||||
@ -149,13 +149,13 @@ void Crop::update (int todo) {
|
|||||||
for(int j=1;j<5;j++){
|
for(int j=1;j<5;j++){
|
||||||
xref+=j*30;yref+=j*30;
|
xref+=j*30;yref+=j*30;
|
||||||
if (settings->verbose) {
|
if (settings->verbose) {
|
||||||
printf("after rgbProc RGB Xr%i Yr%i Skip=%d R=%f G=%f B=%f \n",xref,yref,skip, \
|
printf("after rgbProc RGB Xr%i Yr%i Skip=%d R=%f G=%f B=%f \n",xref,yref,skip,
|
||||||
baseCrop->r[(int)(xref/skip)][(int)(yref/skip)]/256,\
|
baseCrop->r[(int)(xref/skip)][(int)(yref/skip)]/256,
|
||||||
baseCrop->g[(int)(xref/skip)][(int)(yref/skip)]/256, \
|
baseCrop->g[(int)(xref/skip)][(int)(yref/skip)]/256,
|
||||||
baseCrop->b[(int)(xref/skip)][(int)(yref/skip)]/256);
|
baseCrop->b[(int)(xref/skip)][(int)(yref/skip)]/256);
|
||||||
printf("after rgbProc Lab Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip,
|
printf("after rgbProc Lab Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip,
|
||||||
laboCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327, \
|
laboCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327,
|
||||||
laboCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327, \
|
laboCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327,
|
||||||
laboCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327);
|
laboCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327);
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
@ -200,24 +200,24 @@ void Crop::update (int todo) {
|
|||||||
int glin = (CurveFactory::igamma2((float)cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+1]/255.0) * 255.0);
|
int glin = (CurveFactory::igamma2((float)cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+1]/255.0) * 255.0);
|
||||||
int blin = (CurveFactory::igamma2((float)cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+2]/255.0) * 255.0);
|
int blin = (CurveFactory::igamma2((float)cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+2]/255.0) * 255.0);
|
||||||
|
|
||||||
printf("after lab2rgb RGB lab2 Xr%i Yr%i Skip=%d R=%d G=%d B=%d \n",xref,yref,skip, \
|
printf("after lab2rgb RGB lab2 Xr%i Yr%i Skip=%d R=%d G=%d B=%d \n",xref,yref,skip,
|
||||||
rlin,glin,blin);
|
rlin,glin,blin);
|
||||||
//cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))], \
|
//cropImg->data[3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))],
|
||||||
//cropImg->data[(3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+1)], \
|
//cropImg->data[(3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+1)],
|
||||||
//cropImg->data[(3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+2)]);
|
//cropImg->data[(3*((int)(xref/skip)*cropImg->width+(int)(yref/skip))+2)]);
|
||||||
//printf("after lab2rgb Lab lab2 Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip, labnCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327,labnCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327,labnCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327);
|
//printf("after lab2rgb Lab lab2 Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip, labnCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327,labnCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327,labnCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327);
|
||||||
printf("after lab2rgb Lab Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip, \
|
printf("after lab2rgb Lab Xr%i Yr%i Skip=%d l=%f a=%f b=%f \n",xref,yref,skip,
|
||||||
labnCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327, \
|
labnCrop->L[(int)(xref/skip)][(int)(yref/skip)]/327,
|
||||||
labnCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327, \
|
labnCrop->a[(int)(xref/skip)][(int)(yref/skip)]/327,
|
||||||
labnCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327);
|
labnCrop->b[(int)(xref/skip)][(int)(yref/skip)]/327)q;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
if (colortest && cropImg->height>115 && cropImg->width>115) {//for testing
|
if (colortest && cropImg->height>115 && cropImg->width>115) {//for testing
|
||||||
xref=000;yref=000;
|
xref=000;yref=000;
|
||||||
printf("dcrop final R= %d G= %d B= %d \n", \
|
printf("dcrop final R= %d G= %d B= %d \n",
|
||||||
cropImg->data[3*xref/(skip)*(cropImg->width+1)], \
|
cropImg->data[3*xref/(skip)*(cropImg->width+1)],
|
||||||
cropImg->data[3*xref/(skip)*(cropImg->width+1)+1], \
|
cropImg->data[3*xref/(skip)*(cropImg->width+1)+1],
|
||||||
cropImg->data[3*xref/(skip)*(cropImg->width+1)+2]);
|
cropImg->data[3*xref/(skip)*(cropImg->width+1)+2]);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
@ -150,10 +150,10 @@ namespace rtengine {
|
|||||||
//set up NR weight functions
|
//set up NR weight functions
|
||||||
|
|
||||||
//gamma correction for chroma in shadows
|
//gamma correction for chroma in shadows
|
||||||
float nrwtl_norm = ((CurveFactory::gamma((double)65535.0/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)) - \
|
float nrwtl_norm = ((CurveFactory::gamma((double)65535.0/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)) -
|
||||||
(CurveFactory::gamma((double)75535.0/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)));
|
(CurveFactory::gamma((double)75535.0/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)));
|
||||||
for (int i=0; i<65536; i++) {
|
for (int i=0; i<65536; i++) {
|
||||||
nrwt_l[i] = ((CurveFactory::gamma((double)i/65535.0, gam, gamthresh, gamslope, 1.0, 0.0) - \
|
nrwt_l[i] = ((CurveFactory::gamma((double)i/65535.0, gam, gamthresh, gamslope, 1.0, 0.0) -
|
||||||
CurveFactory::gamma((double)(i+10000)/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)) )/nrwtl_norm;
|
CurveFactory::gamma((double)(i+10000)/65535.0, gam, gamthresh, gamslope, 1.0, 0.0)) )/nrwtl_norm;
|
||||||
//if (i % 100 ==0) printf("%d %f \n",i,nrwt_l[i]);
|
//if (i % 100 ==0) printf("%d %f \n",i,nrwt_l[i]);
|
||||||
}
|
}
|
||||||
@ -280,8 +280,8 @@ namespace rtengine {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void ImProcFunctions::dirpyr(LabImage* data_fine, LabImage* data_coarse, int level, \
|
void ImProcFunctions::dirpyr(LabImage* data_fine, LabImage* data_coarse, int level,
|
||||||
LUTf & rangefn_L, LUTf & rangefn_ab, int pitch, int scale, \
|
LUTf & rangefn_L, LUTf & rangefn_ab, int pitch, int scale,
|
||||||
const int luma, const int chroma )
|
const int luma, const int chroma )
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -361,7 +361,7 @@ namespace rtengine {
|
|||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void ImProcFunctions::idirpyr(LabImage* data_coarse, LabImage* data_fine, int level, LUTf &rangefn_L, LUTf & nrwt_l, LUTf & nrwt_ab, \
|
void ImProcFunctions::idirpyr(LabImage* data_coarse, LabImage* data_fine, int level, LUTf &rangefn_L, LUTf & nrwt_l, LUTf & nrwt_ab,
|
||||||
int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/ )
|
int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/ )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -225,10 +225,10 @@ void RawImageSource::fast_demosaic(int winx, int winy, int winw, int winh) {
|
|||||||
|
|
||||||
if (c==0) {//R site
|
if (c==0) {//R site
|
||||||
red[i][j] = rawData[i][j];
|
red[i][j] = rawData[i][j];
|
||||||
blue[i][j] = green[i][j] - 0.25f*((green[i-1][j-1]+green[i-1][j+1]+green[i+1][j+1]+green[i+1][j-1]) - \
|
blue[i][j] = green[i][j] - 0.25f*((green[i-1][j-1]+green[i-1][j+1]+green[i+1][j+1]+green[i+1][j-1]) -
|
||||||
MIN(clip_pt,rawData[i-1][j-1]+rawData[i-1][j+1]+rawData[i+1][j+1]+rawData[i+1][j-1]));
|
MIN(clip_pt,rawData[i-1][j-1]+rawData[i-1][j+1]+rawData[i+1][j+1]+rawData[i+1][j-1]));
|
||||||
} else {//B site
|
} else {//B site
|
||||||
red[i][j] = green[i][j] - 0.25f*((green[i-1][j-1]+green[i-1][j+1]+green[i+1][j+1]+green[i+1][j-1]) - \
|
red[i][j] = green[i][j] - 0.25f*((green[i-1][j-1]+green[i-1][j+1]+green[i+1][j+1]+green[i+1][j-1]) -
|
||||||
MIN(clip_pt,rawData[i-1][j-1]+rawData[i-1][j+1]+rawData[i+1][j+1]+rawData[i+1][j-1]));
|
MIN(clip_pt,rawData[i-1][j-1]+rawData[i-1][j+1]+rawData[i+1][j+1]+rawData[i+1][j-1]));
|
||||||
blue[i][j] = rawData[i][j];
|
blue[i][j] = rawData[i][j];
|
||||||
}
|
}
|
||||||
@ -247,9 +247,9 @@ void RawImageSource::fast_demosaic(int winx, int winy, int winw, int winh) {
|
|||||||
for (int j=bord+1-(FC(i,2)&1); j < W-bord; j+=2) {
|
for (int j=bord+1-(FC(i,2)&1); j < W-bord; j+=2) {
|
||||||
|
|
||||||
//interpolate R and B colors at G sites
|
//interpolate R and B colors at G sites
|
||||||
red[i][j] = green[i][j] - 0.25f*((green[i-1][j]-red[i-1][j])+(green[i+1][j]-red[i+1][j])+ \
|
red[i][j] = green[i][j] - 0.25f*((green[i-1][j]-red[i-1][j])+(green[i+1][j]-red[i+1][j])+
|
||||||
(green[i][j-1]-red[i][j-1])+(green[i][j+1]-red[i][j+1]));
|
(green[i][j-1]-red[i][j-1])+(green[i][j+1]-red[i][j+1]));
|
||||||
blue[i][j] = green[i][j] - 0.25f*((green[i-1][j]-blue[i-1][j])+(green[i+1][j]-blue[i+1][j])+ \
|
blue[i][j] = green[i][j] - 0.25f*((green[i-1][j]-blue[i-1][j])+(green[i+1][j]-blue[i+1][j])+
|
||||||
(green[i][j-1]-blue[i][j-1])+(green[i][j+1]-blue[i][j+1]));
|
(green[i][j-1]-blue[i][j-1])+(green[i][j+1]-blue[i][j+1]));
|
||||||
}
|
}
|
||||||
progress+=(double)0.33/(H);
|
progress+=(double)0.33/(H);
|
||||||
|
@ -72,14 +72,14 @@ void ImProcFunctions::gamutmap(float &X, float &Y, float &Z, const double p[3][3
|
|||||||
int c1=(c+1)%3;
|
int c1=(c+1)%3;
|
||||||
int c2=(c+2)%3;
|
int c2=(c+2)%3;
|
||||||
|
|
||||||
lam[c][m] = (-(p[0][c1]*p[1][c]*((-12 + 3*u0 + 20*v0)*Y + 4*m*65535*v0*p[2][c2])) + \
|
lam[c][m] = (-(p[0][c1]*p[1][c]*((-12 + 3*u0 + 20*v0)*Y + 4*m*65535*v0*p[2][c2])) +
|
||||||
p[0][c]*p[1][c1]*((-12 + 3*u0 + 20*v0)*Y + 4*m*65535*v0*p[2][c2]) - \
|
p[0][c]*p[1][c1]*((-12 + 3*u0 + 20*v0)*Y + 4*m*65535*v0*p[2][c2]) -
|
||||||
4*v0*p[0][c1]*(Y - m*65535*p[1][c2])*p[2][c] + 4*v0*p[0][c]*(Y - m*65535*p[1][c2])*p[2][c1] - \
|
4*v0*p[0][c1]*(Y - m*65535*p[1][c2])*p[2][c] + 4*v0*p[0][c]*(Y - m*65535*p[1][c2])*p[2][c1] -
|
||||||
(4*m*65535*v0*p[0][c2] - 9*u0*Y)*(p[1][c1]*p[2][c] - p[1][c]*p[2][c1]));
|
(4*m*65535*v0*p[0][c2] - 9*u0*Y)*(p[1][c1]*p[2][c] - p[1][c]*p[2][c1]));
|
||||||
|
|
||||||
lam[c][m] /= (3*u*Y*(p[0][c1]*p[1][c] - p[1][c1]*(p[0][c] + 3*p[2][c]) + 3*p[1][c]*p[2][c1]) + \
|
lam[c][m] /= (3*u*Y*(p[0][c1]*p[1][c] - p[1][c1]*(p[0][c] + 3*p[2][c]) + 3*p[1][c]*p[2][c1]) +
|
||||||
4*v*(p[0][c1]*(5*Y*p[1][c] + m*65535*p[1][c]*p[2][c2] + Y*p[2][c] - m*65535*p[1][c2]*p[2][c]) - \
|
4*v*(p[0][c1]*(5*Y*p[1][c] + m*65535*p[1][c]*p[2][c2] + Y*p[2][c] - m*65535*p[1][c2]*p[2][c]) -
|
||||||
p[0][c]*(5*Y*p[1][c1] + m*65535*p[1][c1]*p[2][c2] + Y*p[2][c1] - m*65535*p[1][c2]*p[2][c1]) + \
|
p[0][c]*(5*Y*p[1][c1] + m*65535*p[1][c1]*p[2][c2] + Y*p[2][c1] - m*65535*p[1][c2]*p[2][c1]) +
|
||||||
m*65535*p[0][c2]*(p[1][c1]*p[2][c] - p[1][c]*p[2][c1])));
|
m*65535*p[0][c2]*(p[1][c1]*p[2][c] - p[1][c]*p[2][c1])));
|
||||||
|
|
||||||
if (lam[c][m]<lam_min && lam[c][m]>0) lam_min=lam[c][m];
|
if (lam[c][m]<lam_min && lam[c][m]>0) lam_min=lam[c][m];
|
||||||
|
@ -282,7 +282,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
|
|
||||||
//if one or more channels is highlight but none are blown, add to highlight accumulator
|
//if one or more channels is highlight but none are blown, add to highlight accumulator
|
||||||
|
|
||||||
if ((red[i][j]>thresh[0] || green[i][j]>thresh[1] || blue[i][j]>thresh[2]) && \
|
if ((red[i][j]>thresh[0] || green[i][j]>thresh[1] || blue[i][j]>thresh[2]) &&
|
||||||
(red[i][j]<max[0] && green[i][j]<max[1] && blue[i][j]<max[2])) {
|
(red[i][j]<max[0] && green[i][j]<max[1] && blue[i][j]<max[2])) {
|
||||||
|
|
||||||
hipass_sum += fabs(channelblur[0][i][j]-red[i][j]) + fabs(channelblur[1][i][j]-green[i][j]) + fabs(channelblur[2][i][j]-blue[i][j]);
|
hipass_sum += fabs(channelblur[0][i][j]-red[i][j]) + fabs(channelblur[1][i][j]-green[i][j]) + fabs(channelblur[2][i][j]-blue[i][j]);
|
||||||
@ -375,7 +375,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int c=0; c<4; c++) {
|
for (int c=0; c<4; c++) {
|
||||||
hilite_dir[c][i][j] = 0.1*((hilite_dir[0+c][i-2][j-1]+hilite_dir[0+c][i-1][j-1]+hilite_dir[0+c][i][j-1]+hilite_dir[0+c][i+1][j-1]+hilite_dir[0+c][i+2][j-1])/ \
|
hilite_dir[c][i][j] = 0.1*((hilite_dir[0+c][i-2][j-1]+hilite_dir[0+c][i-1][j-1]+hilite_dir[0+c][i][j-1]+hilite_dir[0+c][i+1][j-1]+hilite_dir[0+c][i+2][j-1])/
|
||||||
(hilite_dir[0+3][i-2][j-1]+hilite_dir[0+3][i-1][j-1]+hilite_dir[0+3][i][j-1]+hilite_dir[0+3][i+1][j-1]+hilite_dir[0+3][i+2][j-1]+0.00001));
|
(hilite_dir[0+3][i-2][j-1]+hilite_dir[0+3][i-1][j-1]+hilite_dir[0+3][i][j-1]+hilite_dir[0+3][i+1][j-1]+hilite_dir[0+3][i+2][j-1]+0.00001));
|
||||||
hilite_dir[4+c][i][j+1] += hilite_dir[c][i][j];
|
hilite_dir[4+c][i][j+1] += hilite_dir[c][i][j];
|
||||||
hilite_dir[8+c][i-2][j] += hilite_dir[c][i][j];
|
hilite_dir[8+c][i-2][j] += hilite_dir[c][i][j];
|
||||||
@ -395,7 +395,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int c=0; c<4; c++) {
|
for (int c=0; c<4; c++) {
|
||||||
hilite_dir[4+c][i][j] = 0.1*((hilite_dir[4+c][(i-2)][(j+1)]+hilite_dir[4+c][(i-1)][(j+1)]+hilite_dir[4+c][(i)][(j+1)]+hilite_dir[4+c][(i+1)][(j+1)]+hilite_dir[4+c][(i+2)][(j+1)])/ \
|
hilite_dir[4+c][i][j] = 0.1*((hilite_dir[4+c][(i-2)][(j+1)]+hilite_dir[4+c][(i-1)][(j+1)]+hilite_dir[4+c][(i)][(j+1)]+hilite_dir[4+c][(i+1)][(j+1)]+hilite_dir[4+c][(i+2)][(j+1)])/
|
||||||
(hilite_dir[4+3][(i-2)][(j+1)]+hilite_dir[4+3][(i-1)][(j+1)]+hilite_dir[4+3][(i)][(j+1)]+hilite_dir[4+3][(i+1)][(j+1)]+hilite_dir[4+3][(i+2)][(j+1)]+0.00001));
|
(hilite_dir[4+3][(i-2)][(j+1)]+hilite_dir[4+3][(i-1)][(j+1)]+hilite_dir[4+3][(i)][(j+1)]+hilite_dir[4+3][(i+1)][(j+1)]+hilite_dir[4+3][(i+2)][(j+1)]+0.00001));
|
||||||
hilite_dir[8+c][i-2][j] += hilite_dir[4+c][i][j];
|
hilite_dir[8+c][i-2][j] += hilite_dir[4+c][i][j];
|
||||||
hilite_dir[12+c][i+2][j] += hilite_dir[4+c][i][j];
|
hilite_dir[12+c][i+2][j] += hilite_dir[4+c][i][j];
|
||||||
@ -417,7 +417,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int c=0; c<4; c++) {
|
for (int c=0; c<4; c++) {
|
||||||
hilite_dir[8+c][i][j] = 0.1*((hilite_dir[8+c][i-1][j-2]+hilite_dir[8+c][i-1][j-1]+hilite_dir[8+c][i-1][j]+hilite_dir[8+c][i-1][j+1]+hilite_dir[8+c][i-1][j+2])/ \
|
hilite_dir[8+c][i][j] = 0.1*((hilite_dir[8+c][i-1][j-2]+hilite_dir[8+c][i-1][j-1]+hilite_dir[8+c][i-1][j]+hilite_dir[8+c][i-1][j+1]+hilite_dir[8+c][i-1][j+2])/
|
||||||
(hilite_dir[8+3][i-1][j-2]+hilite_dir[8+3][i-1][j-1]+hilite_dir[8+3][i-1][j]+hilite_dir[8+3][i-1][j+1]+hilite_dir[8+3][i-1][j+2]+0.00001));
|
(hilite_dir[8+3][i-1][j-2]+hilite_dir[8+3][i-1][j-1]+hilite_dir[8+3][i-1][j]+hilite_dir[8+3][i-1][j+1]+hilite_dir[8+3][i-1][j+2]+0.00001));
|
||||||
hilite_dir[12+c][i+1][j] += hilite_dir[8+c][i][j];
|
hilite_dir[12+c][i+1][j] += hilite_dir[8+c][i][j];
|
||||||
}
|
}
|
||||||
@ -435,7 +435,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int c=0; c<4; c++) {
|
for (int c=0; c<4; c++) {
|
||||||
hilite_dir[12+c][i][j] = 0.1*((hilite_dir[12+c][(i+1)][(j-2)]+hilite_dir[12+c][(i+1)][(j-1)]+hilite_dir[12+c][(i+1)][(j)]+hilite_dir[12+c][(i+1)][(j+1)]+hilite_dir[12+c][(i+1)][(j+2)])/ \
|
hilite_dir[12+c][i][j] = 0.1*((hilite_dir[12+c][(i+1)][(j-2)]+hilite_dir[12+c][(i+1)][(j-1)]+hilite_dir[12+c][(i+1)][(j)]+hilite_dir[12+c][(i+1)][(j+1)]+hilite_dir[12+c][(i+1)][(j+2)])/
|
||||||
(hilite_dir[12+3][(i+1)][(j-2)]+hilite_dir[12+3][(i+1)][(j-1)]+hilite_dir[12+3][(i+1)][(j)]+hilite_dir[12+3][(i+1)][(j+1)]+hilite_dir[12+3][(i+1)][(j+2)]+0.00001));
|
(hilite_dir[12+3][(i+1)][(j-2)]+hilite_dir[12+3][(i+1)][(j-1)]+hilite_dir[12+3][(i+1)][(j)]+hilite_dir[12+3][(i+1)][(j+1)]+hilite_dir[12+3][(i+1)][(j+2)]+0.00001));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -563,8 +563,8 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
float Yhi = 0.001+(hilite_dir[dir*4+0][i1][j1] + hilite_dir[dir*4+1][i1][j1] + hilite_dir[dir*4+2][i1][j1]);
|
float Yhi = 0.001+(hilite_dir[dir*4+0][i1][j1] + hilite_dir[dir*4+1][i1][j1] + hilite_dir[dir*4+2][i1][j1]);
|
||||||
float Y = 0.001+(rgb_blend[0]+rgb_blend[1]+rgb_blend[2]);
|
float Y = 0.001+(rgb_blend[0]+rgb_blend[1]+rgb_blend[2]);
|
||||||
if (hilite_dir[dir*4+0][i1][j1]+hilite_dir[dir*4+1][i1][j1]+hilite_dir[dir*4+2][i1][j1]>0.5) {
|
if (hilite_dir[dir*4+0][i1][j1]+hilite_dir[dir*4+1][i1][j1]+hilite_dir[dir*4+2][i1][j1]>0.5) {
|
||||||
dirwt = invfn[65535*(SQR(rgb_blend[0]/Y-hilite_dir[dir*4+0][i1][j1]/Yhi) + \
|
dirwt = invfn[65535*(SQR(rgb_blend[0]/Y-hilite_dir[dir*4+0][i1][j1]/Yhi) +
|
||||||
SQR(rgb_blend[1]/Y-hilite_dir[dir*4+1][i1][j1]/Yhi) + \
|
SQR(rgb_blend[1]/Y-hilite_dir[dir*4+1][i1][j1]/Yhi) +
|
||||||
SQR(rgb_blend[2]/Y-hilite_dir[dir*4+2][i1][j1]/Yhi))];
|
SQR(rgb_blend[2]/Y-hilite_dir[dir*4+2][i1][j1]/Yhi))];
|
||||||
totwt += dirwt;
|
totwt += dirwt;
|
||||||
clipfix[0] += dirwt*hilite_dir[dir*4+0][i1][j1]/(hilite_dir[dir*4+3][i1][j1]+0.00001);
|
clipfix[0] += dirwt*hilite_dir[dir*4+0][i1][j1]/(hilite_dir[dir*4+3][i1][j1]+0.00001);
|
||||||
@ -591,15 +591,15 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b
|
|||||||
int notclipped[3] = {pixel[0]<max[0] ? 1 : 0, pixel[1]<max[1] ? 1 : 0, pixel[2]<max[2] ? 1 : 0};
|
int notclipped[3] = {pixel[0]<max[0] ? 1 : 0, pixel[1]<max[1] ? 1 : 0, pixel[2]<max[2] ? 1 : 0};
|
||||||
|
|
||||||
if (notclipped[0]==0) {//red clipped
|
if (notclipped[0]==0) {//red clipped
|
||||||
red[i][j] = MAX(red[i][j],(clipfix[0]*((notclipped[1]*pixel[1] + notclipped[2]*pixel[2])/ \
|
red[i][j] = MAX(red[i][j],(clipfix[0]*((notclipped[1]*pixel[1] + notclipped[2]*pixel[2])/
|
||||||
(notclipped[1]*clipfix[1] + notclipped[2]*clipfix[2]))));
|
(notclipped[1]*clipfix[1] + notclipped[2]*clipfix[2]))));
|
||||||
}
|
}
|
||||||
if (notclipped[1]==0) {//green clipped
|
if (notclipped[1]==0) {//green clipped
|
||||||
green[i][j] = MAX(green[i][j],(clipfix[1]*((notclipped[2]*pixel[2] + notclipped[0]*pixel[0])/ \
|
green[i][j] = MAX(green[i][j],(clipfix[1]*((notclipped[2]*pixel[2] + notclipped[0]*pixel[0])/
|
||||||
(notclipped[2]*clipfix[2] + notclipped[0]*clipfix[0]))));
|
(notclipped[2]*clipfix[2] + notclipped[0]*clipfix[0]))));
|
||||||
}
|
}
|
||||||
if (notclipped[2]==0) {//blue clipped
|
if (notclipped[2]==0) {//blue clipped
|
||||||
blue[i][j] = MAX(blue[i][j],(clipfix[2]*((notclipped[0]*pixel[0] + notclipped[1]*pixel[1])/ \
|
blue[i][j] = MAX(blue[i][j],(clipfix[2]*((notclipped[0]*pixel[0] + notclipped[1]*pixel[1])/
|
||||||
(notclipped[0]*clipfix[0] + notclipped[1]*clipfix[1]))));
|
(notclipped[0]*clipfix[0] + notclipped[1]*clipfix[1]))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
ipf.getAutoExp (aehist, aehistcompr, imgsrc->getDefGain(), params.toneCurve.clip, params.toneCurve.expcomp,
|
ipf.getAutoExp (aehist, aehistcompr, imgsrc->getDefGain(), params.toneCurve.clip, params.toneCurve.expcomp,
|
||||||
params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
|
params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
|
||||||
if (aeListener)
|
if (aeListener)
|
||||||
aeListener->autoExpChanged (params.toneCurve.expcomp, params.toneCurve.brightness, params.toneCurve.contrast, \
|
aeListener->autoExpChanged (params.toneCurve.expcomp, params.toneCurve.brightness, params.toneCurve.contrast,
|
||||||
params.toneCurve.black, params.toneCurve.hlcompr,params.toneCurve.hlcomprthresh);
|
params.toneCurve.black, params.toneCurve.hlcompr,params.toneCurve.hlcomprthresh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -226,10 +226,10 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped);
|
if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped);
|
||||||
|
|
||||||
// complexCurve also calculated pre-curves histogram dependend on crop
|
// complexCurve also calculated pre-curves histogram dependend on crop
|
||||||
CurveFactory::complexCurve (params.toneCurve.expcomp, params.toneCurve.black/65535.0, \
|
CurveFactory::complexCurve (params.toneCurve.expcomp, params.toneCurve.black/65535.0,
|
||||||
params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, \
|
params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh,
|
||||||
params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast, \
|
params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast,
|
||||||
imgsrc->getGamma(), true, params.toneCurve.curve, \
|
imgsrc->getGamma(), true, params.toneCurve.curve,
|
||||||
vhist16, histCropped, hltonecurve, shtonecurve, tonecurve, histToneCurve, scale==1 ? 1 : 1);
|
vhist16, histCropped, hltonecurve, shtonecurve, tonecurve, histToneCurve, scale==1 ? 1 : 1);
|
||||||
|
|
||||||
CurveFactory::RGBCurve (params.rgbCurves.rcurve, rCurve, scale==1 ? 1 : 1);
|
CurveFactory::RGBCurve (params.rgbCurves.rcurve, rCurve, scale==1 ? 1 : 1);
|
||||||
@ -238,7 +238,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
|
|
||||||
// if it's just crop we just need the histogram, no image updates
|
// if it's just crop we just need the histogram, no image updates
|
||||||
if ( todo!=CROP ) {
|
if ( todo!=CROP ) {
|
||||||
ipf.rgbProc (oprevi, oprevl, hltonecurve, shtonecurve, tonecurve, shmap, params.toneCurve.saturation, \
|
ipf.rgbProc (oprevi, oprevl, hltonecurve, shtonecurve, tonecurve, shmap, params.toneCurve.saturation,
|
||||||
rCurve, gCurve, bCurve);
|
rCurve, gCurve, bCurve);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (todo & M_LUMACURVE) {
|
if (todo & M_LUMACURVE) {
|
||||||
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit, \
|
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit,
|
||||||
params.labCurve.acurve, params.labCurve.bcurve, chroma_acurve, chroma_bcurve, satcurve, scale==1 ? 1 : 16);
|
params.labCurve.acurve, params.labCurve.bcurve, chroma_acurve, chroma_bcurve, satcurve, scale==1 ? 1 : 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ void ImProcFunctions::firstAnalysis (Imagefloat* original, const ProcParams* par
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process RGB image and convert to LAB space
|
// Process RGB image and convert to LAB space
|
||||||
void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, \
|
void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
|
||||||
SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve) {
|
SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve) {
|
||||||
|
|
||||||
int h_th, s_th;
|
int h_th, s_th;
|
||||||
@ -239,8 +239,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltone
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
bool mixchannels = (params->chmixer.red[0]!=100 || params->chmixer.red[1]!=0 || params->chmixer.red[2]!=0 || \
|
bool mixchannels = (params->chmixer.red[0]!=100 || params->chmixer.red[1]!=0 || params->chmixer.red[2]!=0 ||
|
||||||
params->chmixer.green[0]!=0 || params->chmixer.green[1]!=100 || params->chmixer.green[2]!=0 || \
|
params->chmixer.green[0]!=0 || params->chmixer.green[1]!=100 || params->chmixer.green[2]!=0 ||
|
||||||
params->chmixer.blue[0]!=0 || params->chmixer.blue[1]!=0 || params->chmixer.blue[2]!=100);
|
params->chmixer.blue[0]!=0 || params->chmixer.blue[1]!=0 || params->chmixer.blue[2]!=100);
|
||||||
|
|
||||||
int tW = working->width;
|
int tW = working->width;
|
||||||
@ -319,8 +319,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltone
|
|||||||
|
|
||||||
//TODO: proper treatment of out-of-gamut colors
|
//TODO: proper treatment of out-of-gamut colors
|
||||||
//float tonefactor = hltonecurve[(0.299f*r+0.587f*g+0.114f*b)];
|
//float tonefactor = hltonecurve[(0.299f*r+0.587f*g+0.114f*b)];
|
||||||
float tonefactor=((r<MAXVAL ? hltonecurve[r] : CurveFactory::hlcurve (exp_scale, comp, hlrange, r) ) + \
|
float tonefactor=((r<MAXVAL ? hltonecurve[r] : CurveFactory::hlcurve (exp_scale, comp, hlrange, r) ) +
|
||||||
(g<MAXVAL ? hltonecurve[g] : CurveFactory::hlcurve (exp_scale, comp, hlrange, g) ) + \
|
(g<MAXVAL ? hltonecurve[g] : CurveFactory::hlcurve (exp_scale, comp, hlrange, g) ) +
|
||||||
(b<MAXVAL ? hltonecurve[b] : CurveFactory::hlcurve (exp_scale, comp, hlrange, b) ) )/3.0;
|
(b<MAXVAL ? hltonecurve[b] : CurveFactory::hlcurve (exp_scale, comp, hlrange, b) ) )/3.0;
|
||||||
|
|
||||||
r = (r*tonefactor);
|
r = (r*tonefactor);
|
||||||
@ -670,7 +670,7 @@ fclose(f);*/
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ImProcFunctions::getAutoExp (LUTu & histogram, int histcompr, double defgain, double clip, \
|
void ImProcFunctions::getAutoExp (LUTu & histogram, int histcompr, double defgain, double clip,
|
||||||
double& expcomp, int& bright, int& contr, int& black, int& hlcompr, int& hlcomprthresh) {
|
double& expcomp, int& bright, int& contr, int& black, int& hlcompr, int& hlcomprthresh) {
|
||||||
|
|
||||||
double corr = 1;//pow(2.0, defgain);//defgain may be redundant legacy of superceded code???
|
double corr = 1;//pow(2.0, defgain);//defgain may be redundant legacy of superceded code???
|
||||||
|
@ -111,7 +111,7 @@ class ImProcFunctions {
|
|||||||
bool needsTransform ();
|
bool needsTransform ();
|
||||||
|
|
||||||
void firstAnalysis (Imagefloat* working, const ProcParams* params, LUTu & vhist16, double gamma);
|
void firstAnalysis (Imagefloat* working, const ProcParams* params, LUTu & vhist16, double gamma);
|
||||||
void rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, \
|
void rgbProc (Imagefloat* working, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
|
||||||
SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve);
|
SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve);
|
||||||
void luminanceCurve (LabImage* lold, LabImage* lnew, LUTf &curve);
|
void luminanceCurve (LabImage* lold, LabImage* lnew, LUTf &curve);
|
||||||
void chrominanceCurve (LabImage* lold, LabImage* lnew, LUTf &acurve, LUTf &bcurve, LUTf & satcurve);
|
void chrominanceCurve (LabImage* lold, LabImage* lnew, LUTf &acurve, LUTf &bcurve, LUTf & satcurve);
|
||||||
@ -136,9 +136,9 @@ class ImProcFunctions {
|
|||||||
|
|
||||||
procparams::DirPyrDenoiseParams dnparams;
|
procparams::DirPyrDenoiseParams dnparams;
|
||||||
void dirpyrLab_denoise(LabImage * src, LabImage * dst, const procparams::DirPyrDenoiseParams & dnparams );//Emil's directional pyramid denoise
|
void dirpyrLab_denoise(LabImage * src, LabImage * dst, const procparams::DirPyrDenoiseParams & dnparams );//Emil's directional pyramid denoise
|
||||||
void dirpyr (LabImage* data_fine, LabImage* data_coarse, int level, LUTf &rangefn_L, LUTf &rangefn_ab, \
|
void dirpyr (LabImage* data_fine, LabImage* data_coarse, int level, LUTf &rangefn_L, LUTf &rangefn_ab,
|
||||||
int pitch, int scale, const int luma, int chroma );
|
int pitch, int scale, const int luma, int chroma );
|
||||||
void idirpyr (LabImage* data_coarse, LabImage* data_fine, int level, LUTf &rangefn_L, LUTf & nrwt_l, LUTf & nrwt_ab, \
|
void idirpyr (LabImage* data_coarse, LabImage* data_fine, int level, LUTf &rangefn_L, LUTf & nrwt_l, LUTf & nrwt_ab,
|
||||||
int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/ );
|
int pitch, int scale, const int luma, const int chroma/*, LUTf & Lcurve, LUTf & abcurve*/ );
|
||||||
|
|
||||||
void dirpyrLab_equalizer (LabImage * src, LabImage * dst, const double * mult );//Emil's directional pyramid equalizer
|
void dirpyrLab_equalizer (LabImage * src, LabImage * dst, const double * mult );//Emil's directional pyramid equalizer
|
||||||
|
@ -490,7 +490,7 @@ void ImProcFunctions::MLmicrocontrast(LabImage* lab) {
|
|||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
if (k==1) contrast = sqrt(fabs(LM[offset+1]-LM[offset-1])*fabs(LM[offset+1]-LM[offset-1])+fabs(LM[offset+width]-LM[offset-width])*fabs(LM[offset+width]-LM[offset-width]))/chmax; //for 3x3
|
if (k==1) contrast = sqrt(fabs(LM[offset+1]-LM[offset-1])*fabs(LM[offset+1]-LM[offset-1])+fabs(LM[offset+width]-LM[offset-width])*fabs(LM[offset+width]-LM[offset-width]))/chmax; //for 3x3
|
||||||
else if (k==2) contrast = sqrt(fabs(LM[offset+1]-LM[offset-1])*fabs(LM[offset+1]-LM[offset-1])+fabs(LM[offset+width]-LM[offset-width])*fabs(LM[offset+width]-LM[offset-width])\
|
else if (k==2) contrast = sqrt(fabs(LM[offset+1]-LM[offset-1])*fabs(LM[offset+1]-LM[offset-1])+fabs(LM[offset+width]-LM[offset-width])*fabs(LM[offset+width]-LM[offset-width])
|
||||||
+fabs(LM[offset+2]-LM[offset-2])*fabs(LM[offset+2]-LM[offset-2])+fabs(LM[offset+2*width]-LM[offset-2*width])*fabs(LM[offset+2*width]-LM[offset-2*width]))/(2*chmax); //for 5x5
|
+fabs(LM[offset+2]-LM[offset-2])*fabs(LM[offset+2]-LM[offset-2])+fabs(LM[offset+2*width]-LM[offset-2*width])*fabs(LM[offset+2*width]-LM[offset-2*width]))/(2*chmax); //for 5x5
|
||||||
|
|
||||||
if (contrast>1.0f)
|
if (contrast>1.0f)
|
||||||
|
@ -385,14 +385,14 @@ void ImProcFunctions::transformSep (Imagefloat* original, Imagefloat* transforme
|
|||||||
// auxiliary variables for vertical perspective correction
|
// auxiliary variables for vertical perspective correction
|
||||||
double vpdeg = params->perspective.vertical / 100.0 * 45.0;
|
double vpdeg = params->perspective.vertical / 100.0 * 45.0;
|
||||||
double vpalpha = (90.0 - vpdeg) / 180.0 * RT_PI;
|
double vpalpha = (90.0 - vpdeg) / 180.0 * RT_PI;
|
||||||
double vpteta = fabs(vpalpha-RT_PI/2)<1e-3 ? 0.0 : acos ((vpdeg>0 ? 1.0 : -1.0) * sqrt((-SQR(oW*tan(vpalpha)) + (vpdeg>0 ? 1.0 : -1.0) * \
|
double vpteta = fabs(vpalpha-RT_PI/2)<1e-3 ? 0.0 : acos ((vpdeg>0 ? 1.0 : -1.0) * sqrt((-SQR(oW*tan(vpalpha)) + (vpdeg>0 ? 1.0 : -1.0) *
|
||||||
oW*tan(vpalpha)*sqrt(SQR(4*maxRadius)+SQR(oW*tan(vpalpha))))/(SQR(maxRadius)*8)));
|
oW*tan(vpalpha)*sqrt(SQR(4*maxRadius)+SQR(oW*tan(vpalpha))))/(SQR(maxRadius)*8)));
|
||||||
double vpcospt = (vpdeg>=0 ? 1.0 : -1.0) * cos (vpteta), vptanpt = tan (vpteta);
|
double vpcospt = (vpdeg>=0 ? 1.0 : -1.0) * cos (vpteta), vptanpt = tan (vpteta);
|
||||||
|
|
||||||
// auxiliary variables for horizontal perspective correction
|
// auxiliary variables for horizontal perspective correction
|
||||||
double hpdeg = params->perspective.horizontal / 100.0 * 45.0;
|
double hpdeg = params->perspective.horizontal / 100.0 * 45.0;
|
||||||
double hpalpha = (90.0 - hpdeg) / 180.0 * RT_PI;
|
double hpalpha = (90.0 - hpdeg) / 180.0 * RT_PI;
|
||||||
double hpteta = fabs(hpalpha-RT_PI/2)<1e-3 ? 0.0 : acos ((hpdeg>0 ? 1.0 : -1.0) * sqrt((-SQR(oH*tan(hpalpha)) + (hpdeg>0 ? 1.0 : -1.0) * \
|
double hpteta = fabs(hpalpha-RT_PI/2)<1e-3 ? 0.0 : acos ((hpdeg>0 ? 1.0 : -1.0) * sqrt((-SQR(oH*tan(hpalpha)) + (hpdeg>0 ? 1.0 : -1.0) *
|
||||||
oH*tan(hpalpha)*sqrt(SQR(4*maxRadius)+SQR(oH*tan(hpalpha))))/(SQR(maxRadius)*8)));
|
oH*tan(hpalpha)*sqrt(SQR(4*maxRadius)+SQR(oH*tan(hpalpha))))/(SQR(maxRadius)*8)));
|
||||||
double hpcospt = (hpdeg>=0 ? 1.0 : -1.0) * cos (hpteta), hptanpt = tan (hpteta);
|
double hpcospt = (hpdeg>=0 ? 1.0 : -1.0) * cos (hpteta), hptanpt = tan (hpteta);
|
||||||
|
|
||||||
|
@ -503,8 +503,8 @@ int RawImageSource::findHotDeadPixel( PixelsMap &bpMap, float thresh)
|
|||||||
for (int j=0; j<W; j++) {
|
for (int j=0; j<W; j++) {
|
||||||
if (j<2) {jprev=j+2;} else {jprev=j-2;}
|
if (j<2) {jprev=j+2;} else {jprev=j-2;}
|
||||||
if (j>W-3) {jnext=j-2;} else {jnext=j+2;}
|
if (j>W-3) {jnext=j-2;} else {jnext=j+2;}
|
||||||
med3x3(rawData[iprev][jprev],rawData[iprev][j],rawData[iprev][jnext], \
|
med3x3(rawData[iprev][jprev],rawData[iprev][j],rawData[iprev][jnext],
|
||||||
rawData[i][jprev],rawData[i][j],rawData[i][jnext], \
|
rawData[i][jprev],rawData[i][j],rawData[i][jnext],
|
||||||
rawData[inext][jprev],rawData[inext][j],rawData[inext][jnext],cfablur[i*W+j]);
|
rawData[inext][jprev],rawData[inext][j],rawData[inext][jnext],cfablur[i*W+j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1308,10 +1308,10 @@ void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur, int boxH,
|
|||||||
for (int j=0; j<W; j++) {
|
for (int j=0; j<W; j++) {
|
||||||
if (j<2) {jprev=j+2;} else {jprev=j-2;}
|
if (j<2) {jprev=j+2;} else {jprev=j-2;}
|
||||||
if (j>W-3) {jnext=j-2;} else {jnext=j+2;}
|
if (j>W-3) {jnext=j-2;} else {jnext=j+2;}
|
||||||
//med3x3(riFlatFile->data[iprev][jprev], riFlatFile->data[iprev][j], riFlatFile->data[iprev][jnext], \
|
//med3x3(riFlatFile->data[iprev][jprev], riFlatFile->data[iprev][j], riFlatFile->data[iprev][jnext],
|
||||||
riFlatFile->data[i][jprev], riFlatFile->data[i][j], riFlatFile->data[i][jnext], \
|
// riFlatFile->data[i][jprev], riFlatFile->data[i][j], riFlatFile->data[i][jnext],
|
||||||
riFlatFile->data[inext][jprev], riFlatFile->data[inext][j], riFlatFile->data[inext][jnext], cfatmp[i*W+j]);
|
// riFlatFile->data[inext][jprev], riFlatFile->data[inext][j], riFlatFile->data[inext][jnext], cfatmp[i*W+j]);
|
||||||
med5(riFlatFile->data[iprev][j], riFlatFile->data[i][jprev],riFlatFile->data[i][j], \
|
med5(riFlatFile->data[iprev][j], riFlatFile->data[i][jprev],riFlatFile->data[i][j],
|
||||||
riFlatFile->data[i][jnext], riFlatFile->data[inext][j],median);
|
riFlatFile->data[i][jnext], riFlatFile->data[inext][j],median);
|
||||||
if (riFlatFile->data[i][j]>hotdeadthresh*median || median>hotdeadthresh*riFlatFile->data[i][j]) {
|
if (riFlatFile->data[i][j]>hotdeadthresh*median || median>hotdeadthresh*riFlatFile->data[i][j]) {
|
||||||
cfatmp[i*W+j] = median;
|
cfatmp[i*W+j] = median;
|
||||||
@ -2086,7 +2086,7 @@ void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, f
|
|||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, \
|
void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout,
|
||||||
int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) {
|
int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) {
|
||||||
|
|
||||||
//static bool crTableReady = false;
|
//static bool crTableReady = false;
|
||||||
@ -2500,8 +2500,8 @@ void RawImageSource::transformPosition (int x, int y, int tran, int& ttx, int& t
|
|||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
void RawImageSource::inverse33 (double (*rgb_cam)[3], double (*cam_rgb)[3]) {
|
void RawImageSource::inverse33 (double (*rgb_cam)[3], double (*cam_rgb)[3]) {
|
||||||
double nom = (rgb_cam[0][2]*rgb_cam[1][1]*rgb_cam[2][0] - rgb_cam[0][1]*rgb_cam[1][2]*rgb_cam[2][0] - \
|
double nom = (rgb_cam[0][2]*rgb_cam[1][1]*rgb_cam[2][0] - rgb_cam[0][1]*rgb_cam[1][2]*rgb_cam[2][0] -
|
||||||
rgb_cam[0][2]*rgb_cam[1][0]*rgb_cam[2][1] + rgb_cam[0][0]*rgb_cam[1][2]*rgb_cam[2][1] + \
|
rgb_cam[0][2]*rgb_cam[1][0]*rgb_cam[2][1] + rgb_cam[0][0]*rgb_cam[1][2]*rgb_cam[2][1] +
|
||||||
rgb_cam[0][1]*rgb_cam[1][0]*rgb_cam[2][2] - rgb_cam[0][0]*rgb_cam[1][1]*rgb_cam[2][2] );
|
rgb_cam[0][1]*rgb_cam[1][0]*rgb_cam[2][2] - rgb_cam[0][0]*rgb_cam[1][1]*rgb_cam[2][2] );
|
||||||
cam_rgb[0][0] = (rgb_cam[1][2]*rgb_cam[2][1]-rgb_cam[1][1]*rgb_cam[2][2]) / nom;
|
cam_rgb[0][0] = (rgb_cam[1][2]*rgb_cam[2][1]-rgb_cam[1][1]*rgb_cam[2][2]) / nom;
|
||||||
cam_rgb[0][1] = -(rgb_cam[0][2]*rgb_cam[2][1]-rgb_cam[0][1]*rgb_cam[2][2]) / nom;
|
cam_rgb[0][1] = -(rgb_cam[0][2]*rgb_cam[2][1]-rgb_cam[0][1]*rgb_cam[2][2]) / nom;
|
||||||
|
@ -189,7 +189,7 @@ namespace rtengine {
|
|||||||
public:
|
public:
|
||||||
/** With this member function the staged processor notifies the listener that the detailed crop image has been updated.
|
/** With this member function the staged processor notifies the listener that the detailed crop image has been updated.
|
||||||
* @param img is a pointer to the detailed crop image */
|
* @param img is a pointer to the detailed crop image */
|
||||||
virtual void setDetailedCrop (IImage8* img, IImage8* imgtrue, procparams::ColorManagementParams cmp, \
|
virtual void setDetailedCrop (IImage8* img, IImage8* imgtrue, procparams::ColorManagementParams cmp,
|
||||||
procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip) {}
|
procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip) {}
|
||||||
virtual bool getWindow (int& cx, int& cy, int& cw, int& ch, int& skip) { return false; }
|
virtual bool getWindow (int& cx, int& cy, int& cw, int& ch, int& skip) { return false; }
|
||||||
};
|
};
|
||||||
|
@ -741,10 +741,10 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
|
|||||||
LUTf bCurve (65536);
|
LUTf bCurve (65536);
|
||||||
|
|
||||||
LUTu dummy;
|
LUTu dummy;
|
||||||
//CurveFactory::complexCurve (expcomp, black/65535.0, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, \
|
//CurveFactory::complexCurve (expcomp, black/65535.0, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh,
|
||||||
params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast, \
|
// params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast,
|
||||||
gamma, true, params.toneCurve.curve, hist16, dummy, curve1, curve2, curve, dummy, 16);
|
// gamma, true, params.toneCurve.curve, hist16, dummy, curve1, curve2, curve, dummy, 16);
|
||||||
CurveFactory::complexCurve (expcomp, black/65535.0, hlcompr, params.toneCurve.hlcomprthresh, \
|
CurveFactory::complexCurve (expcomp, black/65535.0, hlcompr, params.toneCurve.hlcomprthresh,
|
||||||
params.toneCurve.shcompr, bright, contr, gamma, true,
|
params.toneCurve.shcompr, bright, contr, gamma, true,
|
||||||
params.toneCurve.curve, hist16, dummy, curve1, curve2, curve, dummy, 16);
|
params.toneCurve.curve, hist16, dummy, curve1, curve2, curve, dummy, 16);
|
||||||
|
|
||||||
@ -770,7 +770,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
|
|||||||
|
|
||||||
CurveFactory::complexLCurve (params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve,
|
CurveFactory::complexLCurve (params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve,
|
||||||
hist16, hist16, curve, dummy, 16);
|
hist16, hist16, curve, dummy, 16);
|
||||||
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit, \
|
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit,
|
||||||
params.labCurve.acurve, params.labCurve.bcurve, curve1, curve2, satcurve, 16);
|
params.labCurve.acurve, params.labCurve.bcurve, curve1, curve2, satcurve, 16);
|
||||||
ipf.luminanceCurve (labView, labView, curve);
|
ipf.luminanceCurve (labView, labView, curve);
|
||||||
ipf.chrominanceCurve (labView, labView, curve1, curve2, satcurve);
|
ipf.chrominanceCurve (labView, labView, curve1, curve2, satcurve);
|
||||||
@ -852,7 +852,7 @@ void Thumbnail::applyAutoExp (procparams::ProcParams& params) {
|
|||||||
|
|
||||||
if (params.toneCurve.autoexp && aeHistogram) {
|
if (params.toneCurve.autoexp && aeHistogram) {
|
||||||
ImProcFunctions ipf (¶ms, false);
|
ImProcFunctions ipf (¶ms, false);
|
||||||
ipf.getAutoExp (aeHistogram, aeHistCompression, log(defGain)/log(2.0), params.toneCurve.clip, params.toneCurve.expcomp, \
|
ipf.getAutoExp (aeHistogram, aeHistCompression, log(defGain)/log(2.0), params.toneCurve.clip, params.toneCurve.expcomp,
|
||||||
params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
|
params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
|||||||
|
|
||||||
CurveFactory::complexLCurve (params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, hist16, hist16, curve, dummy, 1);
|
CurveFactory::complexLCurve (params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, hist16, hist16, curve, dummy, 1);
|
||||||
|
|
||||||
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit, \
|
CurveFactory::complexsgnCurve (params.labCurve.saturation, params.labCurve.enable_saturationlimiter, params.labCurve.saturationlimit,
|
||||||
params.labCurve.acurve, params.labCurve.bcurve, curve1, curve2, satcurve, 1);
|
params.labCurve.acurve, params.labCurve.bcurve, curve1, curve2, satcurve, 1);
|
||||||
ipf.luminanceCurve (labView, labView, curve);
|
ipf.luminanceCurve (labView, labView, curve);
|
||||||
ipf.chrominanceCurve (labView, labView, curve1, curve2, satcurve);
|
ipf.chrominanceCurve (labView, labView, curve1, curve2, satcurve);
|
||||||
|
@ -232,7 +232,7 @@ int createpixbufs (void* data) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procparams::ColorManagementParams cmp, \
|
void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procparams::ColorManagementParams cmp,
|
||||||
rtengine::procparams::CropParams cp, int ax, int ay, int aw, int ah, int askip) {
|
rtengine::procparams::CropParams cp, int ax, int ay, int aw, int ah, int askip) {
|
||||||
|
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
|
@ -91,7 +91,7 @@ class CropHandler : public rtengine::DetailedCropListener, public rtengine::Size
|
|||||||
bool getEnabled ();
|
bool getEnabled ();
|
||||||
|
|
||||||
// DetailedCropListener interface
|
// DetailedCropListener interface
|
||||||
void setDetailedCrop (rtengine::IImage8* im, rtengine::IImage8* imworking,rtengine::procparams::ColorManagementParams cmp, \
|
void setDetailedCrop (rtengine::IImage8* im, rtengine::IImage8* imworking,rtengine::procparams::ColorManagementParams cmp,
|
||||||
rtengine::procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip);
|
rtengine::procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip);
|
||||||
bool getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip);
|
bool getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip);
|
||||||
// SizeListener interface
|
// SizeListener interface
|
||||||
|
@ -787,16 +787,16 @@ bool FileBrowser::checkFilter (ThumbBrowserEntryBase* entryb) { // true -> entry
|
|||||||
|
|
||||||
FileBrowserEntry* entry = (FileBrowserEntry*)entryb;
|
FileBrowserEntry* entry = (FileBrowserEntry*)entryb;
|
||||||
// return false if basic filter settings are not satisfied
|
// return false if basic filter settings are not satisfied
|
||||||
if ((filter.showRanked[entry->thumbnail->getRank()]==false ) || \
|
if ((filter.showRanked[entry->thumbnail->getRank()]==false ) ||
|
||||||
(filter.showCLabeled[entry->thumbnail->getColorLabel()]==false ) || \
|
(filter.showCLabeled[entry->thumbnail->getColorLabel()]==false ) ||
|
||||||
|
|
||||||
((entry->thumbnail->hasProcParams() && filter.showEdited[0]) && !filter.showEdited[1]) || \
|
((entry->thumbnail->hasProcParams() && filter.showEdited[0]) && !filter.showEdited[1]) ||
|
||||||
((!entry->thumbnail->hasProcParams() && filter.showEdited[1])&& !filter.showEdited[0]) || \
|
((!entry->thumbnail->hasProcParams() && filter.showEdited[1])&& !filter.showEdited[0]) ||
|
||||||
|
|
||||||
((entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[0]) && !filter.showRecentlySaved[1]) || \
|
((entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[0]) && !filter.showRecentlySaved[1]) ||
|
||||||
((!entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[1]) && !filter.showRecentlySaved[0]) || \
|
((!entry->thumbnail->isRecentlySaved() && filter.showRecentlySaved[1]) && !filter.showRecentlySaved[0]) ||
|
||||||
|
|
||||||
(entry->thumbnail->getStage()==1 && !filter.showTrash) || \
|
(entry->thumbnail->getStage()==1 && !filter.showTrash) ||
|
||||||
(entry->thumbnail->getStage()==0 && !filter.showNotTrash))
|
(entry->thumbnail->getStage()==0 && !filter.showNotTrash))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1152,25 +1152,25 @@ BrowserFilter FileCatalog::getFilter () {
|
|||||||
* filter is setup in 2 steps
|
* filter is setup in 2 steps
|
||||||
* Step 1: handle individual filters
|
* Step 1: handle individual filters
|
||||||
*/
|
*/
|
||||||
filter.showRanked[0] = bFilterClear->get_active() || bUnRanked->get_active () || bTrash->get_active () || \
|
filter.showRanked[0] = bFilterClear->get_active() || bUnRanked->get_active () || bTrash->get_active () ||
|
||||||
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showCLabeled[0] = bFilterClear->get_active() || bUnCLabeled->get_active () || bTrash->get_active () || \
|
filter.showCLabeled[0] = bFilterClear->get_active() || bUnCLabeled->get_active () || bTrash->get_active () ||
|
||||||
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
for (int i=1; i<=5; i++){
|
for (int i=1; i<=5; i++){
|
||||||
filter.showRanked[i] = bFilterClear->get_active() || bRank[i-1]->get_active () || bTrash->get_active () || \
|
filter.showRanked[i] = bFilterClear->get_active() || bRank[i-1]->get_active () || bTrash->get_active () ||
|
||||||
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyCLabelFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showCLabeled[i] = bFilterClear->get_active() || bCLabel[i-1]->get_active () || bTrash->get_active () || \
|
filter.showCLabeled[i] = bFilterClear->get_active() || bCLabel[i-1]->get_active () || bTrash->get_active () ||
|
||||||
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyEditedFilterActive || anyRecentlySavedFilterActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<2; i++){
|
for (int i=0; i<2; i++){
|
||||||
filter.showEdited[i] = bFilterClear->get_active() || bEdited[i]->get_active () || bTrash->get_active () || \
|
filter.showEdited[i] = bFilterClear->get_active() || bEdited[i]->get_active () || bTrash->get_active () ||
|
||||||
anyRankFilterActive || anyCLabelFilterActive || anyRecentlySavedFilterActive;
|
anyRankFilterActive || anyCLabelFilterActive || anyRecentlySavedFilterActive;
|
||||||
|
|
||||||
filter.showRecentlySaved[i] = bFilterClear->get_active() || bRecentlySaved[i]->get_active () || bTrash->get_active () || \
|
filter.showRecentlySaved[i] = bFilterClear->get_active() || bRecentlySaved[i]->get_active () || bTrash->get_active () ||
|
||||||
anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive;
|
anyRankFilterActive || anyCLabelFilterActive || anyEditedFilterActive;
|
||||||
}
|
}
|
||||||
if( options.rtSettings.verbose ){
|
if( options.rtSettings.verbose ){
|
||||||
@ -1188,11 +1188,11 @@ BrowserFilter FileCatalog::getFilter () {
|
|||||||
* if no filters in a group are active, filter.show for each member of that group will be set to true
|
* if no filters in a group are active, filter.show for each member of that group will be set to true
|
||||||
* otherwise they are set based on UI input
|
* otherwise they are set based on UI input
|
||||||
*/
|
*/
|
||||||
if ((anyRankFilterActive && anyCLabelFilterActive ) || \
|
if ((anyRankFilterActive && anyCLabelFilterActive ) ||
|
||||||
(anyRankFilterActive && anyEditedFilterActive ) || \
|
(anyRankFilterActive && anyEditedFilterActive ) ||
|
||||||
(anyRankFilterActive && anyRecentlySavedFilterActive ) || \
|
(anyRankFilterActive && anyRecentlySavedFilterActive ) ||
|
||||||
(anyCLabelFilterActive && anyEditedFilterActive ) || \
|
(anyCLabelFilterActive && anyEditedFilterActive ) ||
|
||||||
(anyCLabelFilterActive && anyRecentlySavedFilterActive ) || \
|
(anyCLabelFilterActive && anyRecentlySavedFilterActive ) ||
|
||||||
(anyEditedFilterActive && anyRecentlySavedFilterActive)){
|
(anyEditedFilterActive && anyRecentlySavedFilterActive)){
|
||||||
|
|
||||||
filter.multiselect = true;
|
filter.multiselect = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user