⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_idct.cpp

📁 定点的idct源代码,自己编写的,对有需要的朋友应该有帮助.
💻 CPP
字号:
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
//#define PI 201                            //3.1415926  Q6
#define C 45                              //1/sqrt(2)  Q6
#define QUAR 1                           //1/4  Q2

void main(void)
{
	int u,v,x,y;  //数组变量
	int CU,CV;    //系数
	int AX,AY;   //角度                       
	int COSAX,COSAY; //
	long TEMP;   
	long I[8][8]={0}; //FDCT结果
	int D[8][8]=
	{
		{123,157,142,127,131,102,99,235},
		{134,135,157,112,109,106,108,136},
		{135,144,159,108,112,118,109,126},
		{176,183,161,111,186,130,132,133},
		{137,149,154,126,185,146,131,132},
		{121,130,127,146,205,150,130,126},
		{117,151,160,181,250,161,134,125},
		{168,170,171,178,183,179,112,124}
	};                                         //初始数据

	long F[8][8]=
	{
		{1136,48,-40,-4,30,-77,13,46},
		{-72,-4,114,-74,-7,-3,21,-6},
		{16,-12,0,-44,25,-3,17,-39},
		{7,-62,-15,-13,36,-25,-19,4},
		{50,13,35,-5,9,-22,6,-8},
		{42,-11,-9,-5,20,-30,-21,13},
		{-16,-8,20,-7,3,1,11,-23},
		{1,-14,-12,-18,-5,-2,6,-5}
	};

	int C_TABLE[360]={64,64,64,64,64,64,64,64,63,63,
		              63,63,63,62,62,62,62,61,61,61,
					  60,60,59,59,58,58,58,57,57,56,
					  55,55,54,54,53,52,52,51,50,50,
					  49,48,48,47,46,45,44,44,43,42,
					  41,40,39,39,38,37,36,35,34,33,
					  32,31,30,29,28,27,26,25,24,23,
					  22,21,20,19,18,17,15,14,13,12,
					  11,10,9,8,7,6,4,3,2,1,
					  0,-1,-2,-3,-4,-6,-7,-8,-9,-10,
					  -11,-12,-13,-14,-15,-17,-18,-19,-20,-21,
					  -22,-23,-24,-25,-26,-27,-28,-29,-30,-31,
					  -32,-33,-34,-35,-36,-37,-38,-38,-39,-40,
					  -41,-42,-43,-44,-44,-45,-46,-47,-48,-48,
					  -49,-50,-50,-51,-52,-52,-53,-54,-54,-55,
					  -55,-56,-56,-57,-58,-58,-58,-59,-59,-60,
					  -60,-61,-61,-61,-62,-62,-62,-62,-63,-63,
					  -63,-63,-63,-64,-64,-64,-64,-64,-64,-64,
					  -64,-64,-64,-64,-64,-64,-64,-64,-63,-63,
					  -63,-63,-63,-62,-62,-62,-62,-61,-61,-61,
					  -60,-60,-59,-59,-58,-58,-58,-57,-57,-56,
					  -55,-55,-54,-54,-53,-52,-52,-51,-50,-50,
					  -49,-48,-48,-47,-46,-45,-44,-44,-43,-42,
					  -41,-40,-39,-39,-38,-37,-36,-35,-34,-33,
					  -32,-31,-30,-29,-28,-27,-26,-25,-24,-23,
					  -22,-21,-20,-19,-18,-17,-16,-14,-13,-12,
					  -11,-10,-9,-8,-7,-6,-5,-3,-2,-1,
					  0,2,3,4,6,7,8,9,10,11,
					  12,13,14,15,17,18,19,20,21,22,
					  23,24,25,26,27,28,29,30,31,32,
					  33,34,35,36,37,38,38,39,40,41,
					  42,43,44,44,45,46,47,48,48,49,
					  50,50,51,52,52,53,54,54,55,55,
					  56,56,57,57,58,58,59,59,60,60,
					  60,61,61,62,62,62,62,63,63,63,
					  63,63,64,64,64,64,64,64,64,64};

	for (x=0;x<8;x++)
	    for (y=0;y<8;y++)
	    	 for (u=0;u<8;u++)
		    	 for (v=0;v<8;v++)
				 {
				     if (u==0)
				    	 CU=C;
			    	 else
			    		 CU=64;
			    	 if (v==0)
			    		 CV=C;
			    	 else
			    		 CV=64;

				     AX=(2*x+1)*u*180/16; 
                     AY=(2*y+1)*v*180/16; 
                    
					 if (AX>=0 && AX<360)
						 AX=AX;
					 if ((AX>=360)&&(AX<720))
						 AX=AX-360;
					 if ((AX>=720)&&(AX<1080))
						 AX=AX-720;
					 if (AX>=1080)
						 AX=AX-1080;

					 if ((AY>=0)&&(AY<360))
						 AY=AY;
					 if ((AY>=360)&&(AY<720))
						 AY=AY-360;
					 if ((AY>=720)&&(AY<1080))
						 AY=AY-720;
					 if (AY>=1080)
						 AY=AY-1080;

                     COSAX=C_TABLE[AX];      //Q6
                     COSAY=C_TABLE[AY];      //Q6   
			         TEMP=CV*F[u][v];        //Q6
					 TEMP=CU*TEMP>>6;        //Q12
                     TEMP=QUAR*TEMP;         //Q18
				  	 TEMP=((TEMP*COSAX)>>6); //Q19
					 TEMP=((TEMP*COSAY)>>6); //Q20
					 I[x][y]+=TEMP;          //Q20
				//	I[x][y]+=0.25*CU*CV*F[u][v]*cos((2*x+1)*u*pi/16)*cos((2*y+1)*v*pi/16);
				 }
	cout<<"RESULTS OF D_IDCT "<<endl;
	for (x=0;x<8;x++)
	{
		for (y=0;y<8;y++)
		{
			cout<<setw(8)<<(I[x][y]>>8)<<"  ";
		}
		cout<<endl;
	}


cout<<endl;
cout<<endl;
	cout<<"THE ERRORS ARE:"<<endl;
	for (x=0;x<8;x++)
	{
		for (y=0;y<8;y++)
		{
			cout<<setw(8)<<(((int)I[x][y]>>8)-D[x][y])<<"  ";
		}
		cout<<endl;
	}
}

⌨️ 快捷键说明

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