avancée unset additive v2

This commit is contained in:
xdrm-brackets 2015-09-28 11:53:02 +02:00
parent 325a48b299
commit 85f15cc3d6
3 changed files with 8 additions and 7 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

View File

@ -144,6 +144,8 @@ class Additive_Noise:
def unset2(self, pixelMap, seuil=10): def unset2(self, pixelMap, seuil=10):
width = len( pixelMap[0] ) width = len( pixelMap[0] )
height = len( pixelMap ) height = len( pixelMap )
ordre = 3 # ordre matrice carré
ordreN = (ordre**2 - 1)/2
# matrice qui sera retournée # matrice qui sera retournée
cleanMatrix = [] cleanMatrix = []
@ -151,7 +153,7 @@ class Additive_Noise:
while seuil >= 1: # si le seuil n'est pas un pourcentage, on le met en pourcentage while seuil >= 1: # si le seuil n'est pas un pourcentage, on le met en pourcentage
seuil /= 100.0; seuil /= 100.0;
seuil *= 256*8 seuil *= 256 * ordreN
@ -209,7 +211,7 @@ class Additive_Noise:
bMoy += pix.b; bMoy += pix.b;
count += 1 count += 1
# ajout aux poids statistiques # ajout aux poids statistiques
neighboursAbsoluteDiff.append( abs(pix.r+pix.g+pix.b - pMoy)/3 ); neighboursAbsoluteDiff.append( abs( (pix.r+pix.g+pix.b)/3 - pMoy ) );
# on garde que la moitié la plus petite # on garde que la moitié la plus petite
statisticWeight = 0; statisticWeight = 0;
@ -217,11 +219,10 @@ class Additive_Noise:
neighboursAbsoluteDiff.sort() # on trie la liste neighboursAbsoluteDiff.sort() # on trie la liste
# on récupère la somme de la moitié des éléments les plus petits (car triée) # on récupère la somme de la moitié des éléments les plus petits (car triée)
for infVal in range(0, (3**2 - 1)/2): for infVal in range(0, ordreN):
if infVal >= len(neighboursAbsoluteDiff)-1: # si liste vide on arrête if infVal >= len(neighboursAbsoluteDiff): # si liste vide on arrête
break; break;
# on effectue la somme statisticWeight += neighboursAbsoluteDiff[infVal] # on effectue la somme
statisticWeight += neighboursAbsoluteDiff[infVal]
# si il y a au moins un pixel autour (normalement tjs mais évite l'erreur div par zéro) # si il y a au moins un pixel autour (normalement tjs mais évite l'erreur div par zéro)
@ -232,7 +233,7 @@ class Additive_Noise:
bMoy = int( bMoy / count ) bMoy = int( bMoy / count )
# si la couleur est trop "différente" (dépend du seuil) alors on remplace sa couleur par la moyenne des couleurs alentours # si la couleur est trop "différente" (dépend du seuil) alors on remplace sa couleur par la moyenne des couleurs alentours
if statisticWeight < seuil: if statisticWeight > seuil:
cleanMatrix[y][x].setRGB(rMoy, gMoy, bMoy); cleanMatrix[y][x].setRGB(rMoy, gMoy, bMoy);
return cleanMatrix; return cleanMatrix;