Pages

page 1 de 5

Gare_Toulouse_0002.JPG  Photogrammétrie : openMVG

29 07 2015

Par rapport à la solution avec VisualSFM, OpenMVG n'est pas graphique :
on l'utilise depuis la ligne de commande, et ça, c'est très cool :)

http://imagine.enpc.fr/~moulonp/openMVG/

https://github.com/openMVG/openMVG/

https://openmvg.readthedocs.org/en/latest/

 

Des images sont à venir, mais à première vue, openMVG semble très intéressant :

- moins dur à installer que VisualSFM
- fonctionne en ligne de commande (donc faisable sur un serveur)
- à l'air rapide pour traiter les photos et trouver les points (à vérifier mais les premiers tests semblent concluants...)
 


linux-debian.jpg  BlankWorld

29 07 2015

test C++ : OpenGL / rtAudio / GLSL

 

https://github.com/r33p/BlankWorld

 

pour collectionner des points 3D texturés on peut passer par la photogrammetrie, technique qui consiste à déterminer avec précision et grace à des photographies, les dimensions d'un objet, d'un lieu. Autrement dit, à partir de photos, on peut reconstituer un volume 3d texturé.
http://imagine.enpc.fr/~moulonp/openMVG/devCorner.html


Capture_du_2015-07-28_15_38_14.png  Photogrammétrie : visualSFM

28 07 2015

La photogrammétrie est une technique qui consiste à effectuer des mesures dans une scène, en utilisant la parallaxe obtenue entre des images acquises selon des points de vue différents. Recopiant la vision stéréoscopique humaine, elle a longtemps exploité celle-ci pour reconstituer le relief de la scène à partir de cette différence de points de vue. Actuellement, elle exploite de plus en plus les calculs de corrélation entre des images désormais numériques. Cette technique repose entièrement sur une modélisation rigoureuse de la géométrie des images et de leur acquisition afin de reconstituer une copie 3D exacte de la réalité.

Source : http://fr.wikipedia.org/wiki/Photogramm%C3%A9trie

 

Test avec VisualSFM, MeshLab, Blender.

 

Des photographies d'un pot de cactus, le but étant de faire le tour de l'objet en question, en gardant une lumière assez constante, une bonne netteté (penser à fermer le diaph), et à une distance et une profondeur de champ plus ou moins constante à l'objet :

Capture_du_2015-07-28_15_38_14.png

 

Après importation des photos dans ViualSFM, et suite à la reconstruction 3d, on obtient un nuage de points repérés, ainsi que l'emplacement des prises de vues :

Capture_du_2015-07-28_15_21_15.png

 

La suite avec Meshlab, qui va nous pemettre :
a) de générer une surface facetée (à partir des points) et
b) de générer la texture finale sous la forme d'une seule grande image à appliquer à notre surface


L'import dans Meshlab du modèle exporté depuis VisualSFM (.ply généré grace à CMVS) :

Capture_du_2015-07-28_15_12_37.png

 

La génération de la surface grace à l'algorythme "poisson"

Capture_du_2015-07-28_15_12_03.png

La surface maillée (facetée) finale obtenue avec Meshlab, il faudra exporter cette surface en .obj pour l'ouvrir facilement avec Blender (pensez aussi à exporter la texture) :

Capture_du_2015-07-28_15_12_43.png

L'import dans Blender de la surface, et application de la texture :

Capture_du_2015-07-28_15_27_02.png

Chaine de rendu (en résumé) :

 

VISUALSFM
- importer les images
- file > detect features
- bouton > compute missing matches
- bouton > CMVS

 

MESHLAB
- importer depuis le dossier CMVS exporté précédemment le fichier ***.out (pour avoir tout le projet, dont font partie toutes les images)
- supprimer le mesh, le remplacer par celui haute densité
- filter > clening and repairing > remove faces from non manifold edges
- parametrisation + texturing from registred rasters (cela donne une image de texture, composée de toutes les images précédemment ouvertes)
- filter > point set > surface reconstruction : poisson
- sauver le projet, exporter les meshs en .obj parce que cela sera facile pour blender de les importer

 

BLENDER
- importer le mesh .obj
- assigner comme texture notre image de texture
- passer en 'edit mode'
- splitter les vues, avoir une vue UV/Image editor, récupérer notre image de texture
 


Un OS Linux centré sur SFM :
http://nuxsfm.sourceforge.net/wiki/index.php/Main_Page

tutorial sur la génération d'objets 3d à partir d'une série de photographies :
http://combiencaporte.blogspot.fr/2012/07/la-photogrammetrie-visualsfm-et-meshlab.html

pas évident à compiler, je m'en suis sorti avec les explications du labomedia :
http://wiki.labomedia.org/index.php/Reconstruction_3D_avec_VisualSFM
plus un petit package sorti à point nommé :
https://launchpad.net/~richi-paraeasy/+archive/ubuntu/ppa/+packages
et ce lien qui aide bien pour pour compiler CMVS :
https://github.com/pmoulon/CMVS-PMVS

Et aussi ce script qui est pas mal :
https://github.com/anders-dc/vsfm-linux-x86_64

NOTE : M'enfin, dans tous les cas, pour installer/compiler sous debian, va falloir régler quelques $PATHS...

 

 

Queques liens divers :
CloudCompare, a 3D point cloud and mesh processing software, Open Source Project :
http://www.danielgm.net/cc/

 

http://wedidstuff.heavyimage.com/index.php/2013/07/12/open-source-photogrammetry-workflow/
http://makezine.com/2013/08/21/diy-photogrammetry-open-source-alternatives-to-123d-catch/

 


Capture_d_e_cran_2015-07-25_a__11.24.45.png  théatre garonne - less is more

25 07 2015

2 mois après le THSF ayant comme thème "less is more",
le théatre garonne lance sa saison 2015-2016 avec pour thème "less is more" :
http://www.theatregaronne.com/sites/default/files/journal/tg13x18prog_1206_fx_bd_2.pdf
sympa la dédicace :)

 

Capture_d_e_cran_2015-07-25_a__11.24.45.png


Rome_LPM_2007_Workshop_PureData_rep_Lluis_Lucas.jpg  THSF 2015 - Sylvain Courreges

25 07 2015

Programmée dans le cadre du THSF 2015 cette conférence de Sylvain Courrege, à pour sujet "la lutte anti insurrectionnelle".
Ou comment se sont constitués les théories de surveillances massive, à un moment ou l'on n'avaient pas de micro ordinateurs ; à mettre en lien bien évidemment avec la "Loi sur la renseignement" récemment votée en France.
Ou l'on apprend également d'où vient l'article 49.3 de notre constitution.

Très content d'avoir programmé cette conférence pour l'édition 2015 du festival, Sylvain apportant un contenu politique percutant.

 

liens :
mixart-myrys.org
thsf.tetalab.org
tvbruits.org

 


hacheuur_0.24.gare.20150723-09h20m53s.png  haacheuur de juillet 2015

23 07 2015

hacheuur_0.24.gare.20150723-09h20m53s.png

hacheuur_0.24.gare.20150723-09h20m57s.png


hacheuur_0.24.gare.20150723-09h21m02s.png

hacheuur_0.24.gare.20150723-09h21m08s.png

hacheuur_0.24.gare.20150723-09h21m13s.png

hacheuur_0.24.gare.20150723-09h21m18s.png

 

#!/usr/bin/python
# coding: utf-8
import sys
import Image
import random
import os
import ImageDraw
import ImageFont
import ImageFilter
from time import gmtime, strftime
# modifs du 30/10/2013
import ImageEnhance

#ouvertrure de l'image source et conversion en mode 1bit
#im1 = Image.open(str(sys.argv[1])).convert('1')
im1 = Image.open(str(sys.argv[1]))
im2 = im1.copy()
#im3 = Image.new("1", (im1.size[0], im1.size[1]))
#im4 = Image.new("1", (im1.size[0]*3, im1.size[1]))

im3 = Image.new("RGBA",(im1.size[0], im1.size[1]))
im4 = Image.new("RGBA",(im1.size[0]*1, im1.size[1]))

Larg = im1.size[0]
Haut = im1.size[1]

for i in range(10):
    
    # nombre aleatoire compris dans les limites de l'image
    def randHaut(): return random.randint(0, im1.size[1])
        
    # constitution de la liste des tranches horizontales
    # genre comme si qu'on avait un 16 pistes :)
    randomCoupeHauteur = [0, \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    randHaut(),randHaut(),randHaut(),randHaut(),randHaut(), \
    im1.size[1]]

    # rangement des valeurs des plus petites au plus grandes
    randomCoupeHauteur.sort()
    
    # DEBUG
    liste = []

    # les hachures
    def Hacheur(haut, bas) :
        n=0
        while n<im4.size[0] :
        
            # constitution d'une liste de dimensions et de repetitions
            randomListe = [(2560,1),(1280,2),(640,4),(320,8),(320,3),(160,12) \

,(160,6),(120,8),(80,24),(40,16),(20,32),(20,16),(10,32),(10,16),(5,64)]
            # repeter ce qui suit 2 ou 3 fois pour realiser non pas
            # un sample, mais carrement ue sequence


