Étape 3: Vérifiez vos résultats : Comment faire pour écrire votre propre version de ciment et de le tester pour voir comment il fonctionne !
Comment savons-nous comment ciment fonctionne ?
Une manière de tester c’est de prendre 3 photos d’une scène ou un objet éclairé par 2 feux, comme indiqué ci-dessus (de notre ICIP2004 papier ; voir référence à la fin du livre).
La première image, l’appel « v1.jpg », voilà une photo prise avec une lumière allumée. Appelez cela une lampe 1. Dans notre cas, c’est la lampe à gauche de notre espace de studio (Remarquez comment il jette des ombres vers la droite de leurs objets correspondants).
La deuxième photo, l’appel il « v2.jpg », est une image avec cette lumière éteinte et une autre lumière allumée, par exemple lampe 2 allumé, donc v2 est l’image comme éclairée seulement par la lampe 2. Dans notre cas, la lampe 2 est le droit de notre espace de studio (Remarquez comment il jette des ombres vers la gauche de leurs objets correspondants).
La troisième photo, appel il « v3.jpg », est une image avec les deux feux allumés ensemble. Remarquez comment nous voyons doubles ombres sur cette photo.
Maintenant essayez v2 et v1 de cimentage ensemble, appelez le résultat « v12.jpg ».
Maintenant test pour voir comment similaires v12 est à v3.
Pour lire ces images dans un tableau, la méthode la plus simple consiste à télécharger les images raw :
http://wearcam.org/instructableCEMENT/octave_scrip...
http://wearcam.org/instructableCEMENT/octave_scrip...
http://wearcam.org/instructableCEMENT/octave_scrip...
mais si vous avez une connexion réseau lente, juste saisir les images .jpeg et les décompresser :
images-gris v1.jpg > v1.pgm
images-gris v2.jpg > v2.pgm
images-gris v3.jpg > v3.pgm
puis modifiez l’en-tête afin d’avoir les données brutes, sauvées, disons que, comme les fichiers « v1 », « v2 » et « v3 ».
Vous pouvez le faire en Matlab, mais si vous êtes dans le véritable esprit de bricolage, vous préfèreront utiliser le programme gratuit + opensource « octave »: apt-get install octave et puis essayez ceci :
FID1=fopen('V1') ;
FID2=fopen('v2') ;
FID3=fopen('v3') ;
v1=fread(FID1,'uint8') ;
V1=Reshape(v1,2000,1312) ; %, ces dimensions sont en supposant que vous avez téléchargé depuis wearcam
v2=fread(FID2,'uint8') ;
V2=Reshape(v2,2000,1312) ;
v3=fread(FID3,'uint8') ;
V3=Reshape(v3,2000,1312) ;
ColorMap("Gray") ;
image(v1/4) ;
image(V2/4) ;
image(v3/4) ;
V12 = v1 + v2 ;
e=Sum(Sum((V12-v3).^2))
Qui renvoie :
e = 9.0995e + 09
Si vous avez téléchargé Instructables, les dimensions de l’image ont changé, par exemple si les dimensions sont quelque chose comme 1024 x 672, puis modifiez ce qui précède remodeler commandes pour :
V1=Reshape(v1,1024,672) ;
et de même pour la V2 et V3.
Nous avons juste deux cimenté les deux images de lampe ensemble dans l’Octave, en ajoutant simplement ensemble et testés pour voir combien ils sont semblables à l’image avec les lumières allumées.
Maintenant, au lieu d’ajouter les, essayez prenant la racine carrée de la somme de leurs carrés, c'est-à-dire comme une mesure de "distance" :
V12=sqrt(v1.^2+v2.^2) ;
e=Sum(Sum((V12-v3).^2))
et vous recevrez une erreur est produite beaucoup plus faible :
ans = 6.5563e + 08
Essayez maintenant leur cubage et en prenant la racine cubique ; ici, l’erreur est un peu plus basse encore :
ans = 2.2638e + 08
Plus généralement, nous pouvons élever d’un exposant, n et puis prendre les racines n-ièmes. Bien sûr n ne doit pas nécessairement être un entier. Nous allons donc essayer tout un tas de différentes valeurs de « n » et établir une courbe de l’erreur en fonction du « n ». Nous pouvons faire cela bien en écrivant une fonction simple de Octave dans un fichier nommé « err.m » :
fonction err=err(v1,v2,v3,N)
if(nargin~=4)
DISP ("err doit avoir des arguments d’entrée exactement 4: v1, v2, v3, n") ;
fin % si
if(Max(Size(N))) > 1
DISP ("err seule traite le vecteur N, pas de tableaux de N") ;
fin % si
pour k=1:length(N)
n=N(k) ;
V12=(v1.^n+v2.^n).^(1../n) ;
Err (k) = sum(sum((v12-v3). ^ 2)) ;
fin % pour
Maintenant nous pouvons tester ciment pour tout un tas de valeurs de « N » dans une longue liste, par exemple, nous allons essayer 1000 différentes valeurs de N allant de 1 à 10 :
N=(1:.01:10).' ;
L’erreur pour chacun d'entre eux se trouve dans :
e=Err(v1,v2,V3,N) ;
qui est au moins environ 3,27 ou 3.28 (près égal pour ces valeurs de N), alors disons que la valeur optimale de "N" est 3,275.
La valeur optimale de « N » dépend de la fonction de réponse d’un appareil photo en particulier, qui dans mon cas est le Nikon D2h.
D’autres qui ont fait cette valeurs Instructable rapport « N » pour les autres appareils, je propose la création d’un "tableau de Superposimetric Massive" tout comme "The Massive Dev graphique" pour le film :
Massive Superposimetric graphique:
Appareil photo marque et le modèle de la fonction de réponse nombre « n »
Nikon D2H 3,275
Nikon D60 3.3
Sony RX100 2.16
Canon Powershot S50 2.1875
Aller plus loin :
Nous avons utilisé une loi de puissance simple ici à titre illustratif, mais en fait, nous pouvons faire quelque chose de beaucoup plus puissant : nous pouvons effectivement débloquer les secrets de n’importe quelle caméra, façon non paramétrique, c'est-à-dire déterminer sa fonction de vraie réponse, trois images, comme ci-dessus, mais au lieu de résoudre un "n" nous résolvons pour les 256 entrées de quantimetric sur les fonction de réponse de l’appareil photo. Voir par exemple :