Fixed progress indication for AHD demosaic; code formatted
This commit is contained in:
parent
54bcc00087
commit
eb24ebe041
@ -2366,7 +2366,9 @@ void RawImageSource::ahd_demosaic()
|
|||||||
const double xyz_rgb[3][3] = { /* XYZ from RGB */
|
const double xyz_rgb[3][3] = { /* XYZ from RGB */
|
||||||
{ 0.412453, 0.357580, 0.180423 },
|
{ 0.412453, 0.357580, 0.180423 },
|
||||||
{ 0.212671, 0.715160, 0.072169 },
|
{ 0.212671, 0.715160, 0.072169 },
|
||||||
{ 0.019334, 0.119193, 0.950227 } };
|
{ 0.019334, 0.119193, 0.950227 }
|
||||||
|
};
|
||||||
|
|
||||||
const float d65_white[3] = { 0.950456, 1, 1.088754 };
|
const float d65_white[3] = { 0.950456, 1, 1.088754 };
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
@ -2383,6 +2385,7 @@ void RawImageSource::ahd_demosaic()
|
|||||||
r = i / 65535.0;
|
r = i / 65535.0;
|
||||||
cbrt[i] = r > 0.008856 ? pow(r,1/3.0) : 7.787*r + 16/116.0;
|
cbrt[i] = r > 0.008856 ? pow(r,1/3.0) : 7.787*r + 16/116.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i < 3; i++)
|
for (i=0; i < 3; i++)
|
||||||
for (j=0; j < colors; j++)
|
for (j=0; j < colors; j++)
|
||||||
for (xyz_cam[i][j] = k=0; k < 3; k++)
|
for (xyz_cam[i][j] = k=0; k < 3; k++)
|
||||||
@ -2395,10 +2398,14 @@ void RawImageSource::ahd_demosaic()
|
|||||||
lab = (short (*)[TS][TS][3])(buffer + 12*TS*TS);
|
lab = (short (*)[TS][TS][3])(buffer + 12*TS*TS);
|
||||||
homo = (char (*)[TS][TS]) (buffer + 24*TS*TS);
|
homo = (char (*)[TS][TS]) (buffer + 24*TS*TS);
|
||||||
|
|
||||||
|
// helper variables for progress indication
|
||||||
|
int n_tiles = ((height-7 + (TS-7))/(TS-6)) * ((width-7 + (TS-7))/(TS-6));
|
||||||
|
int tile = 0;
|
||||||
|
|
||||||
for (top=2; top < height-5; top += TS-6)
|
for (top=2; top < height-5; top += TS-6)
|
||||||
for (left=2; left < width-5; left += TS-6) {
|
for (left=2; left < width-5; left += TS-6) {
|
||||||
|
|
||||||
/* Interpolate green horizontally and vertically: */
|
/* Interpolate green horizontally and vertically: */
|
||||||
for (row = top; row < top+TS && row < height-2; row++) {
|
for (row = top; row < top+TS && row < height-2; row++) {
|
||||||
col = left + (FC(row,left) & 1);
|
col = left + (FC(row,left) & 1);
|
||||||
for (c = FC(row,col); col < left+TS && col < width-2; col+=2) {
|
for (c = FC(row,col); col < left+TS && col < width-2; col+=2) {
|
||||||
@ -2412,8 +2419,7 @@ void RawImageSource::ahd_demosaic()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plistener) plistener->setProgress (0.33);
|
/* Interpolate red and blue, and convert to CIELab: */
|
||||||
/* Interpolate red and blue, and convert to CIELab: */
|
|
||||||
for (d=0; d < 2; d++)
|
for (d=0; d < 2; d++)
|
||||||
for (row=top+1; row < top+TS-1 && row < height-3; row++)
|
for (row=top+1; row < top+TS-1 && row < height-3; row++)
|
||||||
for (col=left+1; col < left+TS-1 && col < width-3; col++) {
|
for (col=left+1; col < left+TS-1 && col < width-3; col++) {
|
||||||
@ -2449,8 +2455,7 @@ void RawImageSource::ahd_demosaic()
|
|||||||
lix[0][2] = 64 * 200 * (xyz[1] - xyz[2]);
|
lix[0][2] = 64 * 200 * (xyz[1] - xyz[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plistener) plistener->setProgress (0.5);
|
/* Build homogeneity maps from the CIELab images: */
|
||||||
/* Build homogeneity maps from the CIELab images: */
|
|
||||||
memset (homo, 0, 2*TS*TS);
|
memset (homo, 0, 2*TS*TS);
|
||||||
for (row=top+2; row < top+TS-2 && row < height-4; row++) {
|
for (row=top+2; row < top+TS-2 && row < height-4; row++) {
|
||||||
tr = row-top;
|
tr = row-top;
|
||||||
@ -2474,8 +2479,8 @@ void RawImageSource::ahd_demosaic()
|
|||||||
homo[d][tr][tc]++;
|
homo[d][tr][tc]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(plistener) plistener->setProgress (0.8);
|
|
||||||
/* Combine the most homogenous pixels for the final result: */
|
/* Combine the most homogenous pixels for the final result: */
|
||||||
for (row=top+3; row < top+TS-3 && row < height-5; row++) {
|
for (row=top+3; row < top+TS-3 && row < height-5; row++) {
|
||||||
tr = row-top;
|
tr = row-top;
|
||||||
for (col=left+3; col < left+TS-3 && col < width-5; col++) {
|
for (col=left+3; col < left+TS-3 && col < width-5; col++) {
|
||||||
@ -2491,7 +2496,13 @@ void RawImageSource::ahd_demosaic()
|
|||||||
(rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) >> 1;
|
(rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) >> 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tile++;
|
||||||
|
if(plistener) {
|
||||||
|
plistener->setProgress((double)tile / n_tiles);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(plistener) plistener->setProgress (1.0);
|
if(plistener) plistener->setProgress (1.0);
|
||||||
free (buffer);
|
free (buffer);
|
||||||
red = new unsigned short*[H];
|
red = new unsigned short*[H];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user