# 8>< ------------------------------------------------------------------            
            # tirage au sort
            #randomFacteur = random.randint(0, len(randomListe)*3)
            choix = 0
            
            # DEBUG    
            #print len(randomListe)*3
            
            # ponderation du tirage au sort
            randomFacteur = random.randint(0, len(randomListe)-1)
            
            # DEBUG
            #liste.append(choix)
            
            # assignation des valeurs (paires) finales choisies
            randomCopyLargFinal = randomListe[randomFacteur][0]            
            repeat = randomListe[randomFacteur][1]
    
            # positionnement de la copie, aleatoirement, entre 0 et la largeur totale de l'image
            randomCopyPosi = random.randint(0, (im1.size[0]-randomCopyLargFinal))

            cx1 = randomCopyPosi
            cx2 = randomCopyPosi + randomCopyLargFinal
            # decoupage du sample
            im3 = im2.crop((cx1,haut,cx2,bas))
# 8>< ------------------------------------------------------------------
                
            draw = ImageDraw.Draw(im4)        
            loop = 0
            
            #collage, n fois, du sample
            while loop<repeat:    
                px1 = n
                px2 = n + randomCopyLargFinal
                
                draw = ImageDraw.Draw(im3)
                
                im4.paste(im3, (px1, haut, px2, bas))
                
                n = n + randomCopyLargFinal
                loop = loop + 1

    # les tranches horizontales intactes soulignees de blanc                 
    def TrancheHorizontale() :
        # tirage au hasard de la bande copiee
        pos = random.randint(0, im1.size[1]-im1.size[1]/20)
        # copiage
        im5 = im2.crop((0,pos,im1.size[0],pos+im1.size[1]/20))
        
        # le soulignage en blanc
        draw = ImageDraw.Draw(im5)
        draw.line((0, im5.size[1]-1, im5.size[0], im5.size[1]-1), fill="black")
        draw.line((0, 1, im5.size[0], 1), fill="black")
        
        # collage    
        im4.paste(im5, (0,pos,im1.size[0],pos+im1.size[1]/20))

    # HAACHEUUR
    for i in range(len(randomCoupeHauteur)-1):
        Hacheur(randomCoupeHauteur[i], randomCoupeHauteur[i+1])
   
            
    
    # CTRL + S
    scriptpy = sys.argv[0]
    script = scriptpy[:-3]
    im4.save(script+"."+strftime("%Y%m%d-%Hh%Mm%Ss", gmtime())+".png")
   


IMG_4255_laFranqui.JPG  la franqui

08 07 2015

IMG_4255_laFranqui.JPG


IMG_3722.opti.jpg  berssaptera.remix

27 06 2015

une version en cours de développement de haacheuur,
avec comme source berssaptera (photographie numérique, décembre 2014)

Image originale :

IMG_3722.opti.jpg

Image produite par Haacheuur.py :

berssaptera.remix.png

 

Si l'on zoome sur la partie ici soulignée en bleu ciel :

berssaptera.remix.zoom860.png

 

Cela donne nous cette image, vue à taille réelle (100%) :

 

berssaptera.remix.sample.png


tl09.jpg  Drasah

27 06 2015

vidéo enregistrée lors de sessions de répétitions, au format DVD, lors d'une résidence à Mixart Myrys été 2014 avec Thomas Bigot.


Routine d'encodage pour le web avec la ligne FFMPEG suivante :

ffmpeg -i VTS_01_1.VOB -codec:v libvpx -quality good -cpu-used 0 -b:v 2000k -maxrate 2000k -bufsize 4000k -qmin 10 -qmax 42 -vf scale=-1:720 -threads 4 -codec:a libvorbis -b:a 128k sortie_720p.webm

A propos de Drasah :
- un autre article
- le répertoire de ressources

 


pylone.jpg  pylones

25 06 2015

pylone.jpg

je sais pas...

Localisation de la prise de vue :
https://www.google.fr/maps/place/......737.5%22E/@43.18708,2.660411,644m/data=!3m2!1e3!4b1!4m2!3m1!1s0x0:0x0



page 1 de 5


Cumulonimbus.fr - 2015 - license cc by-nc-sa 3.0 fr
Dernière mise à jour : 2015-07-31 12:10:09