QuickTime 7 : export du son impossible

August 23rd, 2011

Avec ma version de QuickTime 7 (plus exactement la 7.6.6), j’ai remarqué que lorsque je voulais exporter une vidéo contenant une piste audio encodée en MPEG couche 3 (MP3), celle-ci ne s’exportait pas.

Finalement, après quelques recherches sur internet, j’ai appris que le responsable est le plugin XviD_Codec 1.0 alpha.component.

Pour le supprimer, il faut aller dans /Bibliothèque/QuickTime/ et supprimer le fichier XviD_Codec 1.0 alpha.component.

Ensuite, redémarrer QuickTime 7 et voilà ! Problème résolu !

iPhone 3GS et iOS 4.3.1 : jailbreak

June 9th, 2011

Dans le cadre d’un projet de développement pour iPhone que j’ai initié dans l’école où j’enseigne, j’ai voulu installer sur mon iPhone l’application maison que nous avions développé.

Pendant le développement, j’avais entamé des démarches auprès d’Apple pour bénéficier de leur programme éducation, censé nous permettre d’obtenir leurs outils de développement (Xcode 4) mais surtout de déploiement. Après 6 semaines d’échanges de courriels, Apple s’obstine et refuse de reconnaître notre école.

Pour ne pas abandonner tout le travail de développement qui a déjà été fait, j’ai donc opté pour la seule solution restante à mes yeux : Jailbreaker mon iPhone dans le but d’y installer notre application maison sans subir les contraintes d’Apple et développer notre application avec Xcode 3.

Jailbreaker l’iPhone

Je possède un iPhone 3GS avec l’iOS 4.3.1. J’ai du faire de nombreuses tentatives pour trouver exactement les bons logiciels et la bonne procédure. Mais j’y suis finalement arrivé.

J’ai commencé par cette page : http://www.limera1n.cc/2011/04/redsn0w-096rc9-download-untethered-431.html

Mais attention : contrairement à ce qu’indique le titre, il faut télécharger la version 096rc12 de redsn0w (le lien fourni dans l’article est correct), puis suivre les même étapes que pour la version 096rc9 : http://www.limera1n.cc/2011/04/jailbreak-431-untethered-redsn0w-096rc9.html

Par contre, la procédure ne mentionne pas une étape cruciale : déterminer si l’iPhone possède une nouvelle ou une ancienne bootRom.

Personnellement, j’ai une ancienne bootRom. Le site http://www.iphone4.fr/comment-connaitre-mon-iboot-sur-mac-os-x/ indique comment le déterminer.

À l’issue de cette procédure, l’iPhone est jailbreaké et il est donc possible d’y installer des applications inofficielles.

Toutefois, reste un problème : faire que XCode accepte de transférer une application sans signature conforme sur l’iPhone.

Déployer une application sur l’iPhone

Pour y arriver, j’ai suivi l’excellente procédure décrite sur cette page : http://www.alexwhittemore.com/?p=398. Comme cette procédure est en anglais et qu’elle utilise des outils difficiles d’accès (vi), je reproduis ici une version légèrement adaptée de cette procédure.

Première étape : obtenir une identité signée

Cette étape ne doit être faite qu’une fois pour toutes. Xcode doit être fermé. L’iPhone ne doit pas être branché à l’ordinateur.

