Appendice
Di seguito viene riportato il listato del programma in IDL:
pro prodottonew ;prodotto tra immagine e pattern di campo common varia, x,y,z,a,tr
M0=double(1.26E-6) k=M0/(4.0*!dpi)
READ, 'inserisci il raggio delle spire, in millimetri ',input a=float(input)/1000.
print,'a=',a
READ, 'inserisci il valore della corrente, in Ampere ',input I=input
print,'I=',I
READ, 'inserisci la coordinata z, in millimetri ',input z=float(input)/1000 print,'z=',z Bvett=dblarr(256,256) xvett=dblarr(256) yvett=dblarr(256) tr=0.5 for w=1,255 do begin x=(1./256.)*w xvett[w]=100*x for p=1,255 do begin y=(1./256.)*p yvett[p]=100*y Bx1=k*I*(QSIMP('ICS1',0.0,!DPI/2,eps=1.E-3,/double)+QSIMP('ICS1',!DPI/2,!DPI,eps=1.E-3,/double)+$ QSIMP('ICS1',!DPI,(3./2)*!DPI,eps=1.E-3,/double)+QSIMP('ICS1',(3./2)*!DPI,2.*!DPI,eps=1.E-3,/double)) By1=k*I*(QSIMP('IPSILON1',0.0,!DPI/2,eps=1.E-3,/double)+QSIMP('IPSILON1',!DPI/2,!DPI,eps=1.E-3,/double)+$ QSIMP('IPSILON1',!DPI,(3./2)*!DPI,eps=1.E-3,/double)+QSIMP('IPSILON1',(3./2)*!DPI,2.*!DPI,eps=1.E-3,/double)) Bz1=k*I*(QSIMP('ZETA1',0.0,!DPI/2,eps=1.E-3,/double)+QSIMP('ZETA1',!DPI/2,!DPI,eps=1.E-3,/double)+$ QSIMP('ZETA1',!DPI,(3./2)*!DPI,eps=1.E-3,/double)+QSIMP('ZETA1',(3./2)*!DPI,2.*!DPI,eps=1.E-3,/double))
Bx=Bx1 By=By1 Bz=Bz1 Bvett[p,w]=SQRT(Bx^2+By^2+Bz^2) endfor endfor ;Bvett=Bvett[28:100,28:100] Bvett=Bvett/max(Bvett) aa=dblarr(256,256) ;fantoccio aa(1:254,1:254)=0 aa(20:234,20:234)=250 aa(70:184,70:184)=180 aa(120:136,120:136)=230 window,1 tv,aa Bvett=congrid(Bvett,512,512) ;campo Bvett1=Bvett(0:255,0:255) Bvett2=Bvett(0:255,256:511) Bvett3=Bvett(256:511,256:511) Bvett4=Bvett(256:511,0:255)
a1=aa*Bvett1 ;prodotto fantoccio campo1 a1=a1*255/max(a1)
window,2 pippo1=fix(a1)
tvscl,congrid(pippo1,256,256)
a2=aa*Bvett2 ;prodotto fantoccio campo2 a2=a2*255/max(a2)
window,3 pippo2=fix(a2)
tvscl,congrid(pippo2,256,256)
a3=aa*Bvett3 ;prodotto fantoccio campo3 a3=a3*255/max(a3)
window,4 pippo3=fix(a3)
tvscl,congrid(pippo3,256,256)
a4=aa*Bvett4 ;prodotto fantoccio campo4 a4=a4*255/max(a4)
window,5 pippo4=fix(a4)
window,6 contour,1.0E4*Bvett1,xvett,yvett,nlevels=20,isotropic=1,/fill,xtitle='x(cm)',y title='y(cm)' contour,1.0E4*Bvett1,xvett,yvett,nlevels=20,isotropic=1,/follow,/overplot window,7 contour,1.0E4*Bvett2,xvett,yvett,nlevels=20,isotropic=1,/fill,xtitle='x(cm)',y title='y(cm)' contour,1.0E4*Bvett2,xvett,yvett,nlevels=20,isotropic=1,/follow,/overplot window,8 contour,1.0E4*Bvett3,xvett,yvett,nlevels=20,isotropic=1,/fill,xtitle='x(cm)',y title='y(cm)' contour,1.0E4*Bvett3,xvett,yvett,nlevels=20,isotropic=1,/follow,/overplot window,9 contour,1.0E4*Bvett4,xvett,yvett,nlevels=20,isotropic=1,/fill,xtitle='x(cm)',y title='y(cm)' contour,1.0E4*Bvett4,xvett,yvett,nlevels=20,isotropic=1,/follow,/overplot white=!p.color window,10 plot,xvett,a1[*,128],background=white,color=0,xtitle='dimensione immagine (pixel)',ytitle='intensità di segnale' noised=40*abs(randomn(seed,256,256))
ns1=(a1+noised) ;somma del rumore1 window,16
tvscl,ns1 iimage,ns1
ns2=a2+1.5*noised ;somma del rumore2 window,17
tvscl,ns2 iimage,ns2
ns3=a3+2*noised ;somma del rumore3 window,18
tvscl,ns3 iimage,ns3
ns4=a4+2.5*noised ;somma del rumore4 window,19
tvscl,ns4 iimage,ns4
ss1=dblarr(256,256) ;calcolo SOS ss1=ns1*ns1
ss2=ns2*ns2 ss3=dblarr(256,256) ss3=ns3*ns3 ss4=dblarr(256,256) ss4=ns4*ns4 sq=dblarr(256,256) sq=ss1+ss2+ss3+ss4 sos=dblarr(256,256) sos=sqrt(sq) window,15 tvscl,sos iimage,sos
ns1q=dblarr(256,256) ;SOS equalizzata ns1q=ns1*ns1 ns2q=dblarr(256,256) ns2q=ns2*ns2 ns3q=dblarr(256,256) ns3q=ns3*ns3 ns4q=dblarr(256,256) ns4q=ns4*ns4 nnss=dblarr(256,256) nnss=(ns1q+0.45*ns2q)+0.26*ns3q+0.17*ns4q) sose=dblarr(256,256) sose=sqrt(nnss) window,20 tvscl,sose iimage,sose
diff=dblarr(256,256) ;differenza tra sos e sos equalizzata diff=sos-sose
window,21 tvscl,diff
sma=smooth(ns1,20) ;filtro di smoothing sulla prima immagine
smb=smooth(ns2,20) ;filtro di smoothing sulla seconda immagine
smc=smooth(ns3,20) ;filtro di smoothing sulla terza immagine
smd=smooth(ns4,20) ;filtro di smoothing sulla quarta immagine sma=float(sma) smb=float(smb) smc=float(smc) smd=float(smd) window,22 wset=22 tvscl,sma iimage,sma window,23 wset=23 tvscl,smb window,24 wset=24 tvscl,smc window,25 wset=25 tvscl,smd smaq=dblarr(256,256) for i=0,255 do begin for j=0,255 do begin
smaq[i,j]=sma[i,j]*sma[i,j] ;quadrato dell'immagine a smoothata (campo di s1)
endfor endfor
smbq=dblarr(256,256) for i=0,255 do begin for j=0,255 do begin
smbq[i,j]=smb[i,j]*smb[i,j] ;quadrato dell'immagine b smoothata (campo di s2)
endfor endfor
smcq=dblarr(256,256) for i=0,255 do begin for j=0,255 do begin
smcq[i,j]=smc[i,j]*smc[i,j] ;quadrato dell'immagine a smoothata (campo di s3)
endfor endfor
for i=0,255 do begin for j=0,255 do begin
smdq[i,j]=smd[i,j]*smd[i,j] ;quadrato dell'immagine a smoothata (campo di s4) endfor endfor num1=dblarr(256,256) num1=sma*ns1+smb*ns2+smc*ns3+smd*ns4 den1=sqrt(smaq+smbq)+smcq+smdq) risu1=dblarr(256,256) for i=0,255 do begin for j=0,255 do begin
if (den1[i,j] gt 0.0) then begin
risu1[i,j]=num1[i,j]/den1[i,j] ;formula SoS super end else begin
; ;fina[i,j]=a[i,j] endelse endfor endfor window,26 wset=26 tvscl,risu1 numeq=dblarr(256,256) numeq=sma*ns1+smb*ns2*0.24+smc*ns3*0.11+smd*ns4*0.069 den1=sqrt(smaq+smbq)+smcq+smdq) risueq=dblarr(256,256) for i=0,255 do begin for j=0,255 do begin
if (den1[i,j] gt 0.0) then begin
risueq[i,j]=numeq[i,j]/den1[i,j] ;formula SoS super equalizzata end else begin
; ;fina[i,j]=a[i,j] endelse endfor endfor window,27 wset=27 tvscl,risueq diff1=dblarr(256,256) diff1=risueq-risu1 window,28 wset=28 tvscl,diff1
xxvett=dblarr(256) for m=0,255 do begin xxvett[m]=m endfor white=!p.color window,29 wset=29 plot,xxvett,risu1[*,128],background=white,color=0,xtitle='dimensione immagine (pixel)',ytitle='intensità di segnale'
oplot,z[*,128],color=255 ;rossa oplot,risueq[*,128],color=255*255 ;celeste white=!p.color window,30 wset=30 p1=sma[45:211,128] p2=Bvett1[45:211,128] save,p1,p2 plot,xxvett,p1/max(p1),background=white,color=0,xtitle='dimensione immagine (pixel)',ytitle='intensità di segnale'
oplot,p2/max(p2),color=255*255 ;celeste
equ1=0.24 equ2=0.11
equ3=0.069 ;rapporto di equalizzazione lh=8 ;larghezza finestra di Hanning h=hanning(lh,lh,alpha=0.5) ;filtro di Hanning ns2=ns2*equ1
ns3=ns3*equ2
ns4=ns4*equ3 ;equalizzazione immagini ae=dblarr(256+lh,256+lh) be=dblarr(256+lh,256+lh) ce=dblarr(256+lh,256+lh) de=dblarr(256+lh,256+lh) ae[lh/2:255+lh/2,lh/2:255+lh/2]=ns1 ;zero-filling be[lh/2:255+lh/2,lh/2:255+lh/2]=ns2 ce[lh/2:255+lh/2,lh/2:255+lh/2]=ns3 de[lh/2:255+lh/2,lh/2:255+lh/2]=ns4 ahe=convol(ae,h) ;convoluzioni bhe=convol(be,h) che=convol(ce,h)
dhe=convol(de,h)
ah=ahe[lh/2:255+lh/2,lh/2:255+lh/2] ;immagini filtrate (campi delle bobine) window,27 tvscl,ah bh=bhe[lh/2:255+lh/2,lh/2:255+lh/2] window,28 tvscl,bh ch=che[lh/2:255+lh/2,lh/2:255+lh/2] window,29 tvscl,ch dh=dhe[lh/2:255+lh/2,lh/2:255+lh/2] window,30 tvscl,dh num2=dblarr(256,256) den2=dblarr(256,256) num2=ah*ns1+bh*ns2+ch*ns3+dh*ns4 den2=sqrt(ah*ah+bh*bh)+ch*ch+dh*dh) sup=dblarr(256,256)
for i=0,255 do begin for j=0,255 do begin
if (den2[i,j] gt 0.0) then begin
sup[i,j]=num2[i,j]/den2[i,j] ;formula SoS super equalizzata con Hanning endif endfor endfor window,31 tvscl,sup iimage,sup end function ICS1,T
common varia, x,y,z,a,tr
return, (a*z*cos(T))/((x-a*cos(T)-tr)^2+(y-a*sin(T)-tr)^2+z^2)^(3./2) end
function IPSILON1,T common varia, x,y,z,a,tr
return, (a*z*sin(T))/((x-a*cos(T)-tr)^2+(y-a*sin(T)-tr)^2+z^2)^(3./2) end
function ZETA1,T
return, (a^2-a*(y-tr)*sin(T)-a*(x-tr)*cos(T))/((x-a*cos(T)-tr)^2+(y-a*sin(T)-tr)^2+z^2)^(3./2)