photo numerique, vignettage et panormiques ...

Top Page

Reply to this message
Author: Jérôme Kieffer
Date:  
To: guilde
Subject: photo numerique, vignettage et panormiques ...
Salut a tous,

Désespéré que clens fasse tout sauf ce dont j'avais besoin, je me suis
décidé a prendre ipython et PIL et j'ai écrit un script qui devrait
permettre de generer un filtre adapté à n'importe quel appareil photo,
il faut juste prendre en photo un ciel sans nuage, le programme genere
un dégradé de gris radial qui permet avec gimp (ou bientot avec python +
PIL) de faire une précorrection sur le vignettage des photos (filtre
diviser de gimp).

c'est du brut de décoffrage mais une fois que l'on a le filtre pour son
objectif, on a plus besoin du script ....

#!/usr/bin/python

import os,Image,ImageFilter,math


        
def d(x,y):
    return  int(round(math.sqrt(x*x+y*y)))


def mean(arr):
    s=0
    for i in arr: s+=i
    return 1.0*s/len(arr)


def F2(a,b,c,d,e,f,g,h,i,j,k):
#      coefs=[-0.084, 0.021, 0.103, 0.161, 0.196, 0.207, 0.196,
#      0.161,0.103, 0.021,
# -0.084]
    coefs=11*[1.0/11]
    return (a*coefs[0] + b*coefs[1] + c*coefs[2] + d*coefs[3] + e*coefs[4]
+ f*coefs[5] + g*coefs[6] + h*coefs[7] + i*coefs[8] +j*coefs[9] +
k*coefs[10]) 


def lisse(x):
    """Does the 2nd order savitsky Golay smoothing"""
    tx = ([ x[0] ] * 5)  + x + ([ x[-1] ] * 5 )
    rx = []
    for i in range(5,len(tx)-5):
                rx.append(apply(F2,tuple(tx[i-5:i+6])))
    return rx




I=Image.open("11h30m14-u300D.jpg")
J=I.convert("L")
(x,y)=I.size
xm=x/2
ym=y/2
F=Image.new("L", I.size, 255)



t={}

for i in range(d(xm,ym)+1):
    t[i]=[]


for l in range(10):
    for i in range(x):
        t[d(i-xm,l-ym)].append(J.getpixel((i,l)))


m=[0]*(d(xm,ym)+1)
for i in t:    
    if len(t[i])>0:m[i]=mean(t[i])


mm=max(m)

for i in range(d(xm,ym)+1):
    if m[i]==0:m[i]=mm


n=m[:]
for i in range(len(m)):
    n[i]=m[i]*255/mm
o=lisse(lisse(lisse(lisse((n)))))



#f=open("test.txt","w")
#for i in range(len(n)):
#    f.write("%s    %s    %s    %s\n"%(i,n[i],o[i],q[i]))
#f.close()


for i in range(x):
    for j in range(y):
        F.putpixel((i,j),o[d(i-xm,j-ym)])


F1=F.filter(ImageFilter.SMOOTH_MORE())
F1.save("filter.png")

--
Jérôme Kieffer