Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. typedef struct {
  6.      unsigned char czp[3];
  7. } pixel;
  8.  
  9. typedef struct {
  10.      int sirina;
  11.      int visina;
  12.      pixel *podaci;
  13. } slika;
  14.  
  15.  
  16. int main (int argc, char *argv[]) {
  17.     int blok = atoi(argv[2]);
  18.     char* datoteka = argv[1];
  19.     char* datotekaizlaz = argv[3];
  20.  
  21.     FILE *ulaz;
  22.  
  23.     slika *ulazslika;
  24.  
  25.     int sirina = 0;
  26.     int visina = 0;
  27.     int maxvrijednost = 0;
  28.  
  29.     int i = 0;
  30.     int j = 0;
  31.     int k = 0;
  32.     int komentar = 0;
  33.  
  34.     int vrijednost = 0;
  35.     //char datoteka[] = "lenna.ppm";
  36.  
  37.     unsigned char slovo;
  38.     ulaz = fopen(datoteka, "rb");
  39.  
  40.     float Ktablica1[8][8] = { {16, 11, 10, 16, 24, 40, 51, 61},
  41.                        {12, 12, 14, 19, 26, 58, 60, 55},
  42.                        {14, 13, 16, 24, 40, 57, 69, 56},
  43.                        {14, 17, 22, 29, 51, 87, 80, 62},
  44.                        {18, 22, 37, 56, 68, 109, 103, 77},
  45.                        {24, 35, 55, 64, 81, 104, 113, 92},
  46.                        {49, 64, 78, 87, 103, 121, 120, 101},
  47.                        {72, 92, 95, 98, 112, 100, 103, 99}};
  48.  
  49.     float Ktablica2[8][8] = { {17, 18, 24, 47, 99, 99, 99, 99},
  50.                        {18, 21, 26, 66, 99, 99, 99, 99},
  51.                        {24, 26, 56, 99, 99, 99, 99, 99},
  52.                        {47, 66, 99, 99, 99, 99, 99, 99},
  53.                        {99, 99, 99, 99, 99, 99, 99, 99},
  54.                        {99, 99, 99, 99, 99, 99, 99, 99},
  55.                        {99, 99, 99, 99, 99, 99, 99, 99},
  56.                        {99, 99, 99, 99, 99, 99, 99, 99}};
  57.  
  58.  
  59.     if (ulaz == NULL) {
  60.         printf("Datoteka nije uspjeno otvorena\n");
  61.     }
  62.     else {
  63.         printf("Datoteka otvorena\n");
  64.     }
  65.     slovo = getc(ulaz);
  66.     komentar = 0;
  67.     while (slovo == '#') {
  68.         while (getc(ulaz) != '\n');
  69.         slovo = getc(ulaz);
  70.         komentar++;
  71.     }
  72.     if (komentar != 0) {
  73.         ungetc(slovo, ulaz);
  74.     }
  75.     if (slovo !='P' && (slovo = getc(ulaz)) != '6')
  76.         printf("Datoteka nije P6\n");
  77.     else {
  78.         printf("Datoteka je P6\n");
  79.     }
  80.  
  81.     slovo = getc(ulaz);
  82.     slovo = getc(ulaz);
  83.     while (slovo == '\n' && slovo == '\t' && slovo == ' ' && slovo == '\r'){
  84.         slovo = getc(ulaz);
  85.     }
  86.     komentar = 0;
  87.     while (slovo == '#') {
  88.  
  89.         while (getc(ulaz) != '\n');
  90.         slovo = getc(ulaz);
  91.         komentar++;
  92.     }
  93.     if (komentar != 0) {
  94.  
  95.         ungetc(slovo, ulaz);
  96.     }
  97.  
  98.     fscanf(ulaz, "%d %d", &visina, &sirina);
  99.     printf("%d %d\n", visina, sirina);
  100.     while (slovo == '\n' && slovo == '\t' && slovo == ' ' && slovo == '\r'){
  101.         slovo = getc(ulaz);
  102.     }
  103.     while (slovo == '#') {
  104.         while (getc(ulaz) != '\n');
  105.         slovo = getc(ulaz);
  106.     }
  107.  
  108.     fscanf(ulaz, "%d", &maxvrijednost);
  109.     printf("%d \n", maxvrijednost);
  110.  
  111.     while (slovo == '\n' && slovo == '\t' && slovo == ' ' && slovo == '\r'){
  112.         slovo = getc(ulaz);
  113.     }
  114.     while (slovo == '#') {
  115.         while (getc(ulaz) != '\n');
  116.         slovo = getc(ulaz);
  117.     }
  118.  
  119.  
  120.     int crv[8][8]={0};
  121.     int zel[8][8]={0};
  122.     int pla[8][8]={0};
  123.     float Y[8][8]={0};
  124.     float Cb[8][8]={0};
  125.     float Cr[8][8]={0};
  126.  
  127.     slovo = getc(ulaz);
  128.     vrijednost = (int)slovo;
  129.     printf("prije petlje %d\n", vrijednost);
  130.  
  131.  
  132.     ulazslika = (slika *)malloc(sizeof(slika)); // alociraj memoriju
  133.  
  134.     ulazslika->visina=(visina);
  135.     ulazslika->sirina=(sirina);
  136.     printf("visina i sirina %d %d\n", ulazslika->visina, ulazslika->sirina);
  137.  
  138.     ulazslika->podaci = (pixel *)malloc(visina*sirina*sizeof(pixel));
  139.     fread(ulazslika->podaci, 3*visina, sirina, ulaz);
  140.  
  141.     int vertikala = 0;
  142.     int pomak = 0;
  143.     pomak = (blok/64);
  144.     vertikala = 512*8*pomak;
  145.     int red = 0;
  146.     i = 0;
  147.     j = 0;
  148.     k = 0;
  149.  
  150.     while(i<8){
  151.         for(j=(blok%64)*8+red+vertikala;j<(blok%64)*8+red+vertikala+8;j++){
  152.             //printf("unutra sam\n");
  153.             crv[i][k]=ulazslika->podaci[j].czp[0];
  154.             zel[i][k]=ulazslika->podaci[j].czp[1];
  155.             pla[i][k]=ulazslika->podaci[j].czp[2];
  156.             Y[i][k] = 0.299*crv[i][k] + 0.587*zel[i][k] + 0.114*pla[i][k] -128;
  157.             Cb[i][k] = -0.1687*crv[i][k] - 0.3313*zel[i][k] + 0.5*pla[i][k];
  158.             Cr[i][k] =  0.5*crv[i][k] - 0.4187*zel[i][k] - 0.0813*pla[i][k];
  159.             //printf("%d ", crv[i][k]);
  160.             k++;
  161.         }
  162.         i++;
  163.         red = red+512;
  164.         k=0;
  165.     }
  166.  
  167.     printf("Crvena\n");
  168.     for(i=0;i<8;i++){
  169.             for(j=0;j<8;j++){
  170.                 printf("%d  ", crv[i][j]);
  171.             }
  172.             printf("\n");
  173.     }
  174.     printf("\n");
  175.  
  176.     printf("Zelena\n");
  177.     for(i=0;i<8;i++){
  178.             for(j=0;j<8;j++){
  179.                 printf("%d  ", zel[i][j]);
  180.             }
  181.             printf("\n");
  182.     }
  183.     printf("\n");
  184.  
  185.     printf("Plava\n");
  186.     for(i=0;i<8;i++){
  187.             for(j=0;j<8;j++){
  188.                 printf("%d  ", pla[i][j]);
  189.             }
  190.             printf("\n");
  191.     }
  192.     printf("\n");
  193.  
  194.     printf("Y\n");
  195.     for(i=0;i<8;i++){
  196.             for(j=0;j<8;j++){
  197.                 printf("%3.2f  ", Y[i][j]);
  198.             }
  199.             printf("\n");
  200.     }
  201.     printf("\n");
  202.  
  203.     printf("Cb\n");
  204.     for(i=0;i<8;i++){
  205.             for(j=0;j<8;j++){
  206.                 printf("%3.2f  ", Cb[i][j]);
  207.             }
  208.             printf("\n");
  209.     }
  210.     printf("\n");
  211.  
  212.     printf("Cr\n");
  213.     for(i=0;i<8;i++){
  214.             for(j=0;j<8;j++){
  215.                 printf("%3.2f  ", Cr[i][j]);
  216.             }
  217.             printf("\n");
  218.     }
  219.     printf("\n");
  220.  
  221.     printf("DCT matrice \n");
  222.  
  223.     float DCTY[8][8]={0};
  224.     float DCTCB[8][8]={0};
  225.     float DCTCR[8][8]={0};
  226.     int l;
  227.     double dct1,dct2,dct3, cu, suma1,suma2,suma3,cv;
  228.     float sivazona1,sivazona2,sivazona3;
  229.     for(i=0;i<8;++i) {
  230.         for(j=0;j<8;++j){
  231.             if (i==0){
  232.                 cu = 1.0/sqrt(2.0);
  233.             }
  234.             else {
  235.                 cu = 1.0;
  236.             }
  237.             if (j == 0) {
  238.                 cv=1.0/sqrt(2.0);
  239.             }
  240.             else {
  241.                 cv=1.0;
  242.             }
  243.             suma1 = 0;
  244.             suma2 = 0;
  245.             suma3 = 0;
  246.             for(k=0;k<8;k++){
  247.                 for(l=0;l<8;l++){
  248.                     sivazona1=Y[k][l];
  249.                     sivazona2=Cb[k][l];
  250.                     sivazona3=Cr[k][l];
  251.                     dct1 = sivazona1 * cos((2 * k + 1) * i * M_PI / 16.0) * cos((2 * l + 1) * j * M_PI / 16.0);
  252.                     dct2 = sivazona2 * cos((2 * k + 1) * i * M_PI / 16.0) * cos((2 * l + 1) * j * M_PI / 16.0);
  253.                     dct3 = sivazona3 * cos((2 * k + 1) * i * M_PI / 16.0) * cos((2 * l + 1) * j * M_PI / 16.0);
  254.                     suma1 += dct1;
  255.                     suma2 += dct2;
  256.                     suma3 += dct3;
  257.                 }
  258.             }
  259.             DCTY[i][j]=0.25*cu*cv*suma1;
  260.             DCTCB[i][j]=0.25*cu*cv*suma2;
  261.             DCTCR[i][j]=0.25*cu*cv*suma3;
  262.         }
  263.     }
  264.     printf("DCTY\n");
  265.     for(i=0;i<8;i++){
  266.             for(j=0;j<8;j++){
  267.                 printf("%3.2f  ", DCTY[i][j]);
  268.             }
  269.             printf("\n");
  270.     }
  271.     printf("\n");
  272.  
  273.     printf("DCTCB\n");
  274.     for(i=0;i<8;i++){
  275.             for(j=0;j<8;j++){
  276.                 printf("%3.2f  ", DCTCB[i][j]);
  277.             }
  278.             printf("\n");
  279.     }
  280.     printf("\n");
  281.  
  282.     printf("DCTCR\n");
  283.     for(i=0;i<8;i++){
  284.             for(j=0;j<8;j++){
  285.                 printf("%3.2f  ", DCTCR[i][j]);
  286.             }
  287.             printf("\n");
  288.     }
  289.     printf("\n");
  290.  
  291.  
  292.     int KY[8][8]={0};
  293.     int KCb[8][8]={0};
  294.     int KCr[8][8]={0};
  295.     float KYP[8][8]={0};
  296.  
  297.     for (i=0; i<8; i++) {
  298.         for(j=0; j<8; j++) {
  299.             KY[i][j] = (round)(DCTY[i][j]/Ktablica1[i][j]);
  300.             KCb[i][j] = (round)(DCTCB[i][j]/Ktablica2[i][j]);
  301.             KCr[i][j] = (round)(DCTCR[i][j]/Ktablica2[i][j]);
  302.         }
  303.     }
  304.  
  305.     FILE *izlaz;
  306.  
  307.     izlaz = fopen(datotekaizlaz, "w+");
  308.  
  309.     printf("KY\n");
  310.     for(i=0;i<8;i++){
  311.             for(j=0;j<8;j++){
  312.                 printf("%d  ", KY[i][j]);
  313.                 fprintf(izlaz, "%d ", KY[i][j]);
  314.             }
  315.             fprintf(izlaz, "\n");
  316.             printf("\n");
  317.     }
  318.     printf("\n");
  319.     fprintf(izlaz, "%s ", "\n");
  320.  
  321.     printf("KCb\n");
  322.     for(i=0;i<8;i++){
  323.             for(j=0;j<8;j++){
  324.                 printf("%d  ", KCb[i][j]);
  325.                 fprintf(izlaz, "%d ", KCb[i][j]);
  326.             }
  327.             fprintf(izlaz, "\n");
  328.  
  329.             printf("\n");
  330.     }
  331.     printf("\n");
  332.     fprintf(izlaz, "%s ", "\n");
  333.  
  334.     printf("KCr\n");
  335.     for(i=0;i<8;i++){
  336.             for(j=0;j<8;j++){
  337.                 printf("%d  ", KCr[i][j]);
  338.                 fprintf(izlaz, "%d ", KCr[i][j]);
  339.             }
  340.             fprintf(izlaz, "\n");
  341.             printf("\n");
  342.     }
  343.     printf("\n");
  344.     fprintf(izlaz, "%s ", "\n");
  345.  
  346.     fclose(ulaz);
  347.     fclose(izlaz);
  348.     return 0;
  349. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement