======== DIBR ======== ===== Les images résultat d'un algorithme de DIBR pour des depthmaps issues de sgbm de opencv-contrib de OpenCV-3.1.0 : ===== Toutes les cartes de disparité utilisées sont calculées par l'algorithme sgbm de opencv-contrib de OpenCV-3.1.0 avec les options kernel size à 5 et CV_DENSE_CENSUS pour descripteur binaire. Une image est calculée à partir d'une image du dataset de middlebury et les autres à partir d'une image fait par le banc stéréo de l'oculus (image disponible sur [[stereo_matching|STEREO MATCHING AND DEPTH MAP]]). Différentes positions de caméra virtuelle ont été testées (translation de 50, 100, 200 mm). Une image est faite sans interpolation bilinéaire sur l'image d'entrée réelle (ie. le pixel le plus proche est choisi). ===== Aloé : ===== Image d'entrée : {{ :view1.png?500 |}} Depthmap à partir de SGBM : {{ :aloe1_disparity_algo_sgm_cv_dense_census_k5.png?500 |}} Résultat du DIBR : {{ :dibr_aloe_translation200_interpolation_with_consideration_zero_value_depthmap_21.07.2016.png?500 |}} ===== Image du banc stéréo de l'oculus : ===== Image d'entrée : {{ :000001_remapped_view_left.png?500 |}} Depthmap à partir de SGBM : {{ :disparity_algo_sgm_cv_dense_census_k5.png?500 |}} === Comparaison avec et sans interpolation : === Résultat du DIBR sans interpolation avec une translation de [-50, 0, 0] par rapport à la caméra d'entrée : {{ :dibr_translation50_no_interpolation_with_consideration_zero_value_depthmap_21.07.2016.png?500 |}} Résultat du DIBR avec interpolation avec une translation de [-50, 0, 0] par rapport à la caméra d'entrée : {{ :dibr_translation50_interpolation_with_consideration_zero_value_depthmap_21.07.2016.png?500 |}} === Test pour différentes translations : === Résultat du DIBR avec interpolation avec une translation de [-100, 0, 0] par rapport à la caméra d'entrée : {{ :dibr_translation100_interpolation_with_consideration_zero_value_depthmap_21.07.2016.png?500 |}} Résultat du DIBR avec interpolation avec une translation de [-200, 0, 0] par rapport à la caméra d'entrée : {{ :dibr_translation200_interpolation_with_consideration_zero_value_depthmap_21.07.2016.png?500 |}} ===== Un peu de biblio ===== ==== Les techniques de IBR et de DIBR ==== La publication((Kauff, Peter, et al. "Depth map creation and image-based rendering for advanced 3DTV services providing interoperability and scalability." Signal Processing: Image Communication 22.2 (2007): 217-234.)) suivante décrit la technique de IBR que l'on utilise : [[http://www.sciencedirect.com/science/article/pii/S0923596506001329]] Cette technique est une technique de DIBR (depth image based rendering). Il existe différente méthode : 3D image warping, triangular meshes, relief texture mapping, inverse mapping, occlusion compatible scanning. Plus de description((Morvan, Y. Yanninck. Acquisition, compression and rendering of depth and texture for multi-view video. Diss. Technische Universiteit Eindhoven, 2009.)) sur le lien suivant : [[http://www.epixea.com/research/multi-view-coding-thesisse18.html]] On retrouve principalement le DIBR dans des applications pour la vidéo 3D. Voici d'autres documents((Sun, Wenxiu, et al. "An overview of free view-point depth-image-based rendering (DIBR)." APSIPA Annual Summit and Conference. 2010.))((Zhao, Yin, Ce Zhu, and Lu Yu. "Virtual view synthesis and artifact reduction techniques." 3D-TV System with Depth-Image-Based Rendering. Springer New York, 2013. 145-167.)) intéressants pour l'aspect "overview": [[http://www.apsipa.org/proceedings_2010/pdf/APSIPA197.pdf]] [[http://link.springer.com/chapter/10.1007%2F978-1-4419-9964-1_5]] Certain algorithme utilise un mixte entre "forward projection" (d'un pixel de l'image réelle vers l'image virtuelle à générée) pour l'image de disparité et "backward projection" (d'un pixel de l'image virtuelle à générée vers l'image réelle) pour l'image couleur ce qui permet d'éviter certain artefact visible si on utilisait simplement la "forward projection" pour l'image couleur directement : cf chap 3, "Background work on DIBR: State-of-the-art" de la thèse Layered Depth Images for Multi-View Coding((Jantet, Vincent. Layered depth images for multi-view coding. Diss. Université Rennes 1, 2012.)) disponible sur le lien : [[https://tel.archives-ouvertes.fr/tel-00758301/]] ==== La propagation de texture par superpixel ==== Voici quelques publi, où ils ont cherché à remplir les trous dus au manque d'information dans la depthmap ou dus au occlusion en utilisant les superpixels : * Chaurasia and al.((Chaurasia, Gaurav, et al. "Depth synthesis and local warps for plausible image-based navigation." ACM Transactions on Graphics (TOG) 32.3 (2013): 30.)) [[https://igl.ethz.ch/projects/IBR/spixel_warp_paper.pdf]]. La video : [[https://vimeo.com/62038845]] * Buyssens and al.((Buyssens, Pierre, et al. "Superpixel-based depth map inpainting for RGB-D view synthesis." Image Processing (ICIP), 2015 IEEE International Conference on. IEEE, 2015.)) [[https://tschumperle.users.greyc.fr/publications/tschumperle_icip15.pdf]] * Tezuka and al.((Tezuka, Tomoyuki, et al. "View synthesis using superpixel based inpainting capable of occlusion handling and hole filling." Picture Coding Symposium (PCS), 2015. IEEE, 2015.)) == Code pour superpixels disponibles : == OpenCV3 a des algorithmes de superpixels disponibles (LSC, SEEDS, SLIC) : [[http://docs.opencv.org/3.0-beta/modules/ximgproc/doc/superpixels.html#]] [[http://docs.opencv.org/master/df/d6c/group__ximgproc__superpixel.html#gsc.tab=0]] On en trouve aussi sur Matlab : [[http://www.peterkovesi.com/projects/segmentation/]] [[https://www.cs.sfu.ca/~mori/research/superpixels/]]