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