Académique Documents
Professionnel Documents
Culture Documents
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
Nousallonsmaintenantextrairetouteslesdonnesbrutesdel'image.Onfaitcelagrcela
fonctiongetdata()
Slectionnez
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,
0,
Alorsquesivoustapez:
Slectionnez
>>> print tab
[ 0 0 0 0
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