Faux Tilt Shift (Fausse miniature)

Travail pratique #6 par Philippe Babin et Émile Lévesque

En photographie, l'effet tilt shift est le résultat de l'utilisation d'une lentille tilter. Cette lentille limite la profondeur de champ de la photo au point qu'un seul plan de profondeur est nette et en focus.

Tilt lens
Tilt lens
(Source)

Cet effet donne l'apparence similaire à la prise en photo d'une miniature. Plusieurs photographes ont commencé à faire des faux tilts shift en exploitant la manipulation d'image digitale.

Tilt lens
Vrai miniature
(Source)
Tilt lens
Tilt shift
(Source)

Le but de ce projet est de réalisé l'effet de tilt shift en utilisant une carte de profondeur génénée par une caméra stéréo.

Tilt shift sans carte de profondeur (main_00_lazy_tilt_shift.py)

Explications

Beaucoup de vidéos et de tutoriel de tilt shift utilise une technique très simple pour le réaliser. Il suffit d'appliquer un flou gaussien sur l'image, de créer un masque en dégrader pour n'avoir qu'une seule zone de l'image en focus et de stitcher l'image floue et l'image nette avec ce masque. Plusieurs logiciels comme Photoshop et After Effect implémentent cet effet. Ces logiciels utilisent un lens blur pour obtenir des déformations plus proches de la réalité.

x + x =

Cette technique a une limitation majeure: le sujet doit être un plan incliné très plat. Voici une image provenant d'un vidéo Youtube de faux tilt shift:

L'effet est presque réussi, mais il est gâché par le gratte-ciel sur la droite. Le haut du gratte ciel devrait être flou, puisque la profondeur en focus est le viaduc. Cela donne l'impression que l'image n'a pas de profondeur. L'effet est très simple à réaliser, mais ne marche que pour certains types de scène.

Commentaires sur les résultats

Les résultats obtenuent sont d’un niveau de réalisme variable. Le meilleur résultat semble être la caféteria. Le fait que ce dernier soit pris en hauteur rend l’effet plus convaincant. On peut également voir que dans les images de l’autoroute cette technique crée certaines incohérences. On voit un lampadaire dont la base est nette, mais la section supérieure est floue. Ce genre de défaut apparait, puisque l’algorithme n'a aucun concept de profondeur. Malgré tout cette technique simple ne génère pas des résultats très convaincants.

Image original Résultat
Cliquez pour agrandir
Vidéo

Génération d'une carte de profondeur à partir de caméra stéréo (main_01_depth_from_img.py)

Explications

Le but de notre projet de reproduit l'effet vu dans ce vidéo Youtube. Le photographe a découpé un à un les bâtiments et progressivement rendre flou chacune des couches de l'image:

Cool tilt shift

Nous cherchons à reproduire l'effet en trouvant la carte de profondeur à partir de photographies stéréo. À l'aide d'une caméra stéréo, on peut obtenir la carte de profondeur en mesurant la disparité entre les deux images. La disparité est calculée en soustrayant la position en pixel d'une même feature dans les deux images. Dans notre cas, nous ne sommes pas intéressés par convertir la carte de disparité en carte de profondeur, puisque nous ne cherchons pas à connaitre la distance absolue des objets dans l'image. Notre but est de connaitre quel objet est plus proche d'un autre objet. Dans ce rapport, nous utilisons une carte de profondeur et une carte de disparité pour référé à la carte de disparité normalisée. On peut calculé la profondeur(Z) à partir de la distance entre les deux caméras(baseline), la disparité(d) et de la focal(f) en pixel de la manière suivante:

Z = f x b / d

Pour prendre des photos en stéréo, nous avons monté sur un planche de bois deux caméras CoolPix L30. La planche de bois est accrochable à un trépied et permet d'avoir des baselines allant de 10 à 70cm.

Notre algorithme pour obtenir une carte de profondeur lisse fonctionne de la manière suivant:

Commentaires sur les résultats

