def contrasteExtension(pix,largeur,hauteur): """etend l'histogramme de facon a ce que les couleurs aillent de 0 a 255 """ milieu=127 histoOldRGB=createHistogrammeRGB(pix,largeur,hauteur) imHistoOldRGB=createImageHistogrammeRGB(histoOldRGB) imHistoOldRGB.show() imin=minIntensite(histoOldRGB[0]) imax=maxIntensite(histoOldRGB[0]) for y in range(hauteur): for x in range(largeur): old=pix[x,y][0] rapport=(old-imin)/(imax-imin) new=rapport*255 new=max(0,min(round(new),255)) pix[x,y]=(new,pix[x,y][1],pix[x,y][2]) imin=minIntensite(histoOldRGB[1]) imax=maxIntensite(histoOldRGB[1]) for y in range(hauteur): for x in range(largeur): old=pix[x,y][1] rapport=(old-imin)/(imax-imin) new=rapport*255 new=max(0,min(round(new),255)) pix[x,y]=(pix[x,y][0],new,pix[x,y][2]) imin=minIntensite(histoOldRGB[2]) imax=maxIntensite(histoOldRGB[2]) for y in range(hauteur): for x in range(largeur): old=pix[x,y][2] rapport=(old-imin)/(imax-imin) new=rapport*255 new=max(0,min(round(new),255)) pix[x,y]=(pix[x,y][0],pix[x,y][1],new) histoNewRGB=createHistogrammeRGB(pix,largeur,hauteur) imHistoNewRGB=createImageHistogrammeRGB(histoNewRGB) imHistoNewRGB.show()
def quantification(pix,largeur,hauteur,nb): histo=createHistogrammeRGB(pix,width,heigth) b=255//nb l=[i for i in range(256)] i=0 while i<len(l): couleur=l[i] for j in range(i,i+b): if j>=len(l):break l[j]=couleur i+=b for y in range(hauteur): for x in range(largeur): pix[x,y]=(l[pix[x,y][0]],l[pix[x,y][1]],l[pix[x,y][2]])
def contrasteEtirement(pix,largeur,hauteur): """etire et applati l'histogramme""" histoOld=createHistogrammeRGB(pix,largeur,hauteur) #----------------------------------------------------------- #RED #histogramme cumule histoCumu=[0 for i in range(256)] histoCumu[0]=histoOld[0][1] for i in range(1,len(histoOld[0])): histoCumu[i]=histoCumu[i-1]+histoOld[0][i] ## imHistoCumu=createImageHistogramme(histoCumu) ## imHistoCumu.show() for y in range(hauteur): for x in range(largeur): p=round((histoCumu[pix[x,y][0]]*255)/(largeur*hauteur)) pix[x,y]=(p,pix[x,y][1],pix[x,y][2]) #----------------------------------------------------------- #GREEN #histogramme cumule histoCumu=[0 for i in range(256)] histoCumu[0]=histoOld[1][1] for i in range(1,len(histoOld[1])): histoCumu[i]=histoCumu[i-1]+histoOld[1][i] ## imHistoCumu=createImageHistogramme(histoCumu) ## imHistoCumu.show() for y in range(hauteur): for x in range(largeur): p=round((histoCumu[pix[x,y][1]]*255)/(largeur*hauteur)) pix[x,y]=(pix[x,y][0],p,pix[x,y][2]) #----------------------------------------------------------- #BLUE #histogramme cumule histoCumu=[0 for i in range(256)] histoCumu[0]=histoOld[2][1] for i in range(1,len(histoOld[2])): histoCumu[i]=histoCumu[i-1]+histoOld[2][i] ## imHistoCumu=createImageHistogramme(histoCumu) ## imHistoCumu.show() for y in range(hauteur): for x in range(largeur): p=round((histoCumu[pix[x,y][2]]*255)/(largeur*hauteur)) pix[x,y]=(pix[x,y][0],pix[x,y][1],p)
if j>=len(l):break l[j]=couleur i+=b for y in range(hauteur): for x in range(largeur): pix[x,y]=(l[pix[x,y][0]],l[pix[x,y][1]],l[pix[x,y][2]]) #=============================================================== if __name__=="__main__": im=Image.open("dandelion.jpg") print(im.format, im.size, im.mode) #im=im.convert("L") pix=im.load() width=im.size[0] heigth=im.size[1] histo=createHistogrammeRGB(pix,width,heigth) im_histo=createImageHistogrammeRGB(histo) im.show() im_histo.show() for nb in (64,32,16,8,4,2): quantification(pix,width,heigth,nb) histo=createHistogrammeRGB(pix,width,heigth) im_histo=createImageHistogrammeRGB(histo) im.save("dandelion-NB=%d.jpg"%nb) im_histo.save("histoDandelion-NB=%d.jpg"%nb)
## imHistoCumu.show() for y in range(hauteur): for x in range(largeur): p=round((histoCumu[pix[x,y][2]]*255)/(largeur*hauteur)) pix[x,y]=(pix[x,y][0],pix[x,y][1],p) #======================================================================== if __name__=="__main__": im=Image.open("oiseau.jpg") pix=im.load() width=im.size[0] heigth=im.size[1] histoOld=createHistogrammeRGB(pix,width,heigth) imHistoOld=createImageHistogrammeRGB(histoOld) imHistoOld.save("histoOiseau.jpg") ## imHistoOld.show() ## im.show() contrasteEtirement(pix,width,heigth) histoNew=createHistogrammeRGB(pix,width,heigth) imHistoNew=createImageHistogrammeRGB(histoNew) imHistoNew.save("histoOiseau-contrasteEtirement.jpg") im.save("oiseau-contrasteEtirement.jpg") ## imHistoNew.show() ## im.show()