From aa5ef8c9ea750a96f91e513b3ce752d1d256ba61 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 19 Sep 2015 21:26:45 +0200 Subject: [PATCH] =?UTF-8?q?Detection=20de=20forme=20non-r=C3=A9cursif=20fi?= =?UTF-8?q?ni,=20=C3=A0=20optimiser=20car=20tr=C3=A8s=20tr=C3=A8s=20tr?= =?UTF-8?q?=C3=A8s=20tr=C3=A8s=20lentgit=20status!=20(gestion=20par=20cont?= =?UTF-8?q?our=20ou=20autre...)=20ajout=20de=20param=C3=A8tres=20dans=20l'?= =?UTF-8?q?interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/BMPFile.py | 11 +- code/Noise.py | 94 +++++- code/bmp.py | 74 ++++- code/mask.bmp | Bin 0 -> 232046 bytes code/shapes/1.bmp | Bin 0 -> 1086122 bytes code/shapes/2.bmp | Bin 0 -> 308754 bytes code/shapes/multi_356.bmp | Bin 0 -> 232046 bytes code/shapes/rect_100.bmp | Bin 0 -> 232046 bytes code/shapes/start_68.bmp | Bin 0 -> 232046 bytes code/tests.py | 273 +++++++++++------- docs/Noise.readme | 82 +++--- dossier/Salt&Pepper.svg | 583 ++++++++++++++++++++++++++++++++++++++ 12 files changed, 973 insertions(+), 144 deletions(-) create mode 100644 code/mask.bmp create mode 100644 code/shapes/1.bmp create mode 100644 code/shapes/2.bmp create mode 100644 code/shapes/multi_356.bmp create mode 100644 code/shapes/rect_100.bmp create mode 100644 code/shapes/start_68.bmp create mode 100644 dossier/Salt&Pepper.svg diff --git a/code/BMPFile.py b/code/BMPFile.py index 23c4f1b..fdb337a 100644 --- a/code/BMPFile.py +++ b/code/BMPFile.py @@ -234,8 +234,8 @@ class BMPContent: self.map.append( [] ) # on créé la colonne for pixel in range(0, header.width): - newPixel = RGBPixel() - newPixel.setBin(binContent, header.width, header.padding, i, header.bpp) + newPixel = RGBPixel(y=header.height-line-1, x=pixel) + newPixel.setBin(binContent, header.width, header.padding, i, bpp=header.bpp) self.map[line].append( newPixel ); i += header.bpp / 8.0 # on passe à la suite @@ -304,13 +304,16 @@ class BMPContent: # classe contenant un pixel RGB # ################################# class RGBPixel: - def __init__(self, r=0, g=0, b=0, bpp=24): + def __init__(self, r=0, g=0, b=0, x=-1, y=-1, bpp=24): if bpp not in [1,4,8,24]: if not hasattr(self, 'bpp'): # si l'attribut n'est pas déjà défini, alors on met la valeur par défaut self.bpp = 24 else: self.bpp = bpp + self.x = x + self.y = y + self.r = r self.g = g self.b = b @@ -331,7 +334,7 @@ class RGBPixel: self.binData = chr(g) + chr(b) + chr(r) - def setRGB(self, r, g, b, bpp=24): + def setRGB(self, r, g, b,x=-1, y=-1, bpp=24): self.__init__(r, g, b, bpp); def setBin(self, binData, width, padding, index, bpp=24): diff --git a/code/Noise.py b/code/Noise.py index 6063755..9952073 100644 --- a/code/Noise.py +++ b/code/Noise.py @@ -1,6 +1,7 @@ # ~*~ encoding: utf-8 ~*~ # import random +import time class Noise: @@ -173,10 +174,10 @@ class Noise: if random.randint(0,1) == 1: maxColor = max(pixelMap[y][x].r, pixelMap[y][x].g, pixelMap[y][x].b) - randomAdd = random.randint(0, (255-maxColor) / 10 ) + randomAdd = random.randint(0, (255-maxColor) / 5 ) else: minColor = min(pixelMap[y][x].r, pixelMap[y][x].g, pixelMap[y][x].b) - randomAdd = - random.randint(0, minColor / 10 ) + randomAdd = - random.randint(0, minColor / 5 ) pixelMap[y][x].setRGB( pixelMap[y][x].r + randomAdd, @@ -489,4 +490,91 @@ class Noise: pass def Gaussian_unset(self, pixelMap, seuil=5): - pass \ No newline at end of file + pass + + + + + + + + + + + + + + + + + + + + + + + + + # récupère la forme complète autour du pixel donné # + # @param pixel pixel de base + # @param pixelMap matrice de pixels + # + # @return retourne la liste des pixels composant la forme (références) + # + # + # + # + def getShape(self, originalPixel, pixelMap, seuil=10): + width = len( pixelMap[0] ) + height = len( pixelMap ) + + shape = [] # contiendra les pixels de la forme + waiting = [originalPixel] # contient les pixels à traiter + + # on continue d'analyser tant qu'il y a des pixels à traiter + while len(waiting) > 0: + pixel = waiting[0] + + # on ajoute le pixel à la forme + shape.append( pixel ) + + xm, xM = pixel.x, pixel.x # valeurs minimales et maximales de x autour du pixel + ym, yM = pixel.y, pixel.y # valeurs minimales et maximales de y autour du pixel + + + # si on est pas sur le bord gauche + if pixel.x > 0: + xm = pixel.x - 1 + + # si on est pas sur le bord droit + if pixel.x < width-1: + xM = pixel.x + 1 + + # si on est pas sur le bord haut + if pixel.y > 0: + ym = pixel.y - 1 + + # si on est pas sur le bord bas + if pixel.y < height-1: + yM = pixel.y + 1 + + + + # on parcourt les pixels alentours + for j in range(ym, yM+1): + for i in range(xm, xM+1): + currentP = pixelMap[j][i] + # si le pixel n'a pas une couleur trop éloignée du pixel central + if abs(pixel.r-currentP.r) <= seuil and abs(pixel.g-currentP.g) <= seuil and abs(pixel.b-currentP.b) <= seuil: + # on ajoute le pixel à la liste d'attente + if not( currentP in shape or currentP in waiting): + waiting.append( currentP ) + + + # on retire le pixel de la liste d'attente + try: + waiting.remove( pixel ) + except: + pass + + return shape; \ No newline at end of file diff --git a/code/bmp.py b/code/bmp.py index 624fb3f..fd3627e 100644 --- a/code/bmp.py +++ b/code/bmp.py @@ -47,48 +47,108 @@ print "| 22) %s |" % exactLength("Difference en image", 21, -1) print "| 23) %s |" % exactLength("Fusion d'images (+)", 21, -1) print "| 24) %s |" % exactLength("Fusion d'images (-)", 21, -1) print "+---------------------------+" +print "| %s |" % exactLength("TESTS DE FORMES", 25, 0) +print "| %s |" % exactLength("", 25, 0) +print "| 30) %s |" % exactLength("Reveler une teinte", 21, -1) +print "| 31) %s |" % exactLength("Colorer une forme", 21, -1) +print "+---------------------------+" print while True: action = int( raw_input("choix: ") ) - if action >= 0 and action < 30: + if action >= 0 and action < 40: break; -print -print "+---------------------------+---------+" - +startStr = "\n+---------------------------+---------+" +result = "" execTime = Timer(); execTime.reset(); -result = "" # fichier if action == 0: - testManualCreation() # teste la création d'un fichier à partir d'une matrice uniquement + w = raw_input("width [100]: ") + h = raw_input("height [100]: ") + arg1, arg2 = 100, 100 + if w != "": + arg1 = int(w) + if h != "": + arg2 = int(h) + print startStr + testManualCreation(arg1, arg2) # teste la création d'un fichier à partir d'une matrice uniquement elif action == 1: + print startStr result = testFileIntegrity() # teste le PARSE/UNPARSE elif action == 2: + print startStr result = printIntPalette() # affiche la palette d'une image # bruits elif action == 10: - testSaltAndPepper() # teste le bruitage/débruitage de type "Sel & Poivre" + inS = raw_input("seuil bruitage [50]: ") + outS = raw_input("seuil débruitage [1] : ") + outB = raw_input("borne débruitage [1] : ") + s = raw_input("Lissage ? (0-1): ") + arg1, arg2, arg3, arg4 = 50, 1, 1, 1 + if inS != "": + arg1 = int(inS) + if outS != "": + arg2 = int(outS) + if outB != "": + arg3 = int(outB) + if s != "": + arg4 = int(s) + print startStr + testSaltAndPepper(arg1, arg2, arg3, arg4) # teste le bruitage/débruitage de type "Sel & Poivre" elif action == 11: + print startStr testAdditiveNoise() # teste le bruitage/débruitage de type "Additif" elif action == 12: + print startStr testSmooth() # teste le lissage # performances elif action == 20: + print startStr printImageQuality() # compare 2 images et donne le pourcentage de ressemblance/différence elif action == 21: + print startStr print "not implemented yet" exit() printImageQualityByPower() # compare 2 images et donne le pourcentage de ressemblance/différence (utilisant la puissance) elif action == 22: + print startStr imageForImageQuality() # crée une image correspondant aux différences de 2 images elif action == 23: + print startStr mergeImagesAdditive() # crée une image étant la fusion (addition) de 2 images elif action == 24: + print startStr mergeImagesSubstractive() # crée une image étant la fusion (soustractive) de 2 images +elif action == 30: + r = raw_input("rouge [0]: ") + g = raw_input("vert [0]: ") + b = raw_input("bleu [0]: ") + s = raw_input("seuil [50]: ") + arg1, arg2, arg3, arg4 = 0,0,0,50 + if r != "": + arg1 = int(r) + if g != "": + arg2 = int(g) + if b != "": + arg3 = int(b) + if s != "": + arg4 = int(s) + print startStr + revealShapes(arg1, arg2, arg3, arg4) # révèle la couleur spécifiée +elif action == 31: + x = raw_input("abscisses(x) [0]: ") + y = raw_input("ordonnées(y) [0]: ") + arg1, arg2 = 0,0 + if x != "": + arg1 = int(x) + if y != "": + arg2 = int(y) + print startStr + colorShape(arg1, arg2) # colorie la forme contenant le pixel de coordonnées donné else: print "Wrong choice" exit(); diff --git a/code/mask.bmp b/code/mask.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e199a714fb86e68e255a2c95da4c4b4a8d231a67 GIT binary patch literal 232046 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 literal 0 HcmV?d00001 diff --git a/code/shapes/1.bmp b/code/shapes/1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2624dfe89f3314e11e49faf15f3add3465eff316 GIT binary patch literal 1086122 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%0A11XYU3{giy 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%0DE96z*k}_Q_GyWbD^DxJxCR}tgOOY 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 literal 0 HcmV?d00001 diff --git a/code/shapes/multi_356.bmp b/code/shapes/multi_356.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b0f3e7ff2f188dd3ee6560a1990acc225236f3d7 GIT binary patch literal 232046 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 literal 0 HcmV?d00001 diff --git a/code/shapes/rect_100.bmp b/code/shapes/rect_100.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7c28af1f97ce4f0f18487d0ba68a6b9f4cd579fb GIT binary patch literal 232046 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 N$&?6)fCyA4@PF1W?Fs+@ literal 0 HcmV?d00001 diff --git a/code/shapes/start_68.bmp b/code/shapes/start_68.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3b94432e633c953357f7eb2aad4af1f08b4271b2 GIT binary patch literal 232046 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 WiGT=r5O~F1e[] +def printIntPalette(): + img = BMPFile(); + + t = Timer(); + + print "| Reading Image |",; t.reset(); + with open( sys.argv[1] ) as file: + binFile = file.read() + print "%s |" % (t.get()) + + + print "| Parsing File |",; t.reset(); + img.parse(binFile); + print "%s |" % (t.get()) + + return img.intPalette; + + + + + + + + + + # teste les fonction de bruitage et débruitage de type "Poivre et Sel" # ######################################################################## # @sysarg 1 le fichier d'origine @@ -153,7 +221,7 @@ def testFileIntegrity(): # Parse le fichier d'origine # Bruite l'image' et l'enregistre dans "SaltAndPepper.bmp" # Débruite l'image et l'enregistre dans le fichier de sortie -def testSaltAndPepper(): +def testSaltAndPepper(seuilSet=50, seuilUnset=1, borneUnset=1, smooth=1): t = Timer(); @@ -177,7 +245,7 @@ def testSaltAndPepper(): print "| Creating Salt&Pepper |",; t.reset(); - noise.SaltAndPepper_set(img.content.map, seuil=20) + noise.SaltAndPepper_set(img.content.map, seuil=seuilSet) print "%s |" % (t.get()) # Unparsing @@ -194,12 +262,13 @@ def testSaltAndPepper(): print "| Removing Salt&Pepper |",; t.reset(); - noise.SaltAndPepper_unset(img.content.map, seuil=1, borne=1) + noise.SaltAndPepper_unset(img.content.map, seuil=seuilUnset, borne=borneUnset) print "%s |" % (t.get()) - print "| Lissage |",; t.reset(); - noise.smooth(img.content.map); - print "%s |" % (t.get()) + if smooth != 0: + print "| Lissage |",; t.reset(); + noise.smooth(img.content.map); + print "%s |" % (t.get()) # Unparsing print "| Unparsing file |",; t.reset(); @@ -355,76 +424,6 @@ def testSmooth(): -# teste la création d'image manuelle (UNPARSE) à partir d'une matrice uniquement # -################################################################################## -# @sysarg 1 le fichier de sortie -# @stsarg 2 / -# -# @history -# Unparse une matrice de pixels aléatoire de taille 100x100 -# L'enregistre dans le fichier de sortie -def testManualCreation(): - - t = Timer(); - - print "| Creating Image |",; t.reset(); - img = BMPFile() - for y in range(0, 100): - img.content.map.append( [] ) - for x in range(0, 100): - img.content.map[y].append( RGBPixel( - random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255), - bpp=24 - ) ); - - img.unparse(); - print "%s |" % (t.get()) - - - print "| Writing Image |",; t.reset(); - img.write( sys.argv[2] ) - print "%s |" % (t.get()) - - - - -# Affiche la palette afin de savoir si elle est connue ou nouvelle # -#################################################################### -# @sysarg 1 le fichier d'entrée -# @stsarg 2 / -# -# @history -# Affiche la palette au format [] -def printIntPalette(): - img = BMPFile(); - - t = Timer(); - - print "| Reading Image |",; t.reset(); - with open( sys.argv[1] ) as file: - binFile = file.read() - print "%s |" % (t.get()) - - - print "| Parsing File |",; t.reset(); - img.parse(binFile); - print "%s |" % (t.get()) - - return img.intPalette; - - - - - - - - - - - - @@ -712,35 +711,113 @@ def mergeImagesSubstractive(): -# dure environ 4min 13s -def calSaltAndPepper(): +# Révèle la couleur RGB spécifiée en blanc et le reste en noir # +################################################################ +# @sysarg 1 Image à traiter +# @stsarg 2 Image de sortie +# +# @history +# Parse le fichier d'entrée +# colore l'image +# Unparse le tout et l'enregistre dans le fichier de sortie +def revealShapes(red=0,green=0,blue=0, seuil=50): t = Timer(); - + img = BMPFile() + + rMin, rMax = red-seuil, red+seuil + gMin, gMax = green-seuil, green+seuil + bMin, bMax = blue-seuil, blue+seuil + # lecture du fichier - print "Reading Image -",; t.reset(); - with open( sys.argv[1] ) as file: - binFile = file.read() + print "| Reading file |",; t.reset(); + with open( sys.argv[1] ) as f: + binFile = f.read(); + print "%s |" % (t.get()) + + # parsage + print "| Parsing image |",; t.reset(); + img.parse( binFile ); print "%s |" % (t.get()) - img = BMPFile(); # Instanciation du BMPFile - noise = Noise(); # Instanciation du NoiseObject - - - for seuil in range(0,100,10): - for borne in range(0,30,10): - - img.parse( binFile ); - - print "SaltAndPepper (%s) (%s) -" % (seuil, borne),; t.reset(); - noise.SaltAndPepper_unset(img.content.map, seuil=seuil, borne=borne) - img.unparse(newBpp=8) - img.write( "SaltAndPepper/%s_%s.bmp" % (seuil, borne) ) - print "%s |" % (t.get()) - - + # coloration + print "| Revealing color |",; t.reset(); + for line in img.content.map: + for pixel in line: + # si on a la couleur spécifiée + if rMin <= pixel.r <= rMax and gMin <= pixel.g <= gMax and bMin <= pixel.b <= bMax: + pixel.setRGB(255,255,255) # on colore en blanc + else: + pixel.setRGB(0,0,0) # sinon on colore en noir + print "%s |" % (t.get()) + print "| Unparsing |",; t.reset(); + img.unparse(newBpp=24); + print "%s |" % (t.get()) + + print "| Writing File |",; t.reset(); + with open( sys.argv[2], "w") as f: + f.write( img.binData ); + print "%s |" % (t.get()) + + + +# Colore une la forme contenant le pixel de coordonnées donnée # +################################################################ +# @sysarg 1 Image à traiter +# @stsarg 2 Image de sortie +# +# @history +# Parse le fichier d'entrée +# colore la forme +# Unparse le tout et l'enregistre dans le fichier de sortie +def colorShape(x=0, y=0): + t = Timer(); + img = BMPFile() + noise = Noise() + + # lecture du fichier + print "| Reading file |",; t.reset(); + with open( sys.argv[1] ) as f: + binFile = f.read(); + print "%s |" % (t.get()) + + # parsage + print "| Parsing image |",; t.reset(); + img.parse( binFile ); + print "%s |" % (t.get()) + + + + # condition (si blanc uniquement) + if img.content.map[y][x].r != 255 or img.content.map[y][x].g != 255 or img.content.map[y][x].b != 255: + print "\n*** must be a WHITE pixel" + exit() + + + + + + # récupère la forme + print "| Getting shape |",; t.reset(); + shape = noise.getShape(img.content.map[y][x], img.content.map) + + # on colorie la forme en rouge + for pixel in shape: + pixel.setRGB(255,0,0); + print "%s |" % (t.get()) + + + + print "| Unparsing |",; t.reset(); + img.unparse(newBpp=24); + print "%s |" % (t.get()) + + print "| Writing File |",; t.reset(); + with open( sys.argv[2], "w") as f: + f.write( img.binData ); + print "%s |" % (t.get()) \ No newline at end of file diff --git a/docs/Noise.readme b/docs/Noise.readme index 6372d66..c3d8b6f 100644 --- a/docs/Noise.readme +++ b/docs/Noise.readme @@ -147,46 +147,64 @@ def getShapeRecursive(self, coords, pixelMap, pixelList ): # return PixelList self.getShapeRecursive( [x, y, x, y-1], pixelMap, pixelList) # 8 self.getShapeRecursive( [x, y, x+1, y-1], pixelMap, pixelList) # 9 + + +# identique à la version récursive mais sans récursivité (+ réécriture) + +### ALGO ### +HA. + On reconnaît une forme distincte par l'écart de teinte/contraste avec les alentours + A l'échelle du pixel, 2 méthodes de distinction de forme: + 1- On détecte les contours + recherche d'un contour (écart) + suivi du contour + transposition en forme + 2- détection de la forme + élargissement de zone jusqu'à un contour (écart) + + Alternative de niveau 1: + * balayage des abscisses puis racollage + +### CODE ### +def getShape(self, coords, pixelMap, pixelList): + # coords = [lastx, lasty, x, y] + width = len( pixelMap[0] ) + height = len( pixelMap ) - def getShape(self, coords, pixelMap, pixelList): - # coords = [lastx, lasty, x, y] - width = len( pixelMap[0] ) - height = len( pixelMap ) - - lastx = coords[0] - lasty = coords[1] - x = coords[2] - y = coords[3] + lastx = coords[0] + lasty = coords[1] + x = coords[2] + y = coords[3] - if x=0 and y=0: + if x=0 and y=0: - already = False; - for pix in pixelList: - if pix == pixelMap[y][x]: - already = True; - break + already = False; + for pix in pixelList: + if pix == pixelMap[y][x]: + already = True; + break - # si le pixel n'est pas déjà dans le tableau - if not already: + # si le pixel n'est pas déjà dans le tableau + if not already: - # si trop de différence - lastP = pixelMap[lasty][lastx] - pix = pixelMap[y][x] + # si trop de différence + lastP = pixelMap[lasty][lastx] + 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]; - # self.getShape( [x, y, x-1, y+1], pixelMap, pixelList) # 1 - # self.getShape( [x, y, x, y+1], pixelMap, pixelList) # 2 - # self.getShape( [x, y, x+1, y+1], pixelMap, pixelList) # 3 + # self.getShape( [x, y, x-1, y+1], pixelMap, pixelList) # 1 + # self.getShape( [x, y, x, y+1], pixelMap, pixelList) # 2 + # self.getShape( [x, y, x+1, y+1], pixelMap, pixelList) # 3 - # self.getShape( [x, y, x-1, y ], pixelMap, pixelList) # 4 - # # current pixel - # self.getShape( [x, y, x+1, y ], pixelMap, pixelList) # 6 + # self.getShape( [x, y, x-1, y ], pixelMap, pixelList) # 4 + # # current pixel + # self.getShape( [x, y, x+1, y ], pixelMap, pixelList) # 6 - # 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 + # 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 - return None # return none si le pixel n'est plus de la forme \ No newline at end of file + return None # return none si le pixel n'est plus de la forme \ No newline at end of file diff --git a/dossier/Salt&Pepper.svg b/dossier/Salt&Pepper.svg new file mode 100644 index 0000000..6a26ae6 --- /dev/null +++ b/dossier/Salt&Pepper.svg @@ -0,0 +1,583 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + 1,1 + 1,2 + 1,3 + 2,3 + 3,3 + 3,2 + 3,1 + 2,1 + 2,2 + + + + + + + + + + + + 1,1 + 1,2 + 1,3 + 2,3 + 3,3 + 3,2 + 3,1 + 2,1 + 2,2 + + + + + + + + + + + + 1,1 + 1,2 + 1,3 + 2,3 + 3,3 + 3,2 + 3,1 + 2,1 + 2,2 + + +