Vous êtes sur la page 1sur 10

15/9/2015

Tutoriel NUMPY
Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club Contacts
p
u
b
l
i
c
i
t

Accueil

ALM

Java

.NET

Dv.Web

Programmation

EDI

Algorithmique

FORUMPYTHON

Programmation

F.A.QPYTHON

Office

Solutionsd'entreprise

TUTORIELSPYTHON

SOURCESPYTHON

2D3DJeux

SGBD

Assembleur

C++

Go

ObjectiveC

Applications

Pascal

OUTILSPYTHON

Perl

Mobiles

Python

LIVRESPYTHON

Swift

Systmes

Qt

XML

Autres

PyQt

INITIATIONAUTRAITEMENTD'IMAGESavecNUMPY
Tabledesmatires
I.PRREQUIS
II.VersionPYTHONetbibliothquesutilises
III.MANIPULATIONSBASIQUESDES
IMAGES
IIIA.Ouvriruneimageetextraireles
donnes
IIIB.Reconstruireuneimagepartir
d'unematrice
IV.TRAITEMENTD'IMAGEBASIQUE
IVA.Segmentation
IVA1.Rappeldecours
IVA2.Applicationla
programmation
IVA3.Exempledel'application
IVB.Dilatation
IVB1.RappeldeCours
IVB2.Applicationla
programmation
IVB3.Exempledel'application
IVC.rosion
IVC1.Rappeldecours
IVC2.Applicationla
programmation
IVC3.Exempledel'application
V.CONCLUSION
lafindecetutorielvoussaurez(simonpremiertutoestrussi)rcuprerlesdonnesbrutesd'uneimage,lesmettreenformeafindelestraiteretde
reconstruirel'imagersultat.Toutcelaserafaitavecl'aidedesbibliothquesPILetNumPy.Cttraitementd'images,noustraiteronslasegmentation
deuxseuils,ladilatationetl'rosion.Avantdecommencer,jetiensremercier_GUIGUIsansquicetutoriel,alorsqu'iltaitpresquetermin,n'aurait
jamaistpubli.
Articlelu13057fois.
L'auteur
FranoislouisLAILLIER
L'article
Publile4juin2006Misjourle19mars2007
VersionPDFVersionhorsligne
ePub,AzwetMobi

I.PRREQUIS

Lienssociaux

Poursuivrecetutoriel,vousdevezavoirunminimumdeconnaissancessurlesdonnesdes
images.IlvousfautaussiconnatreunminimumlabibliothquePythonImageLibrary(PIL).Une
connaissancedeNumPyestinutile.Jetienssoulignerquelaplupartdeschosesacquisesau
coursdecetutorielsontfaisablesdirectementavecPIL.PILrestequandmmelimitemon
got.Sivoussavezfairecequiestexpliqudanscetutoriel,voussaurezfairevospropres
oprateurs.

Partager

II.VersionPYTHONetbibliothquesutilises
PYTHON2.5
PIL1.1.6
NumPy
Systmed'exploitation:WindowsXPHOME
TestseffectusavecIDLE1.2
VouspouvezgalementaccdercespagesdepuisnotrerubriqueOutilsPython.
III.MANIPULATIONSBASIQUESDESIMAGES
Danscettepartiedututoriel,nousapprendronsmanipulerlesdonnesbrutesissuesdes
images.Nousapprendronsaussireconstruireuneimagegrcecesdonnes.

IIIA.Ouvriruneimageetextrairelesdonnes
Dansceparagraphe,lebutestd'ouvriruneimageenprcisantsoncheminetremettreenforme
lesdonnesafindepouvoirlestraiter.Afindevrifiersivotrecodefonctionne,jevousconseille

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

1/10

15/9/2015

Tutoriel NUMPY
decreruneimagetest,uneimagedepetitedimensiondontilserafaciled'imprimersa
compositionl'cran.
Exempled'image:
test.bmp
Ainsinousauronsquelquechosedecetypecommedonnesbrutes.

