int main(int argc, char* argv[])
{
int i, j, width, height, maxval, comp, lwidth, lheight, row, col, scale;
unsigned char *hr_im, *ori_im, *lr_im;
unsigned char temp;
double psnr1;
FILE *fp;
int *g_mvx[ N ], *g_mvy[ N ];
float *g_mse[ N ];
if( argc<3 )
{
printf("Usage: NL_Backprojection LR_image(pgm) HR_image(pgm) [Original_image(pgm)] \n");
return 1;
}
scale = 2;
if ( Get_image_size( argv[1], &lwidth, &lheight ) )
{
printf( "Can not read %s", argv );
return 1;
}
width = lwidth*scale;
height = lheight*scale;
hr_im = (unsigned char*) malloc( sizeof(char)*width*height );
ori_im = (unsigned char*) malloc( sizeof(char)*width*height );
lr_im = (unsigned char*) malloc( sizeof(char)*lwidth*lheight );
Read_image( argv[1], lr_im );
printf( "Start to processing %s\n", argv[1] );
Bicubic( lr_im, hr_im, scale, lwidth, lheight );
Write2PGM( hr_im, width, height, "Bic_image.pgm" );
if ( argc >3 )
{
Read_image( argv[3], ori_im );
printf( "Bicubic, PSNR = %f\n", Cal_psnr( ori_im, hr_im, width, height ) );
}
for ( i = 0; i < N; i ++ )
{
g_mvx[ i ] = (int*) malloc( sizeof(int)*width*height );
g_mvy[ i ] = (int*) malloc( sizeof(int)*width*height );
g_mse[ i ] = (float*) malloc( sizeof(int)*width*height );
}
NL_filtering( hr_im, width, height, g_mvx, g_mvy, g_mse );
NL_Backprojection( hr_im, width, height, ori_im, g_mvx, g_mvy, g_mse, argc );
if ( argc > 3 )
{
printf( "After Backprojection, PSNR = %f\n", Cal_psnr( ori_im, hr_im, width, height ) );
}
printf("\nWrite to file: %s.\n",argv[2]);
Write2PGM( hr_im, width, height, argv[2] );
free( hr_im );
free( ori_im );
free( lr_im );
for ( i = 0; i < N; i ++ )
{
free( g_mvx[ i ] );
free( g_mvy[ i ] );
free( g_mse[ i ] );
}
return 0;
}