# ajoute au vote pour toutes les pixels les valeurs déterminé lors de la recherche des patchs
wid=nnf.input.width//7
foryinrange(nnf.input.height):
forxinrange(nb*wid,(nb+1)*widifnb!=7elsennf.input.width):# divise par 8 l'image dans la largeur pour calculer ses 8 parties en même temps grâce aux threads
xp,yp,dp=nnf.field[y,x]
wid=imRel.input.width//7
foryinrange(imRel.input.height):
forxinrange(nb*wid,(nb+1)*widifnb!=7elseimRel.input.width):# divise par 8 l'image dans la largeur pour calculer ses 8 parties en même temps grâce aux threads
xp,yp,dp=imRel.field[y,x]
w=MaskedImage.similarity[dp]
fordyinrange(-nnf.patchSize,nnf.patchSize):# pour toutes les pixels du patch qui ne sorte pas de l'image
fordyinrange(-imRel.patchSize,imRel.patchSize):# pour toutes les pixels du patch qui ne sorte pas de l'image
ys=yp+dy
ifnot0<=ys<nnf.input.height:
ifnot0<=ys<imRel.input.height:
continue
yt=y+dy
ifnot0<=yt<nnf.input.height:
ifnot0<=yt<imRel.input.height:
continue
fordxinrange(-nnf.patchSize,nnf.patchSize):
fordxinrange(-imRel.patchSize,imRel.patchSize):
xs=xp+dx
ifnot0<=xs<nnf.input.width:
ifnot0<=xs<imRel.input.width:
continue
xt=x+dx
ifnot0<=xt<nnf.input.width:
ifnot0<=xt<imRel.input.width:
continue
ifupscale:# si on change d'échelle prendre les 4 pixels autour pour faire comme un knn
defdistance(source,xs,ys,target,xt,yt,patchSize):# cette function est ici et pas dans function pour éviter les import circulaire et car ce fichier est le seul qui l'utilise
# calcule la distance entre deux patch (pas la distance physique mais la distance des valeurs de leurs pixels)
# en utilisant la somme des erreurs au carré
# la valeurs maximal de cette fonction est MaskedImage.DSCALE et n'est retourné en pratique presque que quand