simplification

master
Ludovic CASTIGLIA 4 months ago
parent 067d1000f6
commit be0997a6fd

@ -25,14 +25,10 @@ def doTheInpainting(img,mask,radius):
targetToSource.input = newTarget
target = newTarget
newTarget = None
for y in range(source.height):
for x in range(source.width):
if not source.containsMask(x,y,radius):
sourceToTarget.field[y,x] = (x,y,0)
for y in range(target.height):
for x in range(target.width):
if not source.containsMask(x,y,radius):
targetToSource.field[y,x] = (x,y,0)
sourceToTarget.minimize(iterNnf)
targetToSource.minimize(iterNnf)

@ -75,9 +75,7 @@ class MaskedImage:
ys = int(y*self.height/newH)
if not self.mask[ys,xs]:
newImage.image[y,x,0] = self.image[ys,xs,0]
newImage.image[y,x,1] = self.image[ys,xs,1]
newImage.image[y,x,2] = self.image[ys,xs,2]
newImage.image[y,x] = self.image[ys,xs]
newImage.mask[y,x] = False
else:
newImage.mask[y,x] = True

@ -30,5 +30,3 @@ img = doTheInpainting(img,mask,2)
plt.imshow(img)
plt.title("image final")
plt.pause(20)

@ -9,10 +9,11 @@ class Nnf:
self.patchSize = patchSize
def randomize(self):
self.field = np.zeros((self.input.height, self.input.width, 3), dtype=int)
for x in range(self.input.width):
for y in range(self.input.height):
self.field[y,x] = (random.randint(0,self.output.width),random.randint(0,self.output.height),MaskedImage.DSCALE)
self.field[:,:,2] += MaskedImage.DSCALE
self.field[:,:,0] = np.random.randint(0,self.output.width,self.input.width)
self.field[:,:,1] = np.random.randint(0,self.output.height,self.input.height)
self.initialize()
def initializeFromNnf(self,nnf):
@ -30,8 +31,8 @@ class Nnf:
for y in range(self.input.height):
for x in range(self.input.width):
self.field[y,x,2] = self.distance(x,y,self.field[y,x,0],self.field[y,x,1])
iter=0
maxIter =10
iter= 0
maxIter = 10
while (self.field[y,x,2] == MaskedImage.DSCALE and iter<maxIter):
self.field[y,x] = (random.randint(0,self.output.width),random.randint(0,self.output.height),self.distance(x,y,self.field[y,x,0],self.field[y,x,1]))
iter += 1
@ -54,9 +55,7 @@ class Nnf:
yp = self.field[y,x-direction,1]
dp = self.distance(x,y,xp,yp)
if (dp<self.field[y,x,2]):
self.field[y,x,0] = xp
self.field[y,x,1] = yp
self.field[y,x,2] = dp
self.field[y,x] = (xp,yp,dp)
# verticale
if (0<y-direction<self.input.height):
@ -64,9 +63,7 @@ class Nnf:
yp = self.field[y-direction,x,1] + direction
dp = self.distance(x,y,xp,yp)
if (dp<self.field[y,x,2]):
self.field[y,x,0] = xp
self.field[y,x,1] = yp
self.field[y,x,2] = dp
self.field[y,x] = (xp,yp,dp)
# recherche random
zoneRecherche = max(self.output.height,self.output.width)
@ -77,15 +74,12 @@ class Nnf:
yp = max(0,min(self.output.height-1,yp))
dp = self.distance(x,y,xp,yp)
if (dp<self.field[y,x,2]):
self.field[y,x,0] = xp
self.field[y,x,1] = yp
self.field[y,x,2] = dp
self.field[y,x] = (xp,yp,dp)
zoneRecherche = int(zoneRecherche/2)
def distance(self,x,y,xp,yp):
return distance(self.input,x,y,self.output,xp,yp,self.patchSize)
def distance(source, xs, ys, target, xt, yt, patchSize):
ssd_max = 9 * 255 * 255
distance, wsum = 0, 0

Loading…
Cancel
Save