FUCKING FIRST COMMIT
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 834 B |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 8.4 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.7 KiB |
|
@ -0,0 +1,381 @@
|
|||
---
|
||||
|
||||
settings:
|
||||
enabled_extensions:
|
||||
- default
|
||||
- extra
|
||||
- tables
|
||||
- tasklist
|
||||
- codehilite(linenums=true)
|
||||
---
|
||||
<style>
|
||||
body{
|
||||
max-width: 1000px;
|
||||
width: 95%;
|
||||
margin-bottom: 60vh;
|
||||
}
|
||||
h1 {
|
||||
counter-reset: countA;
|
||||
text-align: center;
|
||||
color: #004335;
|
||||
background-color: #EDFFFF;
|
||||
padding-top: 10px;
|
||||
border-top: 5px solid #EEEEEE !important;
|
||||
border-bottom: 5px solid #EEEEEE !important;
|
||||
margin-top: 3em !important;
|
||||
left: -30px;
|
||||
width: calc(100% + 60px);
|
||||
}
|
||||
.markdown-body>h1:first-of-type{
|
||||
margin-top: 0px !important;
|
||||
padding: 20px;
|
||||
font-size: 3em;
|
||||
top: -30px;
|
||||
border-top: none !important;
|
||||
}
|
||||
h1 .headeranchor-link{
|
||||
margin-left: 0px !important;
|
||||
}
|
||||
h2 {
|
||||
counter-reset: countB;
|
||||
color: #004335;
|
||||
margin-top: 2em !important;
|
||||
left: -15px;
|
||||
width: calc(100% + 30px);
|
||||
}
|
||||
h2 .headeranchor-link{
|
||||
margin-left: -20px !important;
|
||||
}
|
||||
h3 { counter-reset: countC; }
|
||||
h3 { counter-reset: countD; }
|
||||
h1::before, h1::after {content: " - ";}
|
||||
h2::before {
|
||||
content: counter(countA) ". ";
|
||||
counter-increment: countA;
|
||||
}
|
||||
h3::before {
|
||||
content: counter(countA) "-" counter(countB) ". ";
|
||||
counter-increment: countB;
|
||||
}
|
||||
h4::before {
|
||||
content: counter(countA) "-" counter(countB) "-" counter(countC) ". ";
|
||||
counter-increment: countC;
|
||||
}
|
||||
h5::before {
|
||||
content: counter(countA) "-" counter(countB) "-" counter(countC) "-" counter(countD) ". ";
|
||||
counter-increment: countD;
|
||||
}
|
||||
info, good, warn, err{
|
||||
border-left: 4px solid #000;
|
||||
padding: 5px;
|
||||
padding-left: 15px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
info {
|
||||
background-color: #E8FAFF;
|
||||
border-left-color: #8BE8FF;
|
||||
}
|
||||
good {
|
||||
background-color: #E8FFEA;
|
||||
border-left-color: #6DFF7B;
|
||||
}
|
||||
warn {
|
||||
background-color: #FFF5EB;
|
||||
border-left-color: #FFE28B;
|
||||
}
|
||||
err {
|
||||
background-color: #fceded;
|
||||
border-left-color: #dfb5b4;
|
||||
}
|
||||
.toc{
|
||||
margin-left: 5%;
|
||||
padding-left: 5%;
|
||||
border-left: 5px solid #EEEEEE;
|
||||
}
|
||||
.toc>ul:first-child>li:first-child{
|
||||
display: none;
|
||||
}
|
||||
.linenos{
|
||||
color: #BBB;
|
||||
padding: 0px;
|
||||
border-right: 4px solid #EEE !important;
|
||||
}
|
||||
.linenos pre{
|
||||
padding-right: 5px;
|
||||
}
|
||||
.suppr{
|
||||
display: none;
|
||||
content: "";
|
||||
}
|
||||
todo::before{
|
||||
color: #F00;
|
||||
content: "TODO";
|
||||
background-color: #0FF;
|
||||
font-weight: bold;
|
||||
padding: 2px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.codehilite pre{
|
||||
background-color: #272822;
|
||||
}
|
||||
.hidden{
|
||||
display: none;
|
||||
}
|
||||
|
||||
img{
|
||||
width: 70%;
|
||||
}
|
||||
.dual, .quad{
|
||||
text-align: center;
|
||||
}
|
||||
.dual img{
|
||||
max-width: calc(100% / 2 - 10px);
|
||||
margin: 5px;
|
||||
}
|
||||
.quad img{
|
||||
max-width: calc(50% / 2 - 10px);
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
# TP 2 ImageJ : Filtrage, Contours, Morphologie Mathématique
|
||||
|
||||
__Thomas ABOT__
|
||||
__Thibaut CHARLES__
|
||||
|
||||
|
||||
<div class="hidden">
|
||||
katia.charriere@telecom-bretagne.eu
|
||||
</div>
|
||||
[TOC]
|
||||
|
||||
Partie I : Filtrage spatial, Contours
|
||||
===============================================================================
|
||||
|
||||
Exercice 1 : Filtrage linéaire bidimensionnel non récursif dans le domaine spatial
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
### Filtres
|
||||
#### Smooth
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_smooth.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_smooth.PNG)
|
||||
</span>
|
||||
|
||||
#### Sharpen
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_sharpen.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_sharpen.PNG)
|
||||
</span>
|
||||
|
||||
#### Shadows
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_shadow.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_shadow.PNG)
|
||||
</span>
|
||||
|
||||
#### Convolution
|
||||
|
||||
##### Tests
|
||||
<span class="dual">
|
||||
![](TestConvolve_orig.PNG)![](TestConvolve_customkernel.PNG)
|
||||
</span>
|
||||
> La convolution est correcte
|
||||
|
||||
##### Flou Gaussien
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_gaussien.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_gaussien.PNG)
|
||||
</span>
|
||||
|
||||
##### Gradient N
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_gradientN.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_gradientN.PNG)
|
||||
</span>
|
||||
|
||||
##### Laplacien
|
||||
<span class="dual">
|
||||
![](moly_orig.PNG)![](moly_laplacien.PNG)
|
||||
![](freq_moly_orig.PNG)![](freq_moly_laplacien.PNG)
|
||||
</span>
|
||||
|
||||
### Commentaires
|
||||
|
||||
- <todo/>
|
||||
|
||||
|
||||
|
||||
Exercice 2 : Filtres non-linéaires bidimensionnels, les filtres médians
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
### Médian
|
||||
<span class="dual">![](cornee_orig.PNG)![](cornee_median.PNG)</span>
|
||||
|
||||
### Moyenne
|
||||
<span class="dual">![](cornee_orig.PNG)![](cornee_mean.PNG)</span>
|
||||
|
||||
|
||||
### Bateau, Salt and Pepper
|
||||
<span class="dual">![](bateau_orig.PNG)![](bateau_saltandpepper.PNG)</span>
|
||||
|
||||
#### Médian, taille 3
|
||||
<span class="dual">![](bateau_saltandpepper.PNG)![](bateau_saltandpepper_median3.PNG)</span>
|
||||
#### Moyenne, taille 3
|
||||
<span class="dual">![](bateau_saltandpepper.PNG)![](bateau_saltandpepper_mean3.PNG)</span>
|
||||
|
||||
|
||||
|
||||
Exercice 3 : Introduction à la détection de contours
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Partie II : Morphologie Mathématique
|
||||
===============================================================================
|
||||
|
||||
Traitement d'images binaires
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
### Importance du choix de l'élément structurant (voisinage)
|
||||
|
||||
#### Érosion de taille 3 sur l'image partB
|
||||
|
||||
##### Érosion carrée
|
||||
<span class="quad">![](partb_orig.PNG)![](partb_carre.PNG)</span>
|
||||
##### Érosion héxagonale
|
||||
<span class="quad">![](partb_orig.PNG)![](partb_hexagonal.PNG)</span>
|
||||
##### Érosion Circulaire
|
||||
<span class="quad">![](partb_orig.PNG)![](partb_cercle.PNG)</span>
|
||||
|
||||
#### Cercle1
|
||||
<span class="quad">![](cercle_orig.PNG)</span>
|
||||
|
||||
##### Érosion carrée/hexagonale/circulaire
|
||||
<span class="quad">![](cercle_erode_carre.PNG)![](cercle_erode_hexa.PNG)![](cercle_erode_cercle.PNG)</span>
|
||||
##### Dilatation carrée/hexagonale/circulaire
|
||||
<span class="quad">![](cercle_dilate_carre.PNG)![](cercle_dilate_hexa.PNG)![](cercle_dilate_cercle.PNG)</span>
|
||||
|
||||
#### Cercle2
|
||||
- Idem que pour Cercle1
|
||||
- Disparition du cercle quand l'érosion est trop forte
|
||||
|
||||
#### Rectangles
|
||||
<span class="quad">![](rectangle_orig.PNG)</span>
|
||||
|
||||
|
||||
##### Érosion carrée/hexagonale/circulaire
|
||||
<span class="quad">![](rectangle_erode_carre.PNG)![](rectangle_erode_hexa.PNG)![](rectangle_erode_cercle.PNG)</span>
|
||||
##### Dilatation carrée/hexagonale/circulaire
|
||||
<span class="quad">![](rectangle_dilate_carre.PNG)![](rectangle_dilate_hexa.PNG)![](rectangle_dilate_cercle.PNG)</span>
|
||||
|
||||
|
||||
#### Deviner le type de voisinage
|
||||
|
||||
On prend une forme de base, puis on le dilate beaucoup.
|
||||
|
||||
> Dilatation circulaire / rectangulaire
|
||||
<span class="quad">![](binary_dilate_cercle.PNG)![](binary_dilate_rectangle.PNG)</span>
|
||||
|
||||
|
||||
#### Choix du voisinage
|
||||
|
||||
Il dépend de l'image source:
|
||||
- On préférera un voisinage carré pour conserver les angles de l'image
|
||||
- Le voisinage circulaire est plus adapté pour les images avec des formes courbes
|
||||
|
||||
### Utilisation des transformations élémentaires
|
||||
|
||||
#### Circuit
|
||||
|
||||
Obtention des frontières par différence entre l'image érodée/dilatée et l'image originale
|
||||
|
||||
> Image originale/érodée/différence entre les deux
|
||||
<span class="quad">![](circuit_orig.PNG)![](circuit_erode.PNG)![](circuit_diff.PNG)</span>
|
||||
|
||||
#### Grains de café
|
||||
On érode les grains de café pour faire disparaître les plus petits, puis on dilate puis compte les grains restants.
|
||||
|
||||
> Image originale/érodée/dilatée/comptage
|
||||
<span class="quad">![](cafe_orig.PNG)![](cafe_erodeCercle3.PNG)![](cafe_dilateCercle2.PNG)![](cafe_count.PNG)</span>
|
||||
|
||||
#### Circuit (bis)
|
||||
On érode le circuit afin de faire disparaître les pistes puis dilate autant qu'on a érodé afin de retrouver la taille originale des pastilles.
|
||||
Une fois qu'on a les pastilles, on fait la différence entre l'originale et les pastilles.
|
||||
|
||||
> Image originale/érodée/re-dilatée/différence
|
||||
<span class="quad">![](circuit_orig.PNG)![](circuit_pastilles_erodeCercle4.PNG)![](circuit_pastilles_erodeCercle4_dilateCercle4.PNG)![](circuit_pistes.PNG)</span>
|
||||
|
||||
Pour isoler les pistes obliques, il faut éroder l'image suivant une ligne oblique.
|
||||
|
||||
### Transformations utiles
|
||||
|
||||
#### Remplissage des trous
|
||||
|
||||
On peut boucher les trous en dilatant puis érodant l'image.
|
||||
> Image originale/binarisée/érodée/re-dilatée
|
||||
<span class="quad">![](circuit_2_color.PNG)![](circuit_2_binary.PNG)![](circuit_2_erode.PNG)![](circuit_2_dilate.PNG)</span>
|
||||
|
||||
#### Étiquetage
|
||||
|
||||
> Image originale/étiquetée
|
||||
<span class="quad">![](partb_orig.PNG)![](partb_etiquetteRGB.PNG)</span>
|
||||
|
||||
### Exercice
|
||||
|
||||
> Image originale/binarisée/érodée/re-dilatée/Comptage
|
||||
<span class="quad">![](riz_orig.PNG)![](riz_binary.PNG)![](riz_erodeHorizontal4.PNG)![](riz_dilateHorizontal4.PNG)![](riz_count.PNG)</span>
|
||||
|
||||
Morphologie décimale
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
### Cornée
|
||||
|
||||
> Originale / érosion / soustraction & binarisation
|
||||
<span class="quad">![](cornee_orig.PNG)![](cornee_erosion8hexa.PNG)![](cornee_substractbinary.PNG)</span>
|
||||
|
||||
|
||||
> Approximation des contours via érosion
|
||||
<span class="quad">![](Cornee_erodeCercle1_approxContour.PNG)</span>
|
||||
|
||||
### Gradient morphologique
|
||||
|
||||
> Originale / Gradient de Sobel
|
||||
<span class="quad">![](babouin_orig.PNG)![](babouin_sobel.PNG)</span>
|
||||
|
||||
> Originale / Dilatée / Érodée / Gradient morphologique
|
||||
<span class="quad">![](babouin_orig.PNG)![](babouin_dilate2cercle.PNG)![](babouin_erosion2cercle.PNG)![](babouin_sobel.PNG)</span>
|
||||
|
||||
|
||||
### Filtrage morphologique
|
||||
|
||||
#### Fermeture
|
||||
> Originale / ... / Fermeture
|
||||
<span class="quad">![](babouin_orig.PNG)![](babouin_fermeture1.PNG)![](babouin_diffFermeture.PNG)</span>
|
||||
|
||||
#### Ouverture
|
||||
> Originale / ... / Ouverture
|
||||
<span class="quad">![](babouin_orig.PNG)![](babouin_ouverture1.PNG)![](babouin_diffOuverture.PNG)</span>
|
||||
|
||||
|
||||
Exercices d'application
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
### Image partB
|
||||
|
||||
<todo/>
|
||||
|
||||
### Image meb
|
||||
|
||||
> Originale / Binarisation / Érosion / Dilatation / Comptage
|
||||
<span class="quad">![](meb_orig.PNG)![](meb_binary.PNG)![](meb_erodeCercle2.PNG)![](meb_dilate4.PNG)![](meb_countIs407.PNG)</span>
|
||||
|
||||
|
||||
### Image circuit "binarisée"
|
||||
|
||||
<todo/>
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 972 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 71 KiB |