Dans les figures ci-dessous, on voit bien l’impact de la baseline sur la définition des cartes de profondeur. Plus le baseline est petit plus les objets proches des cameras sont bien définie. Comme cette image a plusieurs objets près de la caméra, le baseline le plus petit est le plus approprié. Il est intéressant de noter que le baseline avec le meilleur résultat à 10 cm de distance, ce qui est proche de la distance moyenne entre les yeux humains (~60mm).

Test de compaisons des baselines

Baseline Carte de disparité brute Image gauche Image droite
10cm
20cm
30cm
40cm
50cm
60cm
70cm

Tilt shift avec une carte de profondeur (main_02_tilt_shift.py)

Explications

Une fois une carte de profondeur a été généré, on peut l'utilisé pour généré notre tilt shift. Notre algorithme comporte les étapes suivantes:

Résultats et commentaires

Images stéréo d'internet

La carte de profondeur est assez intéressante. Le fait que le ciel soit complètement noir évite plusieurs problèmes potentiels avec la carte de profondeur. Également, la texture et la couleur du sol semblent aider l’algorithme. Bien que la définition ne soit pas très précise, le résultat est tout de même intéressent.

La carte de profondeur contient beaucoup de problèmes. On reconnait assez bien la tour dans la carte de profondeur, mais la section supérieure comporte plusieurs défauts. Le résultat obtenu souffre beaucoup de ses imperfections.

Image originale Carte de profondeur Vidéo

(source)

(source)

Image stéréo avec une carte de profondeur manuellement modifiée

Ce résultat est de loin le plus convaincant que nous avons obtenu. Pour l’obtenir, la carte de profondeur de la tour a été ajustée manuellement. Un simple dégradé est utilisé pour le sol. Puis, la tour est mieux définie et il n'y a pas de défaut apparent. L’effet est assez convaincant.

Image Carte de profondeur Vidéo

Images personnelles

Ce résultat comporte quelques défauts principalement dans la section de droite de l’image. Ce problème provient de la carte de profondeur, elle contient plusieurs défauts causés par le manque de calibration extrinsèque. De plus, certaines faces des boîtes contiennent des trous causés par la texture trop régulière de l'objet. Le résultat obtenu est donc moins intéressant.

Cet environnement présentait plusieurs difficultés. Le gazon près de la caméra est très mal détecté dans la carte de profondeur. De plus, la précision des branches des arbres est décevante ce qui cause certains problèmes dans le brouillage des plans.

La carte de profondeur du plancher et des tables est bien construite. Par contre, les murs de chaque coté comportent des inconsistances. Ces inconsistances peuvent être vues dans le résultat. Par contre, ils influencent peu le résultat obtenu.

Le résultat de la carte de profondeur est intéressant. On peut bien distinguer les tours, les arbres et une partie du sol. Par contre, la façade d’une des tours comporte des inconsistances importantes. Le ciel a également beaucoup de problèmes. Il n’est pas capté comme une distance infinie et n’est pas constant dans toute l’image. Cela est probablement dû au fait que la texture du ciel est trop lisse et uniforme. Il est impossible pour l'algorithme de trouver des features. Finalement, le sol est encore une fois mal bien détecté. On voit malgré tout dans le résultat un effet réussi.

Les bâtiments sont assez bien définis sur la carte de profondeur. Par contre, le ciel ainsi que la neige sont très mal définis. Cela cause plusieurs problèmes dans le résultat final.

Image original Carte de profondeur Vidéo

Conclusion

En général, nous avons eu beaucoup plus de difficulté avec les cartes de profondeur que ce que nous avions anticipé. Les résultats sont donc moins convaincant que nous aurions espéré. Les principaux problèmes provenaient principalement du sol proche des caméras et du ciel. Malgré tout avec quelques retouches manuelles des résultats simples, mais convaincant peuvent être réalisés.

Si ce projet était à refaire, nous aurions passé plus de temps à calibrer les caméras. Nous aurions aussi pris plus de scène prise de haut.