avancée unset additive v2
This commit is contained in:
parent
325a48b299
commit
85f15cc3d6
Binary file not shown.
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
BIN
code/new.bmp
BIN
code/new.bmp
Binary file not shown.
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
|
@ -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;
|
Loading…
Reference in New Issue