Slectionnez
0,0,0,0,0,0
0,1,1,1,1,0
0,0,0,0,0,0

Unefoiscelafait,nousallonsimporterlesmodulesncessairescetutoriel.
Importationdesmodules
Slectionnez
IDLE 1.2
>>> import PIL
>>> import Image # on aurait pu faire from PIL import Image
>>> import numpy
>>> dir()
['Image', 'PIL', '__builtins__', '__doc__', '__name__']

Nousallonslamettreenniveaudegrisparcequ'uneimageestengnralcomposedetrois
composantesdecouleurs,voirequatre:RGB,RGBA,HSI.Noustravailleronssuruneimage
grise,imagequipourraittreuneimageducanalR.(Chaquepixelducanalestcodsurun
octetici.D'ol'intrtdetravaillersurdugris.Imagemonocanal.)Pourcela,onutiliselafonction
grayscaledumoduleImageOps:

Slectionnez

>>> import ImageOps


>>> img=ImageOps.grayscale(img)

Nousallonsmaintenantextrairetouteslesdonnesbrutesdel'image.Onfaitcelagrcela
fonctiongetdata()

Slectionnez

>>> imgdata = img.getdata()


>>> print list(imgdata)
[0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0]

Onvoitbienqu'aprslegetdata,nousavonslesdonnesdel'imagesousformed'uneliste1D,
avectouslespixelslesunslasuitedesautres.Ilfautdoncremettrecettelistesousformede
matrice.Pourcela,onabesoindesdimensionsdel'image.Onutiliseral'attributsize

Slectionnez
>>> larg, haut = img.size
>>> larg
6
>>> haut
3

C'esticiqueNumPyintervient,onvaseservirdeNumPyquiestunmodulequigrebienles
tableaux.Nousallonsmettrelesdonnesquenousavonsrcupresdansuntableau(array)

Slectionnez
>>> tab = numpy.array(imgdata)

Sivoustapezdanslaconsole:

Slectionnez
>>> tab
array([ 0,
0,

0,
0,

0,
0,

0,
0,

0, 0,
0])

0, 255, 255, 255, 255,

0,

0,

Alorsquesivoustapez:

Slectionnez
>>> print tab
[ 0 0 0 0

0 255 255 255 255

0]

Ladiffrencenousmontrequesinousappelonstab,leshellnousditquec'estuntableauquia
lesdonnessuivantes,etnousindiqueletypesinousenavonsspcifiun,alorsquesinous
imprimonstab,laconsolenousindiqueseulementlesdonnesdutableau(nonsparespar

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

2/10

15/9/2015

Tutoriel NUMPY
desvirgules).
Noussommesaummepointqueprcdemment:nosdonnesseprsententsousuneforme
1D.Pourmettrecesdonnesenforme,ilfautsepencherductdesshape(forme).

Slectionnez
>>> print numpy.shape(tab)
(18,)

Celanousindiquelesdimensionsx,yd'unelisteoutableau.Enutilisantlafonctionreshape,
nousallonsmettrelamatriceenforme.

Slectionnez
>>> matrix = numpy.reshape(tab,(larg,haut))
>>> matrix
array([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 255, 255],
[255, 255, 0],
[ 0, 0, 0],
[ 0, 0, 0]])
>>> matrix= numpy.reshape(tab,(haut,larg))
>>> matrix
array([[ 0, 0, 0, 0, 0, 0],
[ 0, 255, 255, 255, 255, 0],
[ 0, 0, 0, 0, 0, 0]])

Onvoitbieniciquelesouciestdanslacomprhension,quandondonnelesdimensionsd'une
image,ondonnesouventlargeur*hauteur(cf.plushautaveclafonctionsize)alorsquelorsqu'on
travailleavecdesmatrices,c'esttoujoursdonnsousleformatlignes*colonnes.
BonvoilnousavonsvulescommandesconnatrepourfaireunefonctionOuvrirImg.
FonctionOuvrirImg
Slectionnez
def OuvrirImg(path):
Img = Image.open(str(path))
Img1 = ImageOps.grayscale(Img)
largeur,hauteur = Img1.size
imdata=Img1.getdata()
tab=numpy.array(imdata)
matrix = numpy.reshape(tab,(hauteur,largeur))
return matrix

