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

📄 dct.c

📁 Dct of 4*4 matrix of an image
💻 C
字号:
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int B[4][4]={{5,11,8,10},{9,8,4,12},{1,10,11,4},{19,6,15,7}};
int A[4][4]={{1,1,1,1},{2,1,-1,-2},{1,-1,-1,1},{1,-2,2,-1}};
int B1[4][4]={{1,2,1,1},{1,1,-1,-2},{1,-1,-1,2},{1,-2,1,-1}};
int res[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
const double E[4][4]={{0.25,0.16332,0.25,0.16332},{0.16332,0.2133512,0.16332,0.10669},{0.25,0.16332,0.25,0.16332},{0.16332,0.10669,0.16332,0.10669}};
int res1[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
float res2[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int p,q;


	res[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]+A[0][3]*B[3][0];
	res[0][1]=A[0][0]*B[0][1]+A[0][1]*B[1][1]+A[0][2]*B[2][1]+A[0][3]*B[3][1];
	res[0][2]=A[0][0]*B[0][2]+A[0][1]*B[1][2]+A[0][2]*B[2][2]+A[0][3]*B[3][2];
	res[0][3]=A[0][0]*B[0][3]+A[0][1]*B[1][3]+A[0][2]*B[2][3]+A[0][3]*B[3][3];
	
	
	res[1][0]=A[1][0]*B[0][0]+A[1][1]*B[1][0]+A[1][2]*B[2][0]+A[1][3]*B[3][0];
    res[1][1]=A[1][0]*B[0][1]+A[1][1]*B[1][1]+A[1][2]*B[2][1]+A[1][3]*B[3][1];
	res[1][2]=A[1][0]*B[0][2]+A[1][1]*B[1][2]+A[1][2]*B[2][2]+A[1][3]*B[3][2];
	res[1][3]=A[1][0]*B[0][3]+A[1][1]*B[1][3]+A[1][2]*B[2][3]+A[1][3]*B[3][3];



	res[2][0]=A[2][0]*B[0][0]+A[2][1]*B[1][0]+A[2][2]*B[2][0]+A[2][3]*B[3][0];
	res[2][1]=A[2][0]*B[0][1]+A[2][1]*B[1][1]+A[2][2]*B[2][1]+A[2][3]*B[3][1];
	res[2][2]=A[2][0]*B[0][2]+A[2][1]*B[1][2]+A[2][2]*B[2][2]+A[2][3]*B[3][2];
	res[2][3]=A[2][0]*B[0][3]+A[2][1]*B[1][3]+A[2][2]*B[2][3]+A[2][3]*B[3][3];



	res[3][0]=A[3][0]*B[0][0]+A[3][1]*B[1][0]+A[3][2]*B[2][0]+A[3][3]*B[3][0];
	res[3][1]=A[3][0]*B[0][1]+A[3][1]*B[1][1]+A[3][2]*B[2][1]+A[3][3]*B[3][1];
	res[3][2]=A[3][0]*B[0][2]+A[3][1]*B[1][2]+A[3][2]*B[2][2]+A[3][3]*B[3][2];
	res[3][3]=A[3][0]*B[0][3]+A[3][1]*B[1][3]+A[3][2]*B[2][3]+A[3][3]*B[3][3];




	
    for(p=0;p<=3;p++)
					{
				 for(q=0;q<=3;q++)

				 
							{  

                printf("%d\t",res[p][q]);

				if  (p==0 && q==3)
		 {
		 printf("\n");
		 }

		              // to make the next row

		 if  (p==1 && q==3)

		 {
		 printf("\n");
		 }
             	        // to make the next row
   
 
		 if  (p==2 && q==3)
		 {
		 printf("\n");
		 }



        if  (p==3 && q==3)
		 {
		 printf("\n");
		 }





				 }

	  
					}


    res1[0][0]=res[0][0]*B1[0][0]+res[0][1]*B1[1][0]+res[0][2]*B1[2][0]+res[0][3]*B1[3][0];
    res1[0][1]=res[0][0]*B1[0][1]+res[0][1]*B1[1][1]+res[0][2]*B1[2][1]+res[0][3]*B1[3][1];
	res1[0][2]=res[0][0]*B1[0][2]+res[0][1]*B1[1][2]+res[0][2]*B1[2][2]+res[0][3]*B1[3][2];
	res1[0][3]=res[0][0]*B1[0][3]+res[0][1]*B1[1][3]+res[0][2]*B1[2][3]+res[0][3]*B1[3][3];

	res1[1][0]=res[1][0]*B1[0][0]+res[1][1]*B1[1][0]+res[1][2]*B1[2][0]+res[1][3]*B1[3][0];
	res1[1][1]=res[1][0]*B1[0][1]+res[1][1]*B1[1][1]+res[1][2]*B1[2][1]+res[1][3]*B1[3][1];
	res1[1][2]=res[1][0]*B1[0][2]+res[1][1]*B1[1][2]+res[1][2]*B1[2][2]+res[1][3]*B1[3][2];
    res1[1][3]=res[1][0]*B1[0][3]+res[1][1]*B1[1][3]+res[1][2]*B1[2][3]+res[1][3]*B1[3][3];


	res1[2][0]=res[2][0]*B1[0][0]+res[2][1]*B1[1][0]+res[2][2]*B1[2][0]+res[2][3]*B1[3][0];
	res1[2][1]=res[2][0]*B1[0][1]+res[2][1]*B1[1][1]+res[2][2]*B1[2][1]+res[2][3]*B1[3][1];
	res1[2][2]=res[2][0]*B1[0][2]+res[2][1]*B1[1][2]+res[2][2]*B1[2][2]+res[2][3]*B1[3][2];
	res1[2][3]=res[2][0]*B1[0][3]+res[2][1]*B1[1][3]+res[2][2]*B1[2][3]+res[2][3]*B1[3][3];

	res1[3][0]=res[3][0]*B1[0][0]+res[3][1]*B1[1][0]+res[3][2]*B1[2][0]+res[3][3]*B1[3][0];
	res1[3][1]=res[3][0]*B1[0][1]+res[3][1]*B1[1][1]+res[3][2]*B1[2][1]+res[3][3]*B1[3][1];
	res1[3][2]=res[3][0]*B1[0][2]+res[3][1]*B1[1][2]+res[3][2]*B1[2][2]+res[3][3]*B1[3][2];
	res1[3][3]=res[3][0]*B1[0][3]+res[3][1]*B1[1][3]+res[3][2]*B1[2][3]+res[3][3]*B1[3][3];


	



      
		  res2[0][0]=res1[0][0]*E[0][0];
		  res2[0][1]=res1[0][1]*E[0][1];
		  res2[0][2]=res1[0][2]*E[0][2];
		  res2[0][3]=res1[0][3]*E[0][3];

		  res2[1][0]=res1[1][0]*E[1][0];
		  res2[1][1]=res1[1][1]*E[1][1];
		  res2[1][2]=res1[1][2]*E[1][2];
		  res2[1][3]=res1[1][3]*E[1][3];

		  res2[2][0]=res1[2][0]*E[2][0];
		  res2[2][1]=res1[2][1]*E[2][1];
		  res2[2][2]=res1[2][2]*E[2][2];
		  res2[2][3]=res1[2][3]*E[2][3];

		  res2[3][0]=res1[3][0]*E[3][0];
		  res2[3][1]=res1[3][1]*E[3][1];
		  res2[3][2]=res1[3][2]*E[3][2];
		  res2[3][3]=res1[3][3]*E[3][3]; 

		


printf("\n");
		  printf("\n");
		  printf("\n");


                                    
    for(p=0;p<=3;p++)
					{
				 for(q=0;q<=3;q++)

				 
							{  

                printf("%d\t",res1[p][q]);

				if  (p==0 && q==3)
		 {
		 printf("\n");
		 }

		              // to make the next row


		 if  (p==1 && q==3)
		 {
		 printf("\n");
		 }
             	        // to make the next row
   
 
		 if  (p==2 && q==3)
		 {
		 printf("\n");
		 }



        if  (p==3 && q==3)
		 {
		 printf("\n");
		 }





				 }

	  
					} 
	

printf("\n");
		  printf("\n");
		  printf("\n");


                                    
    for(p=0;p<=3;p++)
					{
				 for(q=0;q<=3;q++)

				 
							{  

                printf("%f\t",res2[p][q]);

				if  (p==0 && q==3)
		 {
		 printf("\n");
		 }

		              // to make the next row


		 if  (p==1 && q==3)
		 {
		 printf("\n");
		 }
             	        // to make the next row
   
 
		 if  (p==2 && q==3)
		 {
		 printf("\n");
		 }



        if  (p==3 && q==3)
		 {
		 printf("\n");
		 }





				 }

	  
					}


	getch();

	}

⌨️ 快捷键说明

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