Blog do GirinoVey

De GirinoWiki

< Retorna ao Blog do GirinoVey

Ver (anteriores 10) (próximos 10) (20 | 50 | 100 | 250 | 500).
2007 August 07 17:22:58 BRT
Posted By: GirinoVey
GirinoVey's Blog
Permalink
Adicionar este post no StumbleUpon Adicionar este post no Linkk

implementação da transformada discreta de cosseno em java

Mais uma busca que caia no meu site. Provavelmente por causa do artigo Transformada discreta de cosseno, e dos diversos artigos com código java. Para não deixar o público na mão, resolvi implementar :)

Quem quiser mais detalhes sobre o que é isso e pra que serve leiam o artigo:

public class dct {
 
   /**
    * Calcula a DCT (Transformada Discreta de Cosseno) de uma matriz 
    * quadrada NxN.
    * Este código não é otimizado, para possíveis otimizações, 
    * definições e detalhes, veja
    * http://www.girino.org/mediawiki/index.php/Transformada_discreta_de_cosseno
    *
    * @param img a matriz (imagem) a ser codificada.
    * @param size o tamanho da matriz.
    * @return a matriz transformada.
    **/
   public static double[][] dct(double[][] img, int size) {
      double[][] ret = new double[size][size];
      for (int i = 0; i < size; i++) {
         for (int j = 0; j < size; j++) {
            ret[i][j] = 0;
            for (int x = 0; x < size; x++) {
               for (int y = 0; y < size; y++) {
                  double tmp = img[x][y];
                  tmp *= Math.cos((2*y + 1) * j * Math.PI/(2*size));
                  tmp *= Math.cos((2*x + 1) * i * Math.PI/(2*size));
                  ret[i][j] += tmp;
               }
            }
            ret[i][j] *= 1.0/Math.sqrt(2*size);
            ret[i][j] *= i==0?1.0/Math.sqrt(2):1.0;
            ret[i][j] *= j==0?1.0/Math.sqrt(2):1.0;
         }
      }
      return ret;
   }
 
   /** Matriz de exemplo usada no método main() **/
   public static double[][] test = {
      {1. ,     19. ,    37. ,    55. ,    73. ,    91. ,    109. ,   127.},
      {19. ,    37. ,    55. ,    73. ,    91. ,    109. ,   127. ,   145.},
      {37. ,    55. ,    73. ,    91. ,    109. ,   127. ,   145. ,   163.},
      {55. ,    73. ,    91. ,    109. ,   127. ,   145. ,   163. ,   181.},
      {73. ,    91. ,    109. ,   127. ,   145. ,   163. ,   181. ,   199.},
      {91. ,    109. ,   127. ,   145. ,   163. ,   181. ,   199. ,   217.},
      {109. ,   127. ,   145. ,   163. ,   181. ,   199. ,   217. ,   235.},
      {127. ,   145. ,   163. ,   181. ,   199. ,   217. ,   235. ,   253.}
   };
 
   /** Exemplo. Executa o DCT na matriz de exemplo e imprime o resultado **/
   public static void main(String[] args) {
      double[][] tmp = dct(test, 8);
      for (int i = 0; i < 8; i ++) {
         for (int j = 0; j < 8; j++) {
            System.out.print(tmp[i][j]);
            System.out.print(", ");
         }
         System.out.print("\n");
      }
   }
}


--GirinoVey 17:32, 7 Agosto 2007 (BRT)

Comentários

ah, cruz credo!

--Lady--201.62.217.246 13:34, 9 Agosto 2007 (BRT)

Ver (anteriores 10) (próximos 10) (20 | 50 | 100 | 250 | 500).

Vistas
Ferramentas pessoais
Social Blogging
  • StumbleUpon
  • Adicionar aos Favoritos BlogBlogs
  • Adicionar esta página no Linkk
  • Add to Technorati Favorites
patrocinadores
Espaço comercial
Compare Produtos, Lojas e Preços