Slectionnez
>>> a = OuvrirImg("c:\\test.bmp")
>>> print a
[[ 0 0 0 0 0 0]
[ 0 255 255 255 255 0]
[ 0 0 0 0 0 0]]

IIIB.Reconstruireuneimagepartird'unematrice
Maintenantnoussavonsouvriruneimageetmettresesdonnessousformedematrice.Lebut
deceparagrapheestdereconstruireuneimagepartird'unematricedetypeARRAY.

Slectionnez
>>> a = OuvrirImg("c:\\test.bmp")

Nousavonschargl'imagedanslavariablea.Ilfautcrerunenouvelleimageafind'crire
dedans.CelasefaitaveclafonctionnewdumoduleImage,ilfautquel'imagesoitdelatailledu
tableau.

Slectionnez
>>> Copie = Image.new("L",(a.shape[1],a.shape[0]))

Ici,nousvenonsdecrerl'objetimageCopie,uneimageenniveaudegris.(mode='L'),de
dimension(nombredecolonnesxlenombredelignes).Cetteimageestvide.Nousallonsla
remplir.Pourcelalafonctionrciproquedegetdata()estutilise.Commegetdatanous
retournelesdonnessousformedeliste1D,ilfaudrauneliste1Dcommeargumentpour
putdata.Nousallonsdoncmettreplatlamatricel'aidedel'attributflat.Pourvoirle
rsultatdefaonconcrtenoussommesobligd'utiliserlist(a.flat)