Normalement, c’est Apple qui nous fourni une identité signée, mais plus tard dans la procédure, nous allons supprimer le contrôle de signature effectué par Xcode. Une identité auto-signée est donc suffisante. On l’obtient ainsi :

  1. Ouvrir l’application Trousseau d’accès (Applications > Utilitaires > Troussau d'accès)
  2. Créer un nouveau certificat (Trousseau d'accès > Assistant de certification > Créer un certificat...)
  3. Mettre comme nom iPhone Developer. C’est très important d’orthographier correctement ce nom. Choisir une Racine auto-signée et comme type de certificat, choisir Signature de code. Cocher la case Me laisser ignorer les réglages par défaut. Cliquer sur Continuer.

    Valider l’avertissement en cliquant sur Continuer.
  4. Mettre une durée de 3650 jours et cliquer sur Continuer.
  5. Laisser les champs vides, en particulier l’adresse électronique ! Ne pas toucher au champ Nom. Cliquer sur Continuer.
  6. Valider toutes les étapes suivantes, jusqu’à la dernière.

    Le message indiquant que ce certificat n’est pas approuvé est normal.

Deuxième étape : AppSync sur l’iPhone

Il faut ensuite installer l’application AppSync sur l’iPhone jailbreaké. Pour ce faire, suivre les étapes suivantes :

  1. Ouvrir Cydia, choisir l’onglet Gérer. Cliquer sur Sources, puis sur Modifier et enfin Ajouter.
  2. Taper l’adresse http://cydia.hackulo.us. Un avertissement concernant le piratage vous sera affiché. En l’occurence, nous n’allons pas faire de piratage.
  3. Revenir au menu principal de Cydia, choisir l’onglet Recherche. Taper AppSync et installer AppSync for 4.0+.
  4. Certains disent qu’il faut redémarrer l’iPhone. Je n’ai pas eu à le faire.

Troisième étape : modifier Xcode

Là, on commence le gros du boulot : modifier Xcode pour qu’il accepte de transférer un projet iPhone sur notre iPhone jailbreaké.
Cette procédure a été testée avec Xcode v3.2.6.

  1. Démarrer le Terminal. Taper ceci :
  2. cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
    sudo cp SDKSettings.plist SDKSettings.plist.orig
    sudo pico SDKSettings.plist

    Chercher la clé CODE_SIGNING_REQUIRED et changer sa valeur de YES à NO.
    Chercher la clé ENTITLEMENTS_REQUIRED et changer sa valeur de YES à NO.
    Rappel : avec pico, une recherche se fait avec CTRL+W.

  3. Remonter au niveau de la plateforme :
    cd /Developer/Platforms/iPhoneOS.platform/
    sudo cp Info.plist Info.plist.orig
    sudo pico Info.plist

    Cherche la clé CODE_SIGN_CONTEXT_CLASS, qui apparaît deux fois et remplacer chaque fois XCiPhoneOSCodeSignContext par XCCodeSignContext.

  4. Maintenant, il faut modifier le binaire de Xcode !
    cd ~/Desktop
    pico script

    Copier le code suivant dans le script que l’on vient de créer :

    #!/bin/bash
    cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
    dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
    printf "\xc3\x26\x00\x00" >> working
    /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
    /bin/mv working iPhoneOS\ Build\ System\ Support
    chmod a+x iPhoneOS\ Build\ System\ Support

    Sauver et quitter pico. Reste à changer les droits d’accès sur ce nouveau script et à l’exécuter :

    chmode 777 script
    ./script

    Si tout va bien, vous un affichage similaire à ceci apparaîtra :

    231+1 records in
    231+1 records out
    115904 bytes transferred in 0.024132 secs (4802915 bytes/sec)

    Avec cette étape, on a indiqué à Xcode qu’il n’est pas nécessaire de signer le code. Maintenant, il faut lui dire de ne pas signer le code.

  5. Ouvrir un projet Xcode. Dans Xcode, choisir Project > Edit Project Settings. Ensuite, choisir l’onglet Build.
    Faire une recherche des propriétés Code Signing et mettre Don't Code Sign en regard des propriétés Code Signing Identity et Any iOS.
  6. Ensuite, dire à Xcode qu’il faut quand-même signer le code ! On va faire ça avec un script python.
    mkdir /Developer/iphoneentitlements431
    cd /Developer/iphoneentitlements431
    pico gen_entitlements.py

    Coller dans pico le code python suivant (que j’ai obtenu sur le site d’Alex Whittemore) :

    #!/usr/bin/env python
    
    import sys
    import struct
    
    if len(sys.argv) != 3:
    	print "Usage: %s appname dest_file.xcent" % sys.argv[0]
    	sys.exit(-1)
    
    APPNAME = sys.argv[1]
    DEST = sys.argv[2]
    
    if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
    	print "Dest must be .xml (for ldid) or .xcent (for codesign)"
    	sys.exit(-1)
    
    entitlements = """
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>application-identifier</key>
        <string>%s</string>
        <key>get-task-allow</key>
        <true/>
    </dict>
    </plist>
    """ % APPNAME
    
    f = open(DEST,'w')
    if DEST.endswith('.xcent'):
    	f.write("\xfa\xde\x71\x71")
    	f.write(struct.pack('>L', len(entitlements) + 8))
    f.write(entitlements)
    f.close()

    Sauver et quitter pico. Reste à changer les droit sur ce script python.

    chmod 777 gen_entitlements.py
  7. Le script étant fait, il faudra que Xcode l’utilise. Mais pour l’instant, il faut connecter l’iPhone à l’ordinateur. Au moment de le connecter, Xcode Organizer averti qu’il n’est pas capable d’identifier l’appareil. J’accepte qu’il le scanne. Une processus se met en route. Le laisser terminer. À l’issue de la procédure, une ampoule est verte à côté de l’iPhone.
  8. Cette dernière étape doit être réalisée pour chaque nouveau projet Xcode. Aller dans le menu Project > New Build Phase > New Run Script Build Phase. Coller le script suivant :
    export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
    /Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
    codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
    fi

    Il n’y a rien d’autre à faire !

Problèmes

Au cours de l’utilisation, vous rencontrerez certainement quelques problèmes, plus particulièrement lorsque depuis Xcode, vous allez exécuter votre projet sur l’iPhone.

The program being debugged is not being run

  1. Double cliquer dans l’arborescence du projet sur Targets > nom du projetRun Script.

    Mettre le curseur dans la fenêtre contenant le code, fermer la fenêtre.
  2. Relancer un Build and Run

The host is no longer paired with the device

Ce problème provoque un reboot de l’iPhone ! Il suffit d’attendre que l’iPhone soit de nouveau disponible.

Progressif, entrelacé

February 2nd, 2011

Lorsque j’avais acheté ma caméra Canon HV30i en été 2008, un des critères que j’avais considéré comme déterminant était la présence d’un mode 25p, c’est-à-dire la possibilité de filmer en haute définition à 25 images/secondes en mode progressif.

Pendant plus de 2 ans, faute de temps, je n’avais pas exploité cette possibilité, me contentant de filmer en entrelacé. Mais il y a quelques mois, j’ai enfin pris le temps d’approfondir le sujet et de mettre en place dans Final Cut Pro les réglages nécessaires pour gérer ce fameux mode 25p.

Je ne le regrette pas !

Progressif, entrelacé, kesako ?

Avant d’aller plus en avant, il faut tout d’abord bien comprendre ce qu’est le mode entrelacé et en quoi il diffère du mode progressif.

Revenons donc aux principes de base de l’animation : pour reproduire une illusion de mouvement, celui-ci doit être décomposé en une succession d’images fixes. Ces images fixes seront ensuite diffusées les unes après les autres à une vitesse suffisante pour que le cerveau ait l’illusion de mouvement.

Au moment de la restitution du mouvement, trois problèmes doivent être surmontés : la finesse de l’image (sa résolution), le scintillement, et la fréquence de restitution (le nombre de fois par seconde qu’une image différente est affichée)[1].

Finesse de l’image

C’est le niveau de détail (la résolution, ou encore la définition) de l’image. Plus la définition est faible, moins l’image comportera des détails. En informatique, on parle souvent de pixel pour identifier le plus petit élément constituant une image. La définition standard découpe l’image en 576 lignes de 768 pixels. La haute-définition découpe l’image, par exemple, en 1080 lignes de 1920 pixels (il y a d’autres formats considérés comme haute-définition).
1080 lignes 576 lignes 288 lignes

Le scintillement

Grâce à la persistance rétinienne, au moment où une image n’est plus affichée, l’œil continue de la percevoir encore quelques millisecondes.
Toutefois, si une nouvelle image n’est pas réaffichée après 10 à 25 millisecondes (cela dépend de l’intensité lumineuse de l’image), l’œil perçoit une baisse d’intensité lumineuse, qui débouche sur une sensation de scintillement.
Pour que ce scintillement disparaisse complètement, il faudrait qu’une image soit affichée 80 fois par seconde (80 Hz). Dans certaines conditions (pièce sombre), 40 Hz est acceptable.

La fréquence de restitution

C’est la vitesse de défilement des images. Aux débuts du cinéma, la fréquence minimale pour restituer une illusion de mouvement a été établie à 12 images par seconde. Dans le but de garantir un confort de vision acceptable, la fréquence de 16 images par seconde s’imposa comme un minimum. Actuellement, le cinéma traditionnel utilise une fréquence de 24 images par seconde (cette fréquence avait été choisie pour garantir une qualité sonore suffisante de la bande son). Bien qu’acceptable cette fréquence ne permet pas de reproduire les mouvements avec une fluidité parfaite. Pour y parvenir, il faudrait une fréquence d’au moins 50 images par seconde.

Résolution de ces problèmes au cinéma

Le cinéma restitue 24 images complètes par seconde. Pour éviter le scintillement, chaque image est projetée deux fois[2] [3]. Il y a donc chaque seconde 48 projections d’image, mais avec 24 images différentes.
La résolution de l’image dépend de la pellicule et de la qualité de la copie. Par exemple, une pellicule 35 mm peut reproduire une résolution de 1536 lignes de 2048 pixels[4].

Résolution de ces problèmes en télévision

L’arrivée de la télévision dans le milieu du XXe siècle change considérablement la façon de restituer une image et à fortiori le mouvement.

Contrairement au cinéma où l’image est affichée instantanément dans son intégralité, sur un écran à tube cathodique, l’image est produite par un faisceau d’électrons qui balaye la surface de l’écran afin d’en allumer certains points (les photophores). L’image est donc affichée point par point, par un mouvement rapide en Z du faisceau.

De plus, des contraintes techniques ont imposé que la vitesse de balayage de ce faisceau doive être synchronisée sur la fréquence du réseau électrique (contrainte technique de l’époque découlant de problèmes de parasitage par l’électronique[5] [6]. La fréquence du réseau électrique en Europe (50 Hz) impliquait donc 50 images par seconde. Toutefois, avec les techniques de l’époque (dans les années 30), il n’était pas possible d’afficher beaucoup plus que 200 lignes en 1/50e de seconde[7].

D’ailleurs, même s’il avait été possible de transmettre une image de plus de 400 lignes 50 fois par seconde, cela aurait été beaucoup trop gourmand en bande passante.

Un autre problème serait survenu lorsqu’une image complète était affichée ligne par ligne : avec les photophores de l’époque, le haut de l’image aurait commencé à s’estomper alors que le bas de l’image n’était pas encore affiché, ce qui aurait rendu le phénomène de scintillement inacceptable[8].

L’idée a donc été de découper une image (faite donc de plusieurs lignes) en deux demi-images (deux trames), constituée pour la première des lignes impaires de l’image complète et pour la deuxième des lignes paires. Cette solution résolvait plusieurs problèmes : la bande passante nécessaire était acceptable, la restitution du mouvement suffisante (25 images complètes par seconde), la fréquence de 50 Hz limitait la perception du scintillement et l’affichage de l’image complète en deux passages réduisait l’impact de la diminution d’intensité des photophores.

À noter que, bien que la plupart du temps, la première trame (demi-image) est constituée des lignes impaires (on parle également de trame supérieure, ou encore de UFF pour upper field first), certains formats (particulièrement le format DV) utilisent pour la première image les lignes paires (on parle également de trame inférieure ou encore de LFF pour lower field first).

Aux États-Unis (ainsi que dans certains autres pays), la fréquence du réseau électrique est de 60 hertz. Le faisceau d’électrons affiche donc 60 demies-images par seconde, soit 30 images complètes par seconde. Cette fréquence légèrement plus élevée atténue d’ailleurs encore d’avantage le phénomène de scintillement.

Lorsqu’une image complète est formée de deux demies-images, on parle d’un affichage entrelacé (interlaced en anglais). Si 50 demi-images sont affichées par seconde, on parle d’un format 50i. Si ce sont 60 demi-images qui sont affichées chaque seconde, on parle d’un format 60i.

Lorsqu’une image complète est formée d’une image pleine, on parle d’affichage progressif (progressive en anglais). Si 25 images complètes sont affichées chaque seconde, on parle d’un format 25p. Le format du cinéma traditionnel est donc noté 24p.

Pour en savoir plus, je recommande l’excellent site VSB, véritable mine d’informations.

Capture vidéo

À l’époque où les caméras vidéo se sont démocratisées, l’immense majorité des téléviseurs étaient à tube cathodique et n’étaient capable que de diffuser une image entrelacée. Les caméras se sont donc basées sur ce système pour la capture des images et le stockage sur cassettes vidéo.

Pour illustrer cela, prenons la séquence d’un train qui se déplace. Cette séquence présente 4 images, chacune d’une durée de 1/50e de seconde.

à 1/50e à 2/50e à 3/50e à 4/50e
Mouvement de base
capture 50i
capture 25p

Un avantage d’une capture 50i apparaît immédiatement : il y a plus d’images par secondes qu’en 25p, ce qui semble préférable lors d’un mouvement rapide. Par contre, c’est au détriment de la résolution verticale : ce sont bel et bien des demi-images et non pas des images complètes.

Montage non-linéaire

Quel que soit le mode (50i ou 25p), les logiciels de montage non-linéaire travaillent sur une base de temps de 25 images par secondes (en Europe), afin de manipuler des images complètes.

En 50i, une image complète est donc formée de deux demi-images qui ont été filmées à un moment différent (20 ms les sépare). Un objet en mouvement sera alors à une certaine position sur la première demi-image, et un peu plus loin sur la deuxième. Lorsque ces deux demi-images sont affichées simultanément, il en résulte un effet de peigne bien visible sur l’exemple ci-dessous.

à 1/25e à 2/25e
50i
25p

Note : Souvent, en 50i, cet effet n’est pas visible dans le logiciel de montage du simple fait que l’image n’est pas affichée à la bonne échelle. Elle est en effet souvent réduite en taille afin d’avoir sur le même écran l’image et les autres fenêtres graphiques du logiciel de montage (par exemple la ligne de temps et les chutiers). Pour que l’effet soit observable, il est donc important que l’image soit affichée à 100% de sa taille.

Image filmée en 50i, mais affichée à 40% : l’effet de peigne est invisible.
Image filmée en 50i, affichée à 100% : l’effet de peigne est visible.
Image filmée en 25p, affichée à 40%
Image filmée en 25p, affichée à 100%

Cet effet de peigne est révélateur du problème des images entrelacées : une image pleine est faite de demi-images. Les effets de montage (ralenti, fondu, floutage, etc.) devront donc être calculés sur des demi-images. La compression est également faite sur des demi-images.

Cela complique les choses, mais reste nécessaire si le film obtenu a pour but d’être diffusé sur un appareil reproduisant uniquement des images entrelacées (sur de tels appareils, l’effet de peigne est d’ailleurs inexistant).

Par contre, si le film peut être diffusé sur un support reproduisant des images de façon progressive, alors toute la complexité amenée par l’entrelacement disparaît.

En l’occurrence, depuis quelques années, une grande partie des supports de diffusion de films travaillent en mode progressif, en particulier  les écrans d’ordinateur et les téléviseurs modernes (plasma, LCD, etc). D’ailleurs, la diffusion d’un film entrelacé sur un appareil progressif est médiocre, car l’effet de peigne est flagrant (à moins que le dispositif soit capable de désentrelacer la source).

Car pour éviter l’effet de peigne à partir d’une image entrelacée, il faut la désentrelacer. Selon la performance du logiciel utilisé, ce désentrelacement sera de plus ou moins bonne qualité, le but étant d’essayer tant bien que mal de reconstituer des images complètes à partir de deux demi-images décalées dans le temps.

Différence de qualité d’image

J’ai déjà mentionné plus haut que lors du traitement des images, il est plus facile de travailler sur des images entières que sur des demi-images entre autres pour les effets spéciaux.

Mais, en terme de qualité d’image, y a-t-il une différence ? Comparons :

image extraite d’une vidéo entrelacée
image extraite d’une vidéo progressive

Bien que la différence soit minime, on perçoit tout de même une meilleure finesse verticale avec une image progressive. Le visage du personnage est révélateur :

détail d’une image entrelacée
détail d’une image progressive

On constate d’ailleurs que la compression provoque moins d’artefacts sur l’image progressive que sur l’image entrelacée.

Mais ma plus grande surprise a été la différence de sensibilité en basse lumière.

image extraite d’une vidéo entrelacée
image extraite d’une vidéo progressive

C’est peut-être difficile à croire, mais les deux images ci-dessus ont été réalisées sous des conditions d’éclairage strictement identiques !

Voici une vidéo qui illustre et compare ce qu’on vient de voir.

Finalement, voici en guise de dernière comparaison un cas extrême : une image faite de lignes de un pixel. C’est le cas le pire pour une vidéo entrelacée, car ces lignes n’apparaissent qu’une trame sur deux et provoquent donc un effet de scintillement très désagréable.

vidéo entrelacée vidéo progressive
télécharger la vidéo originale télécharger la vidéo originale

À noter que les vidéos originales (encodées avec l’Apple Intermediate Codec) ont été converties en MP4. On voit d’ailleurs que la vidéo entrelacée complique la tâche de la conversion/compression en MP4. Il en résulte d’ailleurs des artefacts indésirables.

Du progressif de bout en bout

Il semble donc évident qu’à l’heure actuelle, si une vidéo à pour but d’être visionnée sur un ordinateur ou sur un téléviseur moderne, l’idéal est de travailler en progressif de bout en bout : de la capture en passant par le montage, jusqu’à la diffusion.

La capture

La capture reste la première difficulté majeure pour obtenir du progressif : la plupart des caméscopes grand public capturent une image entrelacée (mais je suis sûr qu’au fur et à mesure que cet article deviendra âgé, cette affirmation sera de moins en moins exacte).

D’après mes constatations, Canon est un des premiers constructeurs à proposer le 25p (sans doute à cause de son historique orienté appareils photos, monde dans lequel l’entrelacement n’existe pas). La plupart de ses caméscopes HD proposent donc le mode 25p.

Dans ce mode, la capture est donc progressive, mais encore souvent (en particulier sur les caméscopes à cassettes) l’enregistrement est fait en entrelacé. C’est le cas de la Canon HV30i.

Le principe est simple : l’image complète est découpée en deux trames, qui sont enregistrées comme si ces trames avaient été capturées de façon entrelacée.

Le montage

Notre clip vidéo, filmé en mode progressif, a donc été “laminé” pour être enregistré comme un clip entrelacé.

Lors de son importation dans Final Cut Pro, si rien de particulier n’est fait, le clip sera importé comme un clip entrelacé et manipulé également comme tel. Il faut donc indiquer à Final Cut Pro que le clip en question a été filmé en mode progressif et qu’il faut le traiter comme tel. Cela peut se faire directement dans la fenêtre Navigateur si l’affichage a en mode liste, en cliquant avec le bouton de droite sur la colonne Priorité de trame du clip (ou des clips) sélectionné(s).

Il est également possible d’ajuster la priorité de trame clip par clip, par le menu contextuel du clip (Propriétés de l'élément→Format).

Une fois la priorité de trame ajustée pour tous les clips, il est bien sûr primordial de les utiliser dans une séquence également configurée pour le mode progressif (menu contextuel de la séquence→Réglages).

La manipulation est donc toute simple, encore faut-il ne pas oublier de la faire.

Ainsi, l’entrelacement n’est plus qu’un mauvais souvenir hérité des premières méthodes de diffusion et de reproduction d’images animées !


  1. [1] Persistance rétinienne et illusion de mouvement, Wikipédia, la vision
  2. [2] Avancement du film et projection, Wikipédia, Projection cinématographique
  3. [3] Les principes du cinéma, VSB, Vidéo numérique : les bases
  4. [4] Cinéma numérique, 2K, Guide de la haute définition, partie 3, page 37
  5. [5] Lines and refresh rates, Wikipedia, NTSC
  6. [6] Contraintes dues au secteur, Supélec, Choix de la fréquence trame ou image
  7. [7] Interlaced video : history, Wikipedia, Interlaced video
  8. [8] L’image entrelacée de la télévision, VSB, Vidéo numérique : les bases

La fabrication d’une carte mémoire

January 20th, 2011

Je tiens pas spécialement à faire de la pub pour Lexar, mais ils ont fait un film très intéressant sur la chaîne de fabrication d’une carte mémoire.

Diffuser des vidéos depuis son blog

December 22nd, 2010

Lorsque je souhaite diffuser une vidéo familiale sur mon blog, voilà les contraintes que j’ai, par ordre d’importance :

  1. La vidéo doit rester privée : seuls les personnes qui lisent le blog doivent pouvoir accéder à la vidéo.
  2. Les personnes qui lisent le blog doivent pouvoir les télécharger.
  3. Les vidéos doivent être visibles au moyen d’un navigateur Mac ou PC. Elles doivent également être visibles sur un iPod, iPhone ou encore iPad.
  4. Du moment qu’une personne lit le blog, la vidéo doit être facilement accessible (en particulier, sans devoir taper un mot de passe).
  5. Bonne qualité.

Première solution : vimeo, compte standard

Ma première solution était d’utiliser un compte vimeo gratuit. Je trouvais la qualité de leur encodage et le look général du site et du lecteur de vidéos me convenait parfaitement (largement plus que YouTube). Les quotas me suffisaient.

Cette solutions présentait cependant deux défauts :

  • Les vidéos ne sont pas visibles sur un iPhone ou iPad (contrainte 3).
  • La seule façon de rendre les vidéos privées était de les protéger avec un mot de passe (contrainte 4).
  • Pour télécharger une vidéo, la personne intéressée doit créer/avoir un compte vimeo.

Deuxième solution : vimeo, compte plus

J’ai donc récemment opté pour une autre solution : payer pour un compte vimeo plus. Cette solution était censée me permettre de régler beaucoup plus finement l’intimité (privacy) de mes vidéos (contrainte 1). De plus, les vidéos d’un compte vimeo plus devenaient accessibles depuis un iPhone ou un iPad (contrainte 3).

Cependant, malgré une plus grande possibilité d’ajustement de l’intimité, je ne suis pas parvenu à une solution qui me convenait.

Le compromis à faire était le suivant :

  • Soit je cache les vidéos du site vimeo et elles sont visibles depuis les domaines que je spécifie. Mais alors, comme elles n’apparaissent plus sur le site vimeo, elles ne sont plus téléchargeables.
  • Soit je les protège par mot de passe, mais du coup, je n’améliore guère la situation par rapport à la solution initiale.
  • Soit je les laisse visibles depuis vimeo. Finalement, seules les personnes qui nous connaissent seraient susceptibles de venir voir mes vidéos, non ? NON !

Voilà ce qu’il s’est passé : lorsque j’ai acheté un compte vimeo plus, j’en ai recréé un complet et j’ai choisi d’y re-transférer toutes mes vidéos (le but : bénéficier d’un encodage à deux passes proposé aux membres vimeo plus). J’ai donc utilisé pour la première fois leur logiciel vimeo uploader (qui est très pratique). Au bout de quelques jours de transfert, la dizaine de gigas de vidéos que j’ai s’est correctement retrouvé sur mon compte vimeo.

Par contre, il y a un réglage que je n’avais pas modifié et toutes les vidéos transférées sur mon compte vimeo étaient publiques par défaut. Et ce que j’ai vu m’a fait froid dans le dos :

Ce compte vimeo venait d’être créé, les vidéos s’y trouvaient depuis à peine quelques jours. Elles n’étaient pas encore en lien avec mes blogs. La seule façon de les voir était donc de “tomber dessus” depuis le site vimeo.

Et bien je trouve effrayant de constater que les vidéos les plus vues sont celles où l’on voit des enfants nus. Si je pouvais encore en douter, je suis convaincu maintenant de deux choses : le net fourmille de pervers; l’intimité de mes vidéos est une contrainte qui n’accepte aucun compromis.

Troisième solution : héberger moi-même

J’ai donc finalement opté pour héberger mes vidéos moi-même, c’est-à-dire chez mon fournisseur (bluehost.com pour ne pas le citer). Comme je n’ai pas de limite d’espace disque ni de transfert de données, ce n’est pas un problème majeur.

J’utilise donc maintenant le lecteur VideoJS (un lecteur libre très complet) et le plugin WordPress qui va avec. C’est un lecteur HTML5 (donc compatible avec l’iPhone et l’iPad), mais capable de se rabattre sur un lecteur flash.

Pour faire fonctionner le tout, voilà comment je procède :

Conversion de la vidéo

C’est actuellement la jungle : chaque navigateur internet support différents formats d’encodage vidéo. Voici un extrait d’une page très complète sur le sujet.

Pour me simplifier la vie, je ne propose la vidéo qu’au format mp4. Pour les navigateurs qui ne supportent pas ce codec, le lecteur se rabattera sur un lecteur flash, ce qui me convient très bien.

Cependant, le format mp4, c’est vague et pour que les vidéos puissent être visionnées sur un iPhone, le format doit être limité et le profil judicieusement choisi.

VideoJS présente d’ailleurs une petite lacune à ce niveau-là : il n’est pas possible de proposer plusieurs encodages mp4, par exemple une première version en bonne résolution pour une visualisation à partir d’un poste fixe, et une autre version en basse résolution pour une visualisation à partir d’un smartphone.

Toujours est-il que j’ai opté pour les réglages d’exportation suivants avec QuickTime :

  • Débit 512 kbits/s (à mon avis un compromis acceptable entre la taille du fichier et la qualité)
  • Taille de l’image : 640×360 (pour du 16:9 évidemment). 640, c’est la taille maximale supportée par un iPhone 3.
  • Profil de base (bouton Options vidéo...)
  • 96 kbps pour l’audio

Téléchargement de la vidéo

Au sein de l’arborescence créée par WordPress, il y a le répertoire wp-content/uploads/. J’y ai créé un répertoire videos/ dans lequel je transfert toutes mes vidéos.

Attention : avec mon hébergeur (peut-être le vôtre aussi), si le nom de fichier contient des accents, il sera introuvable depuis un lien externe.

Intégration dans une page WordPress

Grâce au plugin WordPress pour VideoJS, l’intégratoin au sein d’une page WordPress est très simple. Il suffit de mettre la balise suivante :

[video mp4="http://adresse_blog/wp-content/uploads/videos/video.mp4" preload="false" width="450" height="253"]

Les possibilités de réglages sont bien plus vastes que celles que j’utilise ici : il est possible de définir plusieurs formats de vidéo, de spécifier une image, etc.

En conclusion

Cette dernière solution n’est pas encore parfaite, mais elle me convient mieux que toutes les autres :

  1. La vidéo est privée : elle n’est accessible que depuis le blog. Elle n’apparaît nulle part ailleurs. Si en plus le blog n’est pas référencé, le niveau d’intimité obtenu me convient parfaitement.
  2. En ajoutant un lien vers le fichier mp4, les personnes qui le souhaitent peuvent télécharger la vidéo (sans même avoir un compte vimeo). Elle sera évidemment dans une résolution plus faible que l’originale.
  3. Les vidéos sont visibles sur un iPhone et un iPad. Certes la résolution pourrait être améliorée pour un iPhone 4 et un iPad, mais pour l’instant, c’est une limitation de VideoJS.
  4. Les vidéos sont facilement visionnable, sans avoir à introduire à chaque fois un mot de passe.
  5. C’est moi qui décide de la qualité et du compromis que je souhaite faire.

En tous les cas, c’est un très beau boulot que l’équipe qui développe VideoJS nous met à disposition. En plus, ils sont très actifs sur leur forum de support.

Télécharger une vidéo de la TSR

November 18th, 2010

J’avais déjà évoqué le fait qu’internet recèle de vidéos intéressantes. Pour les plus intéressantes d’entre elles, je tiens à pouvoir les stocker localement sur mon disque.

La TSR (Télévision Suisse Romande) met à disposition sur son site internet  la majeure partie des émissions qu’elle produit, ainsi que ses différents journaux télévisés.

Ces vidéos sont librement accessible mais uniquement en streaming. Aucune possibilité de téléchargement n’est offerte et malheureusement, Flash Video Downloader ne fonctionne pas avec le site de la TSR.

Pour contourner ce problème, il peut être bon de savoir que certaines émissions peuvent être obtenues par podcast. Ce n’est malheureusement pas le cas des journaux télévisés.

Pour télécharger un sujet diffusé durant le téléjournal, la seule façon que j’ai trouvée est d’utiliser le logiciel Stream Transport (malheureusement seulement disponible pour Windows).

Son fonctionnement est très simple : il suffit de lui spécifier une adresse internet contenant une vidéo et de démarrer une tâche de téléchargement. Si tout se passe bien, après un certain temps (parfois un temps certain), la vidéo est enregistrée sur le disque dur.

Dans le cas d’une vidéo de la TSR, celle-ci est encodée en FLV. Mais il est très simple de l’encoder dans un format plus pratique grâce à Quicktime et Perian.

Vimeo, iframe et WordPress

November 1st, 2010

Maintenant que vimeo supporte l’HTML5 pour ses vidéos, il serait dommage de ne pas utiliser cette nouvelle fonctionnalité pour diffuser des vidéos sur un blogue WordPress, d’autant plus que cela permet de voir ces vidéos sur les iPods, iPhones et autres iPads.

Le problème, c’est que l’intégration de vidéos vimeo se fait au moyen d’une balise <iframe> et que pour des raisons de sécurité, WordPress la supprime.

Pour résoudre ce problème, il faut passer par l’usage d’une extension (plugin). En l’occurence, j’utilise l’extension suivante : insereIframe.

Elle a l’avantage de rendre simple la modification du code d’intégration fourni par vimeo. Par exemple, le code d’intégration suivant :

<iframe
src="http://player.vimeo.com/video/16366056?byline=0&amp;portrait=0"
width="450" height="360" frameborder="0"></iframe>

devient :

[iframe:
src="http://player.vimeo.com/video/16366056?byline=0&amp;portrait=0"
width="450" height="360" frameborder="0"]

Mise à jour

Je n’utilise plus vimeo pour diffuser mes vidéos, mais un lecteur libre, VideoJS.

L’arrondi

October 22nd, 2010

Introduction

Un arrondi est nécessaire lorsqu’un nombre d’une certaine précision, doit être converti en un nombre d’une moindre précision.

Typiquement, un arrondi doit être effectué lorsqu’un nombre à virgule est converti en un nombre entier.

Cette notion peut sembler toute simple. Nous avons tous appris en cours de math qu’un nombre à virgule s’arrondi de la façon suivante :

  1. si la partie décimale est inférieure à 0.5, le nombre est arrondi vers le bas (par exemple 1.3 ≈ 1)
  2. si la partie décimale est supérieure ou égale à 0.5, le nombre est arrondi vers le haut (par exemple 1.6 ≈ 2 ou encore 1.5 ≈ 2)

Un premier doute s’installe lorsqu’il s’agit d’un nombre négatif. Un arrondi vers le bas correspond-il a un arrondi vers un nombre plus positif ou plus négatif ?

D’autre part, est-ce réellement la seule façon d’arrondir un nombre à virgule ? Y a-t-il une façon plus juste qu’une autre ?

Lors de l’écriture d’un programme qui manipule des nombres ayant à être arrondis, il est nécessaire de connaître comment une fonction d’arrondi réalise l’opération et quel sera le résultat obtenu.

Pour commencer, voyons les différentes façons d’arrondir un nombre à virgule (appelé également nombre réel).

Arrondi vers le bas (arrondi vers -∞)

Le nombre réel est arrondi vers l’entier inférieur.

3.4 ≈ 3

-3.4 ≈ -4

Arrondi vers le haut (arrondi vers +∞)

Le nombre réel est arrondi vers l’entier supérieur.

3.4 ≈ 4

-3.4 ≈ -3

Arrondi par troncature (vers zéro)

Le nombre réel est arrondi vers l’entier suivant le plus proche de zéro. Concrètement, la partie décimale du nombre réel est simplement retirée.

3.4 ≈ 3

-3.4 ≈ -3

Arrondi vers les infinis (par éloignement de zéro)

Le nombre réel est arrondi vers l’entier suivant s’éloignant le plus de zéro.

3.4 ≈ 4

-3.4 ≈ -4

Arrondi au plus proche

Le nombre réel est arrondi vers l’entier le plus proche du nombre réel.

3.4 ≈ 3

3.6 ≈ 4

-3.4 ≈ -3

– 3.6 ≈ -4

Cette dernière forme d’arrondi pose problème lorsque la partie décimale est exactement à mi-chemin entre deux nombre entiers (par exemple 3.5 ou -3.5).

Dans ce cas, il existe plusieurs façons d’arrondir :

Arrondi vers le bas (vers -∞)

3.5 ≈ 3

-3.5 ≈ -4

Arrondi vers le haut (vers +∞)

Cette méthode d’arrondi est également appelée arrondi arithmétique asymétrique.

3.5 ≈ 4

-3.5 ≈ -3

Arrondi vers zéro

3.5 ≈ 3

-3.5 ≈ 3

Arrondi vers les infinis

Cette méthode d’arrondi est celle qui est certainement la plus communément utilisée en arithmétique. On parle également d’arrondi arithmétique symétrique.

3.5 ≈ 4

-3.5 ≈ -4

Arrondi au pair le plus proche (arrondi bancaire)

Si la partie entière est impaire, le nombre arrondi sera le nombre pair le plus proche.

Si la partie entière est paire, elle correspond au nombre arrondi.

3.5 ≈ 4

2.5 ≈ 2

-3.5 ≈ -4

-2.5 ≈ -2

Cette méthode élimine le biais qui survient en cas d’arrondi systématique vers les infinis (ou vers zéro).

Arrondi à l’impair le plus proche

Si la partie entière est paire, le nombre arrondi sera le nombre impair le plus proche.

Si la partie entière est impaire, elle correspond au nombre arrondi.

3.5 ≈ 3

2.5 ≈ 3

-3.5 ≈ -3

-2.5 ≈ -3

Cette méthode d’arrondi est très rarement utilisée, sauf lorsqu’il est important que -0.5 et 0.5 ne soient pas arrondis à zéro.

Arrondi stochastique

C’est le hasard (uniformément réparti) qui détermine si le nombre sera arrondi vers l’entier supérieur ou inférieur.

Comme pour l’arrondi au pair le plus proche, cette méthode élimine le biais d’arrondi, mais introduit une notion de hasard qui rend la reproduction de calculs impossible.

Arrondi alterné

L’arrondi est alternativement fait vers l’entier supérieur puis vers l’entier inférieur.

Résumé

nombre -2.6 -2.5 -2.4 -1.6 -1.5 -1.4 -0.6 -0.5 -0.4 0.4 0.5 0.6 1.4 1.5 1.6 2.4 2.5 2.6
vers +∞ -2 -2 -2 -1 -1 -1 0 0 0 1 1 1 2 2 2 3 3 3
vers -∞ -3 -3 -3 -2 -2 -2 -1 -1 -1 0 0 0 1 1 1 2 2 2
troncature -2 -2 -2 -1 -1 -1 0 0 0 0 0 0 1 1 1 2 2 2
vers les ∞ -3 -3 -3 -2 -2 -2 -1 -1 -1 1 1 1 2 2 2 3 3 3
au plus proche vers +∞ -3 -2 -2 -2 -1 -1 -1 0 0 0 1 1 1 2 2 2 3 3
vers -∞ -3 -3 -2 -2 -2 -1 -1 -1 0 0 0 1 1 1 2 2 2 3
vers zéro -3 -2 -2 -2 -1 -1 -1 0 0 0 0 1 1 1 2 2 2 3
vers les ∞ -3 -3 -2 -2 -2 -1 -1 -1 0 0 1 1 1 2 2 2 3 3
pair -3 -2 -2 -2 -2 -1 -1 0 0 0 0 1 1 2 2 2 2 3
impair -3 -3 -2 -2 -1 -1 -1 -1 0 0 1 1 1 1 2 2 3 3
stochastique -3 -3 ou -2 -2 -2 -2 ou -1 -1 -1 -1 ou 0 0 0 0 ou 1 1 1 1 ou 2 2 2 2 ou 3 3
alterné -3 -3 (-∞) -2 -2 -1 (+∞) -1 -1 -1 (-∞) 0 0 1 (+∞) 1 1 1 (-∞) 2 2 3 (+∞) 3

Note : lorsque un nombre négatif est arrondi à zéro, certaines implémentations préservent le signe devant le zéro : -0.5 ≈ -0, afin de distinguer un arrondi à zéro provenant d’une nombre négatif, d’un arrondi provenant d’un nombre positif.

Fonctions courantes d’arrondi

Chaque langage (et chaque bibliothèque de fonctions) met à disposition un certain nombre de fonctions d’arrondi.

J’ai tenté de réunir dans un tableau les différentes façons d’arrondir un nombre réel ainsi que les différentes fonctions proposées par un langage ou une bibliothèque particulière.

Je m’en suis tenu aux langages que j’utilise couramment : C++ (avec les bibliothèques standards), C++ avec la bibliothèque Qt, VBS et Java. J’y ai ajouté Excel (et donc Keynote, qui implémente les mêmes fonctions), que j’utilise également régulièrement.

méthode\langage VBScript C++ C++ et cmath C++ Qt Java et java.lang.math Excel
vers +∞ ceil() ceil()
vers -∞ Int floor() floor() INT() ENT()
vers zéro
(troncature)
Fix static_cast<int>() trunc() int() ROUNDDOWN() ARRONDI.INF()FLOOR() TRONQUE()
vers les ∞ ROUNDUP() ARRONDI.SUP()CEILING() PLAFOND()
au plus proche vers +∞ qRound round()
vers -∞
vers zéro
vers les ∞ FormatNumber1 round() ROUND() ARRONDI()
pair Round CByte CInt CLng rint() rint()
impair
stochastique
alterné

1Contrairement aux autres fonctions qui retournent un nombre, FormatNumber retourne une chaîne de caractères formatée selon certains paramètres donnés. Il reste néanmoins intéressant d’observer la méthode d’arrondi utilisé par cette fonction.

Ce tableau montre bien la confusion qui peut s’intaller : une fonction nommée Round va par exemple faire un arrondi au pair le plus proche en VBS, mais un arrondi arithmétique symétrique en C++ et avec Excel. La fonction équivalente en Java fera un arrondi arithmétique asymétrique, de même que la fonction qRound de Qt !


Sources :

Wikipedia : Rounding to integer

Wikipédia : Arrondi

Aide et support Microsoft : How To Implement Custom Rounding Procedures

La 3D

October 7th, 2010

Préambule

Au cours de ma formation pédagogique, j’ai été amené à faire une présentation de 30 minutes sur un thème à choix.

Après de nombreuses hésitations et de multiples changement d’avis, j’ai choisi le thème à la mode de la 3D. Voici le document que j’ai écrit et qui a servi de base à ma présentation.

À noter également que bien que la plupart des images et illustrations qui jalonnent cet article soient de moi, j’en ai utilisé certaines sans l’autorisation de leurs auteurs. Pour certaines, je n’ai même pas retrouvé l’auteur.

Si une de vos images se retrouve sur cette page, n’hésitez pas à me contacter pour que je puisse la retirer.

Introduction

Depuis quelques mois, dans le domaine de l’image (particulièrement de l’image animée, c’est-à-dire du cinéma et du home-cinéma), le concept à la mode est la 3D, autrement dit la perception du relief et de la profondeur.

Il ne se passe pas une semaine sans qu’on annonce que l’avenir du cinéma sera 3D ou ne sera pas.

Il ne se passe pas une semaine sans qu’un nouveau tournage de film soit annoncé en 3D.

Il ne se passe pas une semaine sans qu’un fabriquant d’appareils domestiques n’annonce une prise en charge révolutionnaire de la 3D.

Mais, la 3D, c’est quoi ? Comment est-ce que ça fonctionne ? Qu’est-ce que ça apporte ?

Vision binoculaire

Nous percevons le relief grâce à nos deux yeux, qui nous offrent une vision binoculaire. Ceux-ci étant distants d’environ 65 mm, chacun ne voit pas exactement la même chose, en particulier pour les objets proches.

L’oeil gauche envoie donc au cerveau une image légèrement différente de celle envoyée par l’oeil droit. Le cerveau se charge alors de combiner ces deux images et de construire une représentation tri-dimensionnelle de ce que l’on voit.

Exercice :
Placer son index au bout de son nez, à une distance d’environ 10 centimètres, et cligner successivement des yeux : chaque oeil voit l’index différemment.

Cette vision tri-dimensionnelle nous permet de percevoir les reliefs et les distances. Les distances sont très précises (environ 10 centimètres de précision à une distance de 10 mètres) mais diminue fortement lorsque les distances augmentent.

Pathologies de la vision binoculaire

La vision binoculaire nécessite de faire travailler les deux yeux comme un seul, en parfaite coordination motrice et sensorielle.

Certains personnes auront des difficultés à avoir une vision binoculaire, par exemple à cause d’un strabisme ou d’autres problèmes liés à la vision.

La perte d’un oeil supprime toute possibilité de perception du relief par la vision binoculaire, rendant certains gestes de la vie de tous les jours plus difficiles à accomplir. Toutefois, les borgnes parviennent à appréhender l’espace.

Exercice :
Déboucher un stylo et le tenir d’une main à 20-30 cm devant soi.
Fermer un oeil et avec l’autre main, essayer de le reboucher.

Ceci est possible parce que le cerveau utilise d’autres informations que la vision binoculaire pour percevoir le relief.

Perception du relief

Avec une vision monoculaire

Même avec un seul oeil, notre cerveau est capable de percevoir la profondeur, en analysant ce qu’il voit et en tenant compte de ce qu’il connaît. Cette capacité lui permettra de reconstituer la profondeur.

D’ailleurs, la plupart de nos médias (livre, télévision, écran de cinéma, moniteur d’écran, photo) n’étant qu’une simple surface plane (donc sans profondeur), ils font abondamment usage de techniques de perception monoculaires donnant à notre cerveau l’illusion de profondeur.

Les illusions d’optique se basent sur cette même capacité du cerveau, mais en essayant de le duper.

Accommodation

L’effort musculaire nécessaire aux yeux pour observer un objet proche de façon nette (l’accommodation) donne au cerveau une information sur la distance de ce qu’il observe.

L’accommodation devient inopérante au-delà de 10 mètres.

De plus, lorsque l’oeil est focalisé sur un objet proche, l’arrière-plan est flou.

En photographie, l’espace dans lequel un objet sera perçu comme net est la profondeur de champ et permet à l’image de gagner en profondeur.

Perspective linéaire

La perspective linéaire est la convergence des lignes vers un (ou plusieurs) point de fuite.

C’est seulement vers le XVe siècle environ que la perspective est couramment utilisée pour proposer une représentation au plus proche de la réalité.

Superposition des contours

Les contours d’un objet éloigné sont éventuellement cachés partiellement par un objet rapproché. Ce principe est essentiel dans l’aide à une perception monoculaire.

On sait que les nuages dans le ciel sont plus proches de nous que la lune parce qu’ils peuvent la cacher.

Cet effet est souvent accentué en dessin en utilisant des traits plus épais pour les éléments proches et plus fins pour les éléments éloignés.

Plusieurs illusions d’optique se base sur ce phénomène pour perturber la perception de la profondeur de notre cerveau.

Ombrage

L’existence des zones ombrées et des zones éclairées facilite la représentation des formes à trois dimensions à partir d’une image plane.

Cet effet d’ombrage est un élément psychologique très important dans la perception de la profondeur et du relief. Comme on est habitué à voir la lumière venant d’en haut, un relief sera éclairé par le haut et son ombre sera projetée dans la zone inférieure.

Cette technique a été énormément utilisée en informatique pour donner une sensation de relief aux interfaces graphiques.

Taille relative d’objet connu

Souvent on a une connaissance assez précise de certains objets dans une scène. Ainsi, la taille d’un image nous permet d’apprécier la distance à l’objet (par exemple : taille d’un personnage).

Les objets apparaissent plus grands lorsqu’il sont près et la mémoire permet de juger de la distance vers des objets familiers.

Perspective de texture

La réduction progressive d’une texture dans une direction ou sa déformation provoque une perception de profondeur et de relief.

Perspective de surface (perspective atmosphérique)

La perspective de surface se forme par l’atténuation des contrastes des objets lointains due à la diffusion atmosphériques.

Dans la nature, les objets éloignés sont plus ou moins indistincts, et les objets rapprochés, au contraire, sont nets. Ceci donne avec le concours des phénomènes atmosphériques, une sensation de profondeur renforcée.

D’autre part, la densité de l’atmosphère aura tendance à donner une teinte bleutée aux objets éloignés.

Le parallaxe du mouvement

Lorsqu’on se déplace, les objets qui sont le plus près de nous sembleront se déplacer plus rapidement que les objets plus éloignés. Cette information est très importante dans la perception de la profondeur.

Ce phénomène est très facile à observer lorsqu’on est assis dans un train et que l’on regarde le paysage au travers de la fenêtre.

En résumé

La simple vision monoculaire peut nous donner une sensation du relief, puisqu’en regardant une image plane, on n’éprouve aucune difficulté à repérer ces objets les uns par rapport aux autres.

Mais cette vision de relief basée sur ces facteurs monoculaires, nous donne seulement une connaissance grossière du relief fin car l’information fournie par les facteurs monoculaires est une vue totale de l’espace. Pour obtenir une perception fine du relief, être capable de percevoir le géométrie locale est indispensable, ce qui n’est possible que dans la condition binoculaire, c’est-à-dire la vision stéréoscopique.

Avec une vision binoculaire

Pour reproduire le relief avec une vision binoculaire, il faut que chaque oeil perçoive une image différente.

Il y a principalement deux façons d’obtenir des images différentes pour chaque oeil : avec accessoire (généralement des lunettes) ou sans accessoire.

Avec accessoire

L’accessoire en question est toujours le même : une paire de lunettes. Le but de cette paire est de garantir que l’image vue par l’oeil gauche n’est pas la même que celle vue par l’oeil droit.

Lunettes à filtres polarisants

La lumière émise par le soleil ou par une ampoule se diffuse dans toutes les directions.

Le filtre polarisant se charge de ne laisser passer que les ondes lumineuses d’un sens donné.

Il est donc possible de projet deux images différentes, sur le même écran, en les polarisant différemment (décalage de 90 degrés entre elles).

Le premier projecteur diffuse sur l’écran une image polarisée verticalement.

Un deuxième projecteur diffuse sur le même écran une image polarisée horizontalement.

L’écran affiche donc deux images mélangées, l’une polarisée verticalement et l’autre polarisée horizontalement.

Il ne reste plus qu’à regarder l’écran au travers de lunettes elles-mêmes polarisées.

Ainsi, l’oeil de gauche ne percevra que l’image de gauche (polarisée horizontalement) et l’oeil droit ne percevra que l’image de droite (polarisée verticalement).

Projection alternée

Le principe ici est d’alterner vision gauche et vision droite d’une manière suffisamment rapide pour que le cerveau ne perçoive pas la différence (grâce à la persistance rétinienne).

Alternativement, c’est l’image pour l’oeil droit (A) qui est projetée, l’image de l’autre projecteur étant obturée.

Ensuite, c’est l’image pour l’oeil gauche (B) qui est projetée, l’autre projecteur étant à son tour obturé.

Ce système nécessites des lunettes à cristaux liquides, qui deviennent opaques (un oeil est bouché) alternativement, selon les images projetées à l’écran. La difficulté réside dans le fait de synchroniser les lunettes à l’écran, ce qui les rend un peu plus coûteuses et consommatrices d’énergie.

Projection d’anaglyphes

C’est la première technique qui a été inventée et c’est la plus simple à mettre en place. Elle se base sur l’utilisation de filtres de couleurs (différents pour chaque oeil) pour que chaque oeil perçoive une image différente.

Un anaglyphe est constitué de deux images superposées (appelées homologues) de couleurs complémentaires représentant la même scène mais vue de points légèrement décalés : le plus souvent la vue gauche en rouge et la vue droite en cyan.

On projette sur un écran les homologues. Dès lors, il ne reste plus qu’à regarder la projection à l’aide de lunettes teintées des deux couleurs complémentaires pour avoir l’impression de relief. Ces lunettes peuvent être fabriquées soi-même ou achetées toutes faites (pour ma part, je les ai commandées ici).

D’autres couleurs sont aussi possibles, comme le jaune et bleu, ou le rouge et bleu.

Le désavantage de ce procédé est que l’image retransmise de cette manière n’est jamais d’une qualité exceptionnelle, surtout pour ce qui concerne le rendu des couleurs. De plus, comme chaque œil envoie au cerveau une image de teinte différente, celui-ci doit faire un travail supplémentaire de reconstitution qui peut rapidement devenir source de maux de tête et de fatigue oculaire.

Pour créer un anaglyphe, il faut au départ deux images légèrement décalées (des images de synthèse ou des photographies).

vue de l’œil gauche vue de l’œil droit

Les couleurs produites par un ordinateur sont faites des composantes rouge, verte et bleue.

Le cyan s’obtient par l’addition des composantes bleue et verte.

Derrière le filtre rouge, l’œil gauche ne verra que la composante rouge. La composante cyan est enlevée. Comme le cyan est obtenu par la combinaison des couleurs de base verte et bleue, ces deux composantes sont enlevées.

Derrière le filtre cyan, l’œil droit ne verra que la composante cyan. La composante rouge est enlevée.

Il suffit ensuite de reconstruire une nouvelle image, qui fusionne la composante rouge de l’image destinée à l’œil gauche et les composantes verte et bleue de l’image destinée à l’œil droit.

Voici pour le plaisir, quelques anaglyphes supplémentaires :

(image tirée du site http://www.rickshel.net/)

(et encore un pour les plus de 18 ans, trouvé sur cette page).

Sans accessoire

Il est possible de voir une image en trois dimensions sans accessoires. On parle alors d’auto-stéréoscopie.

Strabisme convergent

L’idée est de croiser les images (l’image de gauche est mise à droite et celle de droite est mise à gauche) et de loucher. L’oeil gauche vise l’image de droite et l’oeil droit vise l’image de gauche.

Cette technique fonctionne, mais n’est pas facile à réaliser pour le spectateur. Elle est source de fatigue musculaire élevée et peut être sujette à maux de tête et nausée. Elle est rarement utilisée.

Strabisme divergent

Une autre technique est d’accommoder la vision derrière l’image. Elle demande également beaucoup d’entraînement mais est plus reposante pour les yeux. Toutefois, le résultat n’est pas vraiment exploitable pour des images réelles, chaque œil distinguant quand même en périphérie l’image destinée à l’autre œil.

Par contre, elle est couramment utilisée pour les fameux stéréogrammes.

À noter que la vision divergente, lorsqu’elle est maîtrisée, permet de repérer facilement les différences entre deux images (les différences ont tendance à clignoter).

Par exemple, sans la technique de vision divergente, il est très difficile de repérer les 7 différences entre les deux images ci-dessous, alors que l’exercice est plutôt simple avec la vision divergente (les différences semblent clignoter aux yeux).

Alioscopie

L’alioscopie consiste à diffuser des images en relief sans avoir besoin de lunettes 3D. L’impression de relief est obtenue grâce à un réseau de microlentilles placé à la surface de l’image, constituée d’images imbriquées représentant chacune un point de vue pris sous un angle différent. Ainsi, chaque oeil perçoit une image différente.

Holographie

L’holographie est une technique connue depuis les années 1950 et rendue possible dans les années soixante grâce à la mise au point des lasers.

Contrairement à la photographie classique qui n’enregistre sur la surface sensible que la luminosité, l’holographie permet d’enregistrer également la phase de la lumière ce qui permet d’enregistrer les informations nécessaires à la restitution du relief.

Pour que la restitution soit bonne, il faut que l’hologramme soit éclairé par une lumière cohérente.

Cette technique n’est pas encore applicable pour les systèmes grand public, mais reste la plus prometteuse.

Conclusion

On voit que même en cas d’une vision monoculaire, le cerveau dispose de nombreuses informations pour recréer le relief et la profondeur. Ces informations sont précieuses et nous permettent de réaliser un grand nombre de choses au quotidien.

Toutefois, la vision binoculaire nous offre une visualisation très fine du relief pour les objets à portée de bras, ce qui est primordial pour mener à bien des tâches nécessitant une appréciation fine de l’espace. Elle est particulièrement importante par exemple dans le domaine de la chirurgie. Dans un tel domaine, être capable de fournir au médecin une reproduction stéréoscopique devient un réel progrès.

Dans le domaine du divertissement au sens large, cette nouvelle technologie augure d’un avenir financier juteux car elle implique un renouvellement complet du matériel. Pour le consommateur et le spectateur en revanche, son intérêt reste à prouver. Au-delà de certaines images proprement ahurissantes, une partie non-négligeable des spectateurs souffre de nausée, de maux de tête, de fatigue oculaire ou n’est tout simplement pas prête à payer d’avantage pour une troisième dimension qui n’amène pas forcément quelque chose d’indispensable.

Encore trop souvent, la troisième dimension d’un film cache une mauvaise histoire.

Si tu n’arrives pas à le faire bien, fais le en 3D !

AR.Drone et iPhone

September 24th, 2010

À l’occasion des portes-ouvertes de l’école, deux élèves ont présenté le pilotage d’un drone au moyen d’un iPhone.

En l’occurence, il s’agissait de l’AR.Drone de Parrot, un hélicoptère quadrirotor. Nous l’avons acheté à la FNAC (France) pour 300€.

Le drone génère un réseau wifi sur lequel vient se connecter un iPhone. Avec une application ad-hoc, il est ensuite possible de piloter cet hélicoptère !

Au premier abord, ce produit est fascinant : il est très facile à piloter (quoique difficile d’être très précis dans ses déplacements), ajuste automatiquement sa hauteur par rapport au sol, possède une caméra frontale et une caméra verticale et est capable de se stabiliser en vol stationnaire de façon automatique.

J’imaginais déjà utiliser ce drone pour filmer ma maison en hauteur.

Dans la pratique, ce drone se révèle être un gadget encore peu fiable et d’une utilité discutable. Voici en bref les défauts que je lui ai trouvé :

  • Autonomie de la batterie largement moins longue que celle indiquée (12 ou 15 minutes selon les sources). En ce qui nous concerne, nous n’avons jamais réussi à faire voler le drone plus de 5 minutes.
  • Fiabilité de la batterie : il nous est arrivé plus d’une fois qu’après quelques secondes de vol (avec batterie pleine), l’alimentation se coupe instantanément, provoquant la chute du drone. Ces accidents à répétition sont désastreux pour le drone car ils provoquent des dégats.
  • Fragilité des bras soutenant les hélices : une fragilité certainement due à la légerté nécessaire pour faire voler ce drone (360-400 grammes). Après une mauvaise chute, ces axes ont cassé (heureusement, notre atelier de mécanique a pu réparer les dégâts).
  • Electronique pas toujours fiable : est-ce que les problèmes que nous avons eu sont dus aux chutes à répétition ? Mais souvent, sans que l’on sache pourquoi, le drone refusait de s’initialiser et donc de décoller.
  • Impossible d’enregistrer ce que filme le drone sans que les boutons de pilotage apparaissent sur l’image.
  • La caméra verticale est d’une résolution complètement insuffisante (176 x 144 pixels).

En résumé, cet AR.Drone est un gadget prometteur, sous certains aspects épatant, mais qui manque encore cruellement de fiabilité.

Pour terminer, voici un film conçu en atelier d’informatique et qui présente l’AR.Drone.