La recherche de 8x8 (ou nxn) transformée en Cosinus Discrète (DCT)/IDCT Pseudo-Code
J'ai été à la recherche Google pour un certain temps maintenant de trouver le pseudo-code d'un décemment efficace 8x8 (ou nxn) DCT algorithme, et je ne trouve rien!
J'ai mis en place l'approche naïve, et il a fallu beaucoup trop de temps pour s'exécuter.
Si vous pouviez poster quelques pseudo-code de référence ou un bon livre/document/site web, qui pourrait être utile.
C ou C++ exemples serait encore mieux!
- C'est bizarre, un assez naïfs approche fonctionne très vite ici, combien de temps est "trop long"?
- J'ai été le traitement d'une image 512x512 avec 3 canaux, et elle a été prise quelques minutes avant que je l'ai éteint. J'ai peut-être mis en œuvre de manière incorrecte ou s'est coincé dans une boucle infinie en quelque sorte. Permettez-moi d'essayer de nouveau.
- J'ai eu précalculées le cosinus tables de cours, mais d'autres que c'était juste l'approche naïve de le faire exactement comme la définition l'indique. Mais même avec ceux de cosinus, il ne devrait pas prendre longtemps.
- Êtes-vous à l'aide de la divisibilité? @harold
- Je ne sais pas, pour être honnête, je ne suis pas un expert sur les DCT - je suis l'aide de deux boucles imbriquées les deux allant de 0 à 8, au lieu de le faire d'abord dans une dimension, puis dans l'autre, c'est que ce que cela signifie?
- Oui. Pourriez-vous poster votre code source? Je suis en train de faire quelques stéganographie, et j'ai besoin d'un simple dct et idct de cacher des informations dans l'espace. @harold
Vous devez vous connecter pour publier un commentaire.
Comme demandé dans les commentaires, la source (légèrement averti, il est en C#, mais la différence avec le C++ doit être minime, et oui je sais que le code est boiteux):
Boucle principale (A = résultat, B = entrée):
Soutien trucs:
edit: je l'ai chronométré - 512 par 512 pixels (un seul canal), il prend une demi-seconde. Bien sûr, c'est lent, mais nulle part près de "pour toujours".
FFTW a une source efficace de la mise en œuvre