Guião laboratorial n.º 1 – exercício 19

“Pretende-se reduzir uma imagem a metade do seu tamanho original. A imagem inicial consiste num tabela bidimensional com M×M valores inteiros onde cada pixel (ponto na imagem) pode tomar um valor inteiro entre 0 e 9 (tonalidades de cinza). A imagem reduzida é armazenada num tabela bidimensional com M/2×M/2 valores reais onde cada elemento (pixel) corresponde á média dos 4 elementos que substitui. Para melhor compreensão do enunciado veja o exemplo apresentado de seguida (neste caso, para M=8):

exercicio19

Escreva uma função em C que efetue esta operação. A função recebe 3 argumentos: endereço inicial da matriz original, endereço inicial da matriz reduzida e o valor M.”

#include <stdio.h>
#define TAM 8

void reduzir_i(float *o, float *r, int d)
{
  int i,j, k,aux;
  float *p, *s, *q, soma=0, media=0;
  p=o;
  q=r;
  //imprimir a matriz original
  printf("matriz original: \n");
  for(i=0; i<d; i++){
    for(j=0; j<d; j++, p++){
      printf("%.f ", *p);
    }
    printf("\n");
  }
p=o;
s=o+d;
printf("\n");
  for(i=0; i<d; i=i+2, p=p+d, s=s+d){
    for(j=0; j<d; j++, p++, s++){
      for(k=0 ; k<j+1; k=k+d){
        //printf("%.f-%.f ", *p,*s);
        soma=soma+*p+*s;
      }

      if(aux<1){
      aux++;
      }else{
      media=soma/4;
      *q=media;
      //printf("%2.f \n", *q);
      aux=0;
      soma=0;
      media=0;
      q++;
      }
    }
  }
   //imprimir a matriz reduzida
   printf("\n");
  q=r;
  printf("matriz reduzida: \n");
  for(i=0; i<d/2; i++){
    for(j=0; j<d/2; j++, q++){
      printf("%.1f ", *q);
    }
    printf("\n");
  }


}

int main()
{
 float matO[TAM][TAM]={{0,4,9,3,6,7,2,9},
                       {9,4,7,8,3,4,7,2},
                       {5,1,2,6,3,8,6,2},
                       {7,1,4,8,7,2,0,7},
                       {4,9,3,5,2,1,5,7},
                       {5,3,4,7,8,9,1,0},
                       {2,3,5,6,7,9,2,4},
                       {2,3,4,5,6,7,8,9}};

float matR[TAM/2][TAM/2]={{0,0,0,0},
                          {0,0,0,0},
                          {0,0,0,0},
                          {0,0,0,0}};
reduzir_i(matO, matR, TAM);
 return 0;
}
Tags :