Slectionnez
>>> print a
array([[ 0, 0, 0, 0, 0,
[ 0, 255, 255, 255, 255,
[ 0, 0, 0, 0, 0,

0],
0],
0]]

>>> list(a.flat)
[0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0]

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

3/10

15/9/2015

Tutoriel NUMPY
>>> Copie.putdata(list(a.flat))

Lesdonnessontintgresl'image.Maintenantdeuxoptions:
soitl'affichagedirectdel'image
soitlasauvegardedufichier.
Pourl'affichage,onutiliselafonctionshow.

Slectionnez
>>> Copie.show()

Pourlasauvegarde,nousutiliseronslafonctionsaveenindiquantcommeargumentlechemin.

Slectionnez
>>> Copie.save(fp="C:\\Rebuilt.bmp")

Ilnenousresteplusqu'allervoirsurnotredisquesil'imagerebuilt.bmpexiste.Nouspouvons
programmerlafonctionrebuildImggrceauxcommandesvuescidessus.
FonctionRebuildImg
Slectionnez
def RebuildImg(data,path): #data de l'image reconstruire, plus chemin de sortie.
Copie = Image.new("L",(data.shape[1],data.shape[0]))
Copie.putdata(list(data.flat))
Copie.save(fp=str(path))

Slectionnez
>>> RebuildImg(a,"c:\\IMG.bmp")

Aprscesdeuxparagraphes,noussavonsprendrelesdonnesbrutesdel'imageet
reconstruireuneimage.Danslesprochainsparagraphes,letraitementd'imageseralecentre
d'intrt.
IV.TRAITEMENTD'IMAGEBASIQUE
Pourcequiestdutraitementd'image,nousferonsdeschosesbasiques:
unefonctionseuillageavecpossibilitdedonnerdeuxseuils
unerosioncompatiblesurlesimagesbinairesetenniveauxdegris
unedilatationcompatiblesurlesimagesbinairesetenniveauxdegris.
Cettepartieseraconstitued'unrappeldecourssurlesmorphologiesmathmatiques,puisde
l'applicationenprogrammation.

IVA.Segmentation
IVA1.Rappeldecours
Lasegmentationestl'oprationquipermetdespareruneimageendeuxensemblesd'objets.
Lecritredeslectionestlavaleurdespixelsprsentsdansl'image.Lebuttantdecrerdeux
populations,nousallonssparerl'ensembledespixelsendeuxensemblesdistincts.Nous
mettronsdansunepopulationlespixelsayantpourvaleursdesvaleurssuprieuresauseuil
donn,ceseralapopulationblanche,ouobjet.Dansl'autrepopulation,nousmettronslespixels
ayantdesvaleursinfrieuresauseuildonn,ceseralapopulationnoire,oufond.Onpeut
excuterundoubleseuillage,c'estdiretablirlapopulationblanchetantlapopulation
rpondantdeuxcritresdeseuils.Parexemplelapopulationblancheseralespixelsayantune
valeurinfrieureauseuil1maissuprieureauseuil2.

IVA2.Applicationlaprogrammation
Jevaiscrireunalgorithmesimple,maisquinouspermettradebiencomprendrelebut
recherch.Ensuitejedcrirailescommandespermettantdemettreenuvreleseuillage.
Algorithmeduseuillage
Slectionnez
Faire ouvrir Image seuiller
Crer nouveaux tableaux
Faire pour tout i dans l'image seuiller
regarder pixel[i]
si pixel[i] infrieur seuil 1 et si pixel[i] suprieur seuil 2
mettre tableau[i] 1
sinon mettre tableau[i] zro.
Fin si
Crer l'image rsultat
Fin faire

NousadmettronspourlasuitedudveloppementquelavariableImgestlersultatde
l'ouvertured'uneimageparlafonctionOuvrirImg().

Slectionnez
>>> Img = OuvrirImg("c:\\test.bmp")

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

4/10

15/9/2015

Tutoriel NUMPY
Toutd'abord,jetienssoulignerquefaireunseuillagesurtest.bmpn'estpasjudicieux,cariln'y
aquedeuxvaleursdepixels.Donclespixelssontdjtrisendeuxpopulations.Unefoisla
fonctionprogramme,ellemarcherapourlesimagesenniveauxdegris.Jevaisdvelopper
plusieurssolutionsafinquevouspuissiezvoircommentonpeutfairelammechosedefaon
diffrente.Pourcommencer,nousallonsconstruirelenouveautableau.Commevousavezpule
voirdanslaFAQ,ilexisteplusieursfaonspourcreruntableau.Toutdpenddecommenton
veutprocder.

Slectionnez
>>> tab=[0]*2 #cre une liste de 0 de longueur 2
>>> tab
[0, 0]

Ilestpeuttrejudicieuxd'utiliserlafonctionappend.

Slectionnez
>>> tab.append(12)
>>> tab
[0, 0, 12]

Ilfautserendrecompted'unechose,notreimageadeuxdimensions.Pourleseuillage,
travaillerunedimensionestsuffisant.Doncnousfabriqueronsuntableauaveclafonction
append.VousaurezcomprisquenoustravailleronssurnotrematriceauformatFLAT.Nous
utiliseronsuneboucleforpourparcourirlespixels.Nousferonsuntestdecomparaisondes
valeursdespixels.

Slectionnez
>>> Img = OuvrirImg("c:\\test.bmp")
>>> ImgF = list(Img.flat)
>>> SeuilHaut = 128
>>> SeuilBas = 25
>>> Tab = []
>>> for i in range(len(ImgF)):
if ImgF[i]<SeuilBas and ImgF[i] > SeuilHaut:
Tab.append(1)
else:Tab.append(0)
>>> print Tab

FonctionSeuillage
Slectionnez
def Seuillage(img,seuil_B,seuil_H):
imgF=list(img.flat)
Threshold=[]
for i in range(len(imgF)):
if imgF[i] < seuil_H and imgF[i] > seuil_B:
Threshold.append(1)
else: Threshold.append(0)
Threshold=numpy.array(Threshold)
Threshold=Threshold.reshape(img.shape[0],img.shape[1])
RebuildImg(Threshold*255,"c:\\seuillage.bmp")
return Threshold

CidessusestimplmentelafonctionSeuillage(),j'aiquelquescommentairesfairesur
certaineslignes.Dansl'algorithmenousavionsvuquenousdevionsconstruirel'image
rsultantedenotretraitement.Toutsepassedanscetteligne
RebuildImg(Threshold*255,"c:\\seuillage.bmp"),nousmultiplionslesvaleurscontenuesdans
Thresholdpar255pourl'affichage.Eneffetl'imageThresholdestuneimagebinaire,celaveut
direquesesvaleurssontcomprisesentre0et1.Pourquelesobjetsapparaissentenblanc,je
multipliedoncletableaupar255.LereturnThresholdretourneuntableaudetypebinairepour
quel'onpuissefairedesoprationsboolennesdessus(ET,OU,UNION,etc.,etc.).
Cependant,danslesoucidudtail,Guigui_m'afaitparvenirunefaondefaireunseuillage
100%NumPyetceluiciestplusrapide.
FonctionSeuillage
Slectionnez
import numpy
def seuillage(img, seuil, vbasse = 0, vhaute = 255):
return numpy.where(img>= seuil, vhaute, vbasse)

Voil,jepensequecelasepassedecommentaire,lafonctionwhereconstruitunarrayquia
pourvaleur255lorsquelespixelssontsuprieursauseuil,sinonilssontzro.Pourobtenirun
objetplusBooleen,remplacez255par1.

IVA3.Exempledel'application
J'aieffectuunseuillagede125250surl'imagedelenna.GIF.Voicilersultat.
lenna.gif

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

5/10

15/9/2015

Tutoriel NUMPY

seuillage.gif

IVB.Dilatation
IVB1.RappeldeCours
Ladilatationestavecl'rosionetquelquesautresoprateurs,unoprateurdebaseen
morphologie.Nouspouvonscrerplusieursfiltresmorphologiquesavecladilatationetl'rosion.
L'rosionestuneanalogiedeladilatation,quandvousaurezcomprisladilatation,ilseraais
pourvousdecomprendrel'rosion.Admettonsunensembled'objets.Posonsnouslaquestion:
Estcequ'enleparcourantdansl'imagemonlmentstructuranttouchemonobjet?La
rponsepositivecettequestions'appelleleDILATdemonobjet.
Qu'estcequel'lmentstructurant?
L'lmentstructurantestunmasquequenousfaisonsparcourirsurtoutel'image.chaque
position,onseposelaquestionposeprcdemment,sachantquelarponseseraapplique
l'endroitoestcentrl'objet.
Exempleavecunobjet,unlmentstructurantcarr3x3etdeuxpositionsdeceluici:

Danslepremiercas:estcequel'lmentstructuranttouchel'objet?
Rponse:NON,donclepixelsouslecentredel'lmentstructurant(caserouge)n'estpasun
pixeldudilatdel'objet.
Dansledeuximecas:estcequel'lmentstructuranttouchel'objet?
Rponse:OUI,donclepixelsouslecentredel'lmentstructurantappartientaudilatde
l'objet.

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

6/10

15/9/2015

Tutoriel NUMPY

IVB2.Applicationlaprogrammation
Nousavonsvulesbasesdeladilatation,maislorsqu'ilfautcodertoutcela,onutiliseuneautre
dfinitiondeladilatation.Enprogrammation,ledilatd'unpixelc'estlavaleurMAXauvoisinage
decepixelcomprisdansl'lmentstructurant.Ladfinitionciteplushautnemarchequepour
lesimagesbinaires,cependant,onpeutdilateruneimageenniveauxdegris.Ladfinitionque
jeviensdeciterfonctionneaveclesimagesbinairescommeenniveauxdegris.
Unautreproblmeintervientenprogrammation,c'estl'effetdebord.Lagestiondesbordsen
traitementd'imagesestassezsubjective,pourcertainscommepourlaplupartdescas,nous
supprimonslesobjetstouchantlesbords,lagestiondesbordsestalorsunechoseobsolte.
Pournous,lagestiondesbordsestrespecte.Pourcela,nousallonsagrandirnotreimage.
Nousallonsajouterunebordured'unpixel,carcommevousl'avezdevin,nousauronsdes
problmesdugenreindexoutofrange.
Exempled'unedilatationsurunematricedenombres.RAPPELDEDFINITION:ledilatestla
valeurMAXcompriseauvoisinaged'unpixelcomprisdansl'lmentstructurant.

LavaleursurligneestbienlavaleurMAXcomprisedansl'lmentstructurant.Lavaleur
surligneestbienledilatdesvaleurscetendroit.
Algorithmedeladilatation
Slectionnez
Ouvrir Image Dilater
Ajouter une bordure l'image pour grer l'effet de bord
Crer un nouveau tableau pour stocker les rsultats de la taille de l'image ORIGINALE
x=largeur de l'image+bordure
y=hauteur de l'image+bordure
pour tous les i allant de 1 x-1:
pour tous les j allant de 1 j-1:
tableau[i-1][j-1]=max(voisinage 3x3 de ce pixel)
Reconstruire l'image dilate

Pourgrerlesbords,nousallonscrerunefonction.Maisqueltypedepixelsallonsnousmettre
danscettebordure?NousallonsmettredespixelsNOIRS,carilsn'interagirontpasavecles
valeurs.

Slectionnez

1,1,1
1,1,1
1,1,1

0,0,0,0,0
0,1,1,1,0
--->fonction()----> 0,1,1,1,0
0,1,1,1,0
0,0,0,0,0

Pourcela,ilsuffitdecreruntableaudedimensions(x+2,y+2).
AlgorithmedelafonctionBord
Slectionnez
Ouvrir Image dilater
Crer un tableau (x+2,y+2) rempli de 0
Pour i de 1 x-1:
Pour j de 1 y-1:
tableau[i][j]=Image[i-1][j-1]
fin Pour
fin Pour
Faire DILATATION

Voicilafonctionbord().
LafonctionBord
Slectionnez
def Bord(data):
data=numpy.array(data)
x=data.shape[1]+2
y=data.shape[0]+2
new=[x*[0]]*y #cration du tableau
new=numpy.array(new)
h=1
for i in range(1,y-1):
for j in range(1,x-1):
new[i][j]=data[i-1][j-1] #remplissage du tableau
return new

Ilsuffitmaintenantdeparcourircetableaude1x1etde1y1,deregarderdansun
voisinage3x3lesvaleursetappliquerlavaleurmaxaupointd'ancragedel'lmentstructurant.
Voicilafonctiondilatation()
LafonctionDilatation

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

7/10

15/9/2015

Tutoriel NUMPY
Slectionnez
def Dilatation(img):

Dilate=[0]*(img.shape[1]-2)*(img.shape[0]-2)
h=0
for i in range(1,img.shape[0]-1):
for j in range(1,img.shape[1]-1):
Dilate[h]=max([img[i-1][j-1],img[i][j-1],img[i+1][j-1],img[i-1][j],img[i][j],img
#Mise de la valeur max du voisinage 3x3 au point(x,y)
h+=1
Dilate=numpy.array(Dilate)
Dilate=numpy.reshape(Dilate,(img.shape[0]-2,img.shape[1]-2))
RebuildImg(Dilate,"c:\\dilate.bmp")

Voil,nousavonsprogrammladilatation.Pourl'rosionvousverrezquetrspeude
changementssontapporter.

IVB3.Exempledel'application

Slectionnez
>>> a = OuvrirImg("c:\\bob.bmp")
>>> b = Bord(a)
>>> c = Dilatation(b)

bob.bmp

bobdilat

bobseuill128255

bobseuillpuisdilat

Onvoitbienquelesobjetsenblancgagnentduterrainalorsquelesobjetsennoiren
perdent.Nousavonsdilat.

IVC.rosion
http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

8/10

15/9/2015

Tutoriel NUMPY

IVC1.Rappeldecours
Commejel'aiditprcdemment,l'rosionestunoprateurdebaseentraitementd'image.Je
pensequevousavezcompriscequ'estlaDILATATION,alorsjenevaispasm'tendreetme
perdredanslesdfinitionscomplexes.Rappelezvousquenousnousposionsunequestionpour
savoirsiunpixelappartenaitaudilatdecetobjet.Ilexisteunequestionpourl'rosion.
Admettonsunensembled'objets.
Posonsnouslaquestion:estcequemonlmentstructurantestcompltementinclusdans
monobjet?
Lesrponsespositivesconstituerontl'roddel'objet.

Danslepremiercas,posonsnouslaquestion:estcequel'lmentstructurantest
compltementinclusdansmonobjet?
Danslepremiercas,larponseestngative.
Danslesecond,elleestpositive,donclepixelsitusouslecentredel'lment
structurantseramis1.C'estaussisimplequecela.

IVC2.Applicationlaprogrammation
Commepourladilatation,ilexisteuneastucepourcalculerl'rodd'unobjet.Pourladilatation,
nousprenionslemaxdansunvoisinage3x3,pourl'rosionnousprendronsleminimumdansun
voisinage3x3.Pourlagestiondesbords,nousauronsunefonctionbord2prochedelafonction
bordsaufquel'onajouteraunborddepixelsblancspourqu'ilnefaussepaslersultat.
LafonctionBord2
Slectionnez
def Bord2(data):
data=numpy.array(data)
x=data.shape[1]+2
y=data.shape[0]+2
new=[x*[1]]*y #cration du tableau
new=numpy.array(new)
h=1
for i in range(1,y-1):
for j in range(1,x-1):
new[i][j]=data[i-1][j-1] #remplissage du tableau
return new

Voicilecodedel'rosion.
LafonctionErosion
Slectionnez
def Erosion(img):

Erode=[0]*(img.shape[1]-2)*(img.shape[0]-2)
h=0
for i in range(1,img.shape[0]-1):
for j in range(1,img.shape[1]-1):
Erode[h]=min([img[i-1][j-1],img[i][j-1],img[i+1][j-1],img[i-1][j],img[i][j],img[
#Mise de la valeur max du voisinage 3x3 au point(x,y)
h+=1
Erode=numpy.array(Erode)
Erode=numpy.reshape(Erode,(img.shape[0]-2,img.shape[1]-2))
RebuildImg(Erode,"c:\\erode.bmp")

Voill'rosionestprogramme.C'esttrssimilaireladilatationquelquesdtailsprs.

IVC3.Exempledel'application

Slectionnez
>>> a = OuvrirImg("c:\\bob.bmp")
>>> b = Bord2(a)
>>> c = Erosion(b)

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

9/10

15/9/2015

Tutoriel NUMPY
bob.bmp

bobrod

V.CONCLUSION
Voilc'estterminpourcetutoriel,dansunprochaintutoriel,nousapprendronsconvoluer
uneimageparunnoyauetprogrammerunedtectiondecontourgrcecela.
Vousavezaimcetutoriel?Alorspartagezleencliquantsurlesboutonssuivants:

Partager

Copyright2007FranoislouisLAILLIER.Aucunereproduction,mmepartielle,nepeuttrefaitedece
siteetdel'ensembledesoncontenu:textes,documents,images,etc.sansl'autorisationexpressede
l'auteur.Sinonvousencourezselonlaloijusqu'troisansdeprisonetjusqu'300000dedommageset
intrts.

ResponsablebnvoledelarubriquePython:LanaBauerContacterparemail
Nouscontacter

Participez

Hbergement

Informationslgales

Partenaire:HbergementWeb

Copyright20002015www.developpez.com

http://francoislouislaillier.developpez.com/Python/Tutoriel/InitiationNumpy/Tuto1/

10/10

Vous aimerez peut-être aussi