PPG demosaicing not used
This commit is contained in:
@@ -2395,99 +2395,6 @@ void RawImageSource::vng4_demosaic () {
|
||||
#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))
|
||||
|
||||
/*
|
||||
Patterned Pixel Grouping Interpolation by Alain Desbiolles
|
||||
*/
|
||||
void RawImageSource::ppg_demosaic()
|
||||
{
|
||||
int width=W, height=H;
|
||||
int dir[5] = { 1, width, -1, -width, 1 };
|
||||
int row, col, diff[2], guess[2], c, d, i;
|
||||
ushort (*pix)[4];
|
||||
|
||||
ushort (*image)[4];
|
||||
int colors = 3;
|
||||
|
||||
if (plistener) {
|
||||
plistener->setProgressStr ("Demosaicing...");
|
||||
plistener->setProgress (0.0);
|
||||
}
|
||||
|
||||
image = (ushort (*)[4]) calloc (H*W, sizeof *image);
|
||||
for (int ii=0; ii<H; ii++)
|
||||
for (int jj=0; jj<W; jj++)
|
||||
image[ii*W+jj][fc(ii,jj)] = rawData[ii][jj];
|
||||
|
||||
border_interpolate(3, image);
|
||||
|
||||
/* Fill in the green layer with gradients and pattern recognition: */
|
||||
for (row=3; row < height-3; row++) {
|
||||
for (col=3+(FC(row,3) & 1), c=FC(row,col); col < width-3; col+=2) {
|
||||
pix = image + row*width+col;
|
||||
for (i=0; (d=dir[i]) > 0; i++) {
|
||||
guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2
|
||||
- pix[-2*d][c] - pix[2*d][c];
|
||||
diff[i] = ( ABS(pix[-2*d][c] - pix[ 0][c]) +
|
||||
ABS(pix[ 2*d][c] - pix[ 0][c]) +
|
||||
ABS(pix[ -d][1] - pix[ d][1]) ) * 3 +
|
||||
( ABS(pix[ 3*d][1] - pix[ d][1]) +
|
||||
ABS(pix[-3*d][1] - pix[-d][1]) ) * 2;
|
||||
}
|
||||
d = dir[i = diff[0] > diff[1]];
|
||||
pix[0][1] = ULIM(guess[i] >> 2, pix[d][1], pix[-d][1]);
|
||||
}
|
||||
if(plistener) plistener->setProgress(0.33*row/(height-3));
|
||||
}
|
||||
/* Calculate red and blue for each green pixel: */
|
||||
for (row=1; row < height-1; row++) {
|
||||
for (col=1+(FC(row,2) & 1), c=FC(row,col+1); col < width-1; col+=2) {
|
||||
pix = image + row*width+col;
|
||||
for (i=0; (d=dir[i]) > 0; c=2-c, i++)
|
||||
pix[0][c] = CLIP((pix[-d][c] + pix[d][c] + 2*pix[0][1]
|
||||
- pix[-d][1] - pix[d][1]) >> 1);
|
||||
}
|
||||
if(plistener) plistener->setProgress(0.33 + 0.33*row/(height-1));
|
||||
}
|
||||
/* Calculate blue for red pixels and vice versa: */
|
||||
for (row=1; row < height-1; row++) {
|
||||
for (col=1+(FC(row,1) & 1), c=2-FC(row,col); col < width-1; col+=2) {
|
||||
pix = image + row*width+col;
|
||||
for (i=0; (d=dir[i]+dir[i+1]) > 0; i++) {
|
||||
diff[i] = ABS(pix[-d][c] - pix[d][c]) +
|
||||
ABS(pix[-d][1] - pix[0][1]) +
|
||||
ABS(pix[ d][1] - pix[0][1]);
|
||||
guess[i] = pix[-d][c] + pix[d][c] + 2*pix[0][1]
|
||||
- pix[-d][1] - pix[d][1];
|
||||
}
|
||||
if (diff[0] != diff[1])
|
||||
pix[0][c] = CLIP(guess[diff[0] > diff[1]] >> 1);
|
||||
else
|
||||
pix[0][c] = CLIP((guess[0]+guess[1]) >> 2);
|
||||
}
|
||||
if(plistener) plistener->setProgress(0.67 + 0.33*row/(height-1));
|
||||
}
|
||||
|
||||
red = new unsigned short*[H];
|
||||
for (int i=0; i<H; i++) {
|
||||
red[i] = new unsigned short[W];
|
||||
for (int j=0; j<W; j++)
|
||||
red[i][j] = image[i*W+j][0];
|
||||
}
|
||||
green = new unsigned short*[H];
|
||||
for (int i=0; i<H; i++) {
|
||||
green[i] = new unsigned short[W];
|
||||
for (int j=0; j<W; j++)
|
||||
green[i][j] = image[i*W+j][1];
|
||||
}
|
||||
blue = new unsigned short*[H];
|
||||
for (int i=0; i<H; i++) {
|
||||
blue[i] = new unsigned short[W];
|
||||
for (int j=0; j<W; j++)
|
||||
blue[i][j] = image[i*W+j][2];
|
||||
}
|
||||
free (image);
|
||||
}
|
||||
|
||||
void RawImageSource::border_interpolate(int border, ushort (*image)[4], int start, int end)
|
||||
{
|
||||
unsigned row, col, y, x, f, c, sum[8];
|
||||
|
@@ -162,7 +162,6 @@ class RawImageSource : public ImageSource {
|
||||
void eahd_demosaic();
|
||||
void hphd_demosaic();
|
||||
void vng4_demosaic();
|
||||
void ppg_demosaic();
|
||||
void amaze_demosaic_RT(int winx, int winy, int winw, int winh);//Emil's code for AMaZE
|
||||
void fast_demo(int winx, int winy, int winw, int winh);//Emil's code for fast demosaicing
|
||||
void dcb_demosaic(int iterations, int dcb_enhance);
|
||||
|
Reference in New Issue
Block a user