pro blurring
 
; leggiamo l'immagine
fits_read,'D:\Ba\Ei1\phantom.fits',img
 
; dimensione dell'immagine
s=size(img)
print,'size',s
n_pix=s[2]
 
; definizione degli array
blur=make_array(n_pix,n_pix,/double,value=0.)
psf=make_array(n_pix,n_pix,/double,value=0.)
 
;creazione psf (si puņ anche leggere da file)
for i =n_pix/2,n_pix/2+19 do begin
psf[i,n_pix/2]=1./20.
end
print,'min psf',min(psf)
print,'massimo psf', max(psf)
print,'somma sui pixel' , total(psf)
 
;blurring, creazione della funzione di trasferimento
tf=fft(shift(psf,n_pix/2,n_pix/2),-1,/double)*n_pix*n_pix
print,'max TF',max(abs(tf))
print,'min TF', min(abs(tf))
print,'cond',  max(abs(tf))/ min(abs(tf))
 
;visualizzazione funzione di trasferimento
window,0,xsize=n_pix,ysize=n_pix
tvscl,alog10(abs(tf))
 
;traformata di Fourier dell'immagine
tfimg=fft(img,-1,/double)*n_pix*n_pix
 
;convoluzione tra immagine e funzione di trasferimento
blur=(fft((tf*tfimg),1,/double))/n_pix/n_pix
 
;scrittura immagine blurrata
fits_write,'blur_nonoise.fts',float(blur)
 
;visualizzazione del risultato
window,1,xsize=n_pix,ysize=n_pix
tvscl,float(blur)
 
;aggiunta del noise
noise=randomu(1.,n_pix,n_pix,normal=0.2*max(img))
blurnoise=blur+noise
 
;scrittura dell'immagine blurrata
fits_write,'blur.fts',float(blurnoise)
 
;visualizzazione del risualtato
window,2,xsize=n_pix,ysize=n_pix
tvscl,float(blurnoise)-float(blur)
 
end