#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>
#define widesize 352
#define heightsize 288
#define totalsize 152064
#define halfsize 76032
int main(int argc, char* argv[])
{
FILE *fpp,*fp1,*fp2;
unsigned char fin[totalsize];
unsigned char origin[totalsize];
unsigned char buffer[totalsize]={0};
unsigned char *pointer;
int j, i, k, flag=0;
unsigned char ch,ch1;
double mse_value,psnr_value;
// int a,b,c,d,e,f,D1,D2,D3,D4,D_max;
int b,e;
if( (fpp = fopen( "foreman_decode_interlace.yuv", "rb" )) == NULL )//打开隔行数据
{
printf("cannot open file foreman_decode_interlace.yuv\n");
exit( 0 );
}
if( (fp1 = fopen( "foreman_decode_deinterlace_simpleintra.yuv", "wb" )) == NULL )//打开文件用于写入去隔行后的数据
{
printf("cannot open file foreman_decode_deinterlace_intrafield.yuv\n");
exit( 0 );
}
if( (fp2 = fopen( "foreman_decode.yuv", "rb" )) == NULL )//打开原始逐行数据,用于PSNR的计算
{
printf("cannot open file foreman_decode.yuv\n");
exit( 0 );
}
ch = fgetc( fpp );
ch1= fgetc( fp2 );
for (k=1;k<201;k++)
{
mse_value=0;
flag=k%2;
for(j=0;(j<totalsize) && (feof( fpp )== 0);j++)
{
fin[j]=ch;
ch=fgetc(fpp);
}
for(j=0;(j<totalsize) && (feof( fp2 )== 0);j++)
{
origin[j]=ch1;
ch1=fgetc(fp2);
}
pointer=buffer;
for(j=(0+flag);j<heightsize;j=j+2) //Y 需要插值的亮度信号行
for( i=0; i < widesize; i++ )
{
if (j==0)
{
pointer[i+j*widesize]=fin[i+(j+1)*widesize];
}
else if (j==heightsize)
{
pointer[i+j*widesize]=fin[i+(j-1)*widesize];
}
else
{
b=fin[i+(j-1)*widesize];
e=fin[i+(j+1)*widesize];
pointer[i+j*widesize]=(b+e)/2;
mse_value=mse_value+((double)pointer[i+j*widesize]-origin[i+j*widesize])*((double)pointer[i+j*widesize]-origin[i+j*widesize]);
}
}
for(j=(0+(flag+1)%2);j<heightsize;j=j+2) //Y 直接复制原场亮度值的信号行
for( i=0; i < widesize; i++ )
{
pointer[i+j*widesize]=fin[i+j*widesize];
}
for( j=0;j<heightsize/2;j=j+1) //U
for( i=0;i < widesize/2;i++)
{
pointer[heightsize*widesize+i+j*widesize/2]=fin[heightsize*widesize+i+j*widesize/2];
}
for( j=0;j<heightsize/2;j=j+1) //V
for( i=0; i < widesize/2;i++)
{
pointer[heightsize*widesize+heightsize*widesize/4 +i+j*widesize/2]=fin[heightsize*widesize+heightsize*widesize/4 +i+j*widesize/2];
}
mse_value=mse_value/(heightsize*widesize);
psnr_value=255*255/mse_value;
psnr_value=10*log10(psnr_value);
printf("frame %d deinterlaced,PSNR=%f\n",k,psnr_value);
fwrite( buffer,sizeof(unsigned char), totalsize, fp1);
// ZeroMemory(buffer,totalsize);
}
printf("deinterlace done\n");
fclose( fpp );
fclose( fp1 );
fclose( fp2 );
return 0;
}
chenyangyi.rar_视频压缩
版权申诉
37 浏览量
2022-09-21
08:32:44
上传
评论
收藏 1KB RAR 举报
钱亚锋
- 粉丝: 88
- 资源: 1万+
最新资源
- 微信小程序 - 图书管理系统源码.zip
- 微信小程序 - 图片自适应 ,富文本解析源码.zip
- 微信小程序 - 同乐居商城:购物车合算源码
- 1、根据输入的三条边值判断能组成何种三角形,并设计测试数据进行判定覆盖测试 三条边为变量a、b、c,范围为1≤边值≤10,不在范
- SQL server 练习题目8道(小白教学).zip
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