! Calcul la matrice de correlation entre l'image a et l'image b
! seul les pixels sur l'image a compris entre level1 et level2 sont utilisées
subroutine XcorrMASK(level1,level2,a,am,an,b,bm,bn,c)
implicit none
integer::level1,level2,i,j,am,an,bm,bn,num
real::avg,arms,bvg,brms
logical,dimension(am,an)::maska
real,dimension(am,an)::tmp
integer,dimension(am,an)::a,bp
integer,dimension(bm,bn)::b
real,dimension(bm-am+1,bn-an+1)::c
! calcul du mask
maska=.false.
do i=1,am
do j=1,an
if((a(i,j)>=level1).and.(a(i,j)<=level2)) maska(i,j)=.true.
enddo
enddo
num=count(maska)
!print*,'num',num,am*an-num
avg=sum(a,mask=maska)/float(num)
tmp=(float(a)-avg)**2
arms=sqrt(sum(tmp,mask=maska)/float(num))
!print*,'avg,arms',avg,arms,sum(tmp)
do i=1,bm-am+1
do j=1,bn-an+1
bp(1:am,1:an)=b(i:i+am-1,j:j+an-1)
bvg=sum(bp,mask=maska)/float(num)
tmp=(float(bp)-(bvg))**2
brms=sqrt(sum(tmp,mask=maska)/float(num))
c(i,j)=(sum(a*bp,mask=maska)-num*avg*bvg)/(arms*brms*num)
! print*,'bvg,brms',bvg,brms,c(i,j)
enddo
enddo
end subroutine XcorrMASK