2017-07-27 16 views
1

Je pense utiliser le codage Huffman pour créer une application qui prend des photos directement à partir de l'appareil photo de l'iPhone et le compresse. Serait-il possible pour le matériel de gérer le calcul complexe et de construire l'arbre? En d'autres termes, est-ce faisable?Utilisation du codage Huffman pour compresser les images prises par l'appareil photo de l'iPhone

Merci

+0

Les iPhones deviennent de plus en plus puissants, ce qui dépend de la taille des images que vous recherchez et de la vitesse de base que vous définissez. Jetez un oeil à cette implémentation et vous pouvez essayer de profiler la vitesse par vous-même: [raywenderlich/swift-algorithm-club] (https://github.com/raywenderlich/swift-algorithm-club/tree/master/Huffman%20Coding) –

Répondre

4

Si vous voulez dire les fichiers d'image (comme jpg, png, etc.), alors vous devriez savoir qu'ils sont déjà compressés avec des algorithmes spécifiques aux images. Les fichiers résultants ne comprimeraient pas beaucoup, voire pas du tout.

Si vous voulez dire que vous allez prendre les données de pixels bruts UIImage et les compresser, vous pouvez le faire. Je suis sûr que l'iPhone pourrait le supporter.

Si c'est pour un projet amusant, alors allez-y. Si vous voulez que ce soit une application utile et utilisé, vous aurez des défis

  1. Il est très peu probable que Huffman sera meilleure que la compression d'image standard utilisée en JPG, PNG, etc.

  2. Apple a déjà vu un besoin pour une meilleure compression et mis en œuvre HEIF dans iOS 11. WWDC Video about HEIF

  3. Ils ont fait beaucoup de travail dans le système d'exploitation et l'application Photos pour vous assurer d'utiliser HEIF localement, mais si vous partagez la photo il le transforme en quelque chose que n'importe qui pourrait utiliser (par exemple JPG)

  4. Toutes les compressions qu'ils implémentent utilisent l'accélération matérielle. Vous pouvez le faire aussi, mais le code est beaucoup plus dur que Huffman.

Ainsi, pour l'apprentissage et le plaisir, il est un bon projet - il pourrait être plus facile à faire comme une application Mac à la place, mais pour quelque chose destiné à être vrai, il serait extrêmement difficile de surmonter les problèmes ci-dessus .

+0

Merci @Lou. Votre réponse est très utile – inzo

0

Il y a 2 parties, codage et décodage. Le processus de codage implique la construction d'une arborescence ou d'une représentation basée sur une table d'un arbre. Le processus de décodage couvre la lecture des octets d'encodage de Huff et l'annulation d'un delta. Il serait probablement difficile d'obtenir beaucoup d'avantage de vitesse dans l'encodage par rapport au PNG, mais pour décoder une accélération très efficace peut être vu en déplaçant la logique de décodage au GPU avec Metal. Vous pouvez jeter un oeil au code source complet d'un exemple qui fait juste cela pour les images en niveaux de gris sur github Metal Huffman.