psnr.cpp

来自「這是一個DWT的Verilog code,它的主要功用是PC與FPGA之間的DW」· C++ 代码 · 共 64 行

CPP
64
字号
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main ()
{
    FILE *orig_ptr;
    FILE *re_ptr;

    char source[25];
	printf(" Enter original filename : ");
	scanf("%s",source);
    printf("\n");   
	if ((orig_ptr=fopen(source,"rb")) == NULL)
	{
		printf("\n Can't open the image (PSNR)! \n");
		exit(0);
	}  	

	char target [20];
    printf(" Enter restruction filename : ");
	scanf("%s",target);
    printf("\n");
	if ((re_ptr=fopen(target,"rb")) == NULL)
	{
		printf(" \n Can't open the reimage (PSNR)! \n");
		exit(1);
	}
    int sizex,sizey; 
	printf("Input the image hor size;");
	scanf("%d",&sizex);
	printf("\n");
	printf("Input the image ver size;");
	scanf("%d",&sizey);
    printf("\n");
	int i,j;
    float snr=0,psnr=0,acc1=0,acc2=0,acc3=0;
	float in1,in2,diff1,diff2,abs,mse;
	for( i=0; i<sizey; i++)
	{
		for( j=0; j<sizex; j++)
		{
			in1 = float(fgetc(orig_ptr));
    		in2 = float(fgetc(re_ptr));
	    	diff1 = in1-in2;
			if (diff1<0) 
				diff1=-diff1;
		    acc1=acc1+diff1;
            acc2=acc2+pow(diff1,2);
			acc3=acc3+pow(in1,2);
    	  }
	}
            abs=acc1/(sizey*sizex);
            mse=acc2/(sizey*sizex);
    snr=10*float(log10(acc3/acc2));
	psnr=10*float(log10((255*255)/mse));

	printf("\n mean absolute error =%.4f ",abs);
	printf("\n mse =%.4f ",mse);
	printf("\n snr =%.4f ",snr);
	printf("\n psnr =%.4f ",psnr);
 
	fclose( orig_ptr );
	fclose( re_ptr );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?