Salt&Pepper set/unset à optimiser (1 fonction pour rebords et 1 fct pour enlever tout les pixels s&p
This commit is contained in:
parent
999f8580ae
commit
2e6482055a
|
@ -29,14 +29,13 @@ class Noise:
|
||||||
width = len( pixelMap[0] )
|
width = len( pixelMap[0] )
|
||||||
height = len( pixelMap )
|
height = len( pixelMap )
|
||||||
|
|
||||||
seuil = int( .5 * 256 );
|
seuil = int( .01 * 256 );
|
||||||
|
|
||||||
for y in range(0, len(pixelMap)):
|
for y in range(0, len(pixelMap)):
|
||||||
for x in range(0, len(pixelMap[y])):
|
for x in range(0, len(pixelMap[y])):
|
||||||
pMoy = ( pixelMap[y][x].r + pixelMap[y][x].g + pixelMap[y][x].b ) / 3
|
pMoy = ( pixelMap[y][x].r + pixelMap[y][x].g + pixelMap[y][x].b ) / 3
|
||||||
# traitement si couleur extreme
|
# traitement si couleur extreme
|
||||||
if pMoy >= 235 or pMoy <= 20:
|
if pMoy >= 235 or pMoy <= 20:
|
||||||
|
|
||||||
xmin, ymin, xmax, ymap = x, y, x, y;
|
xmin, ymin, xmax, ymap = x, y, x, y;
|
||||||
rMoy, gMoy, bMoy, count = 0.0, 0.0, 0.0, 0 # moyennes des couleurs
|
rMoy, gMoy, bMoy, count = 0.0, 0.0, 0.0, 0 # moyennes des couleurs
|
||||||
rInterval, gInterval, bInterval, rgbInterval = 0, 0, 0, 0 # décalage avec le pixel
|
rInterval, gInterval, bInterval, rgbInterval = 0, 0, 0, 0 # décalage avec le pixel
|
||||||
|
@ -50,13 +49,22 @@ class Noise:
|
||||||
if x+1 < width:
|
if x+1 < width:
|
||||||
xmax = x+1
|
xmax = x+1
|
||||||
|
|
||||||
for j in range(0, ymax-xmin): # on parcourt les pixels autour
|
|
||||||
for i in range(0, xmax-xmin):
|
# pixels = [ pixelMap[y][xmin], pixelMap[y][xmax], pixelMap[ymin][x], pixelMap[ymax][x] ];
|
||||||
|
# for p in pixels:
|
||||||
|
# if p != pixelMap[y][x]:
|
||||||
|
# rMoy += p.r;
|
||||||
|
# gMoy += p.g;
|
||||||
|
# bMoy += p.b;
|
||||||
|
# count += 1
|
||||||
|
|
||||||
|
for j in pixelMap[ymin:ymax]: # on parcourt les pixels autour
|
||||||
|
for pix in j[xmin:xmax]:
|
||||||
# calcul de la moyenne autour du pixel
|
# calcul de la moyenne autour du pixel
|
||||||
if i != x and j != y:
|
if pix != pixelMap[y][x]:
|
||||||
rMoy += pixelMap[j][i].r;
|
rMoy += pix.r;
|
||||||
gMoy += pixelMap[j][i].g;
|
gMoy += pix.g;
|
||||||
bMoy += pixelMap[j][i].b;
|
bMoy += pix.b;
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
if count > 0:
|
if count > 0:
|
||||||
|
@ -78,9 +86,6 @@ class Noise:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def getShapeRecursive(self, coords, pixelMap, pixelList ): # return PixelList
|
def getShapeRecursive(self, coords, pixelMap, pixelList ): # return PixelList
|
||||||
# coords = [lastx, lasty, x, y]
|
# coords = [lastx, lasty, x, y]
|
||||||
width = len( pixelMap[0] )
|
width = len( pixelMap[0] )
|
||||||
|
@ -106,6 +111,8 @@ class Noise:
|
||||||
# si le pixel n'est pas déjà dans le tableau
|
# si le pixel n'est pas déjà dans le tableau
|
||||||
if not already:
|
if not already:
|
||||||
|
|
||||||
|
pixelMap[y][x].setRGB(255,0,0);
|
||||||
|
|
||||||
# si trop de différence
|
# si trop de différence
|
||||||
lastP = pixelMap[lasty][lastx]
|
lastP = pixelMap[lasty][lastx]
|
||||||
pix = pixelMap[y][x]
|
pix = pixelMap[y][x]
|
||||||
|
@ -116,17 +123,18 @@ class Noise:
|
||||||
|
|
||||||
pixelList.append( pixelMap[y][x] ) # ajout au tableau
|
pixelList.append( pixelMap[y][x] ) # ajout au tableau
|
||||||
|
|
||||||
self.getShape( [x, y, x-1, y+1], pixelMap, pixelList) # 1
|
self.getShapeRecursive( [x, y, x-1, y+1], pixelMap, pixelList) # 1
|
||||||
self.getShape( [x, y, x, y+1], pixelMap, pixelList) # 2
|
self.getShapeRecursive( [x, y, x, y+1], pixelMap, pixelList) # 2
|
||||||
self.getShape( [x, y, x+1, y+1], pixelMap, pixelList) # 3
|
self.getShapeRecursive( [x, y, x+1, y+1], pixelMap, pixelList) # 3
|
||||||
|
|
||||||
self.getShape( [x, y, x-1, y ], pixelMap, pixelList) # 4
|
self.getShapeRecursive( [x, y, x-1, y ], pixelMap, pixelList) # 4
|
||||||
# current pixel
|
# current pixel
|
||||||
self.getShape( [x, y, x+1, y ], pixelMap, pixelList) # 6
|
self.getShapeRecursive( [x, y, x+1, y ], pixelMap, pixelList) # 6
|
||||||
|
|
||||||
|
self.getShapeRecursive( [x, y, x-1, y-1], pixelMap, pixelList) # 7
|
||||||
|
self.getShapeRecursive( [x, y, x, y-1], pixelMap, pixelList) # 8
|
||||||
|
self.getShapeRecursive( [x, y, x+1, y-1], pixelMap, pixelList) # 9
|
||||||
|
|
||||||
self.getShape( [x, y, x-1, y-1], pixelMap, pixelList) # 7
|
|
||||||
self.getShape( [x, y, x, y-1], pixelMap, pixelList) # 8
|
|
||||||
self.getShape( [x, y, x+1, y-1], pixelMap, pixelList) # 9
|
|
||||||
|
|
||||||
def getShape(self, coords, pixelMap, pixelList):
|
def getShape(self, coords, pixelMap, pixelList):
|
||||||
# coords = [lastx, lasty, x, y]
|
# coords = [lastx, lasty, x, y]
|
||||||
|
@ -153,8 +161,6 @@ class Noise:
|
||||||
lastP = pixelMap[lasty][lastx]
|
lastP = pixelMap[lasty][lastx]
|
||||||
pix = pixelMap[y][x]
|
pix = pixelMap[y][x]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if abs(lastP.r-pix.r) <= 50 and abs(lastP.g-pix.g) <= 50 and abs(lastP.b-pix.b) <= 50:
|
if abs(lastP.r-pix.r) <= 50 and abs(lastP.g-pix.g) <= 50 and abs(lastP.b-pix.b) <= 50:
|
||||||
|
|
||||||
return pixelMap[y][x];
|
return pixelMap[y][x];
|
||||||
|
|
100
code/bmp.py
100
code/bmp.py
|
@ -11,14 +11,6 @@ import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if len(sys.argv) < 3:
|
|
||||||
print "Require 2 args : \n* input image\n* output image"
|
|
||||||
exit()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Timer:
|
class Timer:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.timer = time.time();
|
self.timer = time.time();
|
||||||
|
@ -38,7 +30,7 @@ def testFileIntegrity():
|
||||||
|
|
||||||
|
|
||||||
# lecture du fichier
|
# lecture du fichier
|
||||||
print "Reading Image -",; t.reset();
|
print "Reading Image -",; t.reset();
|
||||||
with open( sys.argv[1] ) as file:
|
with open( sys.argv[1] ) as file:
|
||||||
binFile = file.read()
|
binFile = file.read()
|
||||||
print "Done in %s s" % (t.get())
|
print "Done in %s s" % (t.get())
|
||||||
|
@ -49,29 +41,86 @@ def testFileIntegrity():
|
||||||
|
|
||||||
|
|
||||||
# Parsing
|
# Parsing
|
||||||
print "Parsing file -",; t.reset();
|
print "Parsing file -",; t.reset();
|
||||||
img.parse( binFile );
|
img.parse( binFile );
|
||||||
print "Done in %s s" % (t.get())
|
print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
print "Creating random extreme pixels -",; t.reset();
|
|
||||||
noise.SaltAndPepper_set(10, img.content.map)
|
|
||||||
print "Done in %s s" % (t.get())
|
|
||||||
|
|
||||||
|
|
||||||
print "Removing salt and pepper -",; t.reset();
|
# print "Creating Salt&Pepper -",; t.reset();
|
||||||
noise.SaltAndPepper_unset(img.content.map)
|
# noise.SaltAndPepper_set(10, img.content.map)
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
# # Unparsing
|
||||||
|
# print "Unparsing file -",; t.reset();
|
||||||
|
# img.unparse(newBpp=24)
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
# # image to stdout
|
||||||
|
# print "Writing file -",; t.reset();
|
||||||
|
# img.write( "SaltAndPepper.bmp" )
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# print "Removing Salt&Pepper -",; t.reset();
|
||||||
|
# noise.SaltAndPepper_unset(img.content.map)
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
# # Unparsing
|
||||||
|
# print "Unparsing file -",; t.reset();
|
||||||
|
# img.unparse(newBpp=24)
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
# # image to stdout
|
||||||
|
# print "Writing file -",; t.reset();
|
||||||
|
# img.write( sys.argv[2] )
|
||||||
|
# print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print "Getting Shape -",; t.reset();
|
||||||
|
|
||||||
|
pixelList = [];
|
||||||
|
|
||||||
|
try:
|
||||||
|
noise.getShapeRecursive([0,0,0,0], img.content.map, pixelList);
|
||||||
|
except RuntimeError as e:
|
||||||
|
noise.getShapeRecursive([0,0,0,0], img.content.map, pixelList);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print "Done in %s s" % (t.get())
|
print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
# Unparsing
|
# Unparsing
|
||||||
print "Unparsing file -",; t.reset();
|
print "Unparsing file -",; t.reset();
|
||||||
img.unparse(newBpp=24)
|
img.unparse(newBpp=24)
|
||||||
print "Done in %s s" % (t.get())
|
print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
# image to stdout
|
# image to stdout
|
||||||
print "Writing file -",; t.reset();
|
print "Writing file -",; t.reset();
|
||||||
img.write( sys.argv[2] )
|
img.write( "shape.bmp" )
|
||||||
print "Done in %s s" % (t.get())
|
print "Done in %s s" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print "\nExecution Time: %s seconds" % total.get()
|
print "\nExecution Time: %s seconds" % total.get()
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,6 +142,21 @@ def testManualCreation():
|
||||||
|
|
||||||
print img.binData
|
print img.binData
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
print "Require 2 args : \n* input image\n* output image"
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# MAIN
|
# MAIN
|
||||||
#testManualCreation()
|
#testManualCreation()
|
||||||
testFileIntegrity()
|
testFileIntegrity()
|
Loading…
Reference in New Issue