Académique Documents
Professionnel Documents
Culture Documents
net/publication/357204356
CITATIONS READS
0 259
1 author:
Imen Chebbi
University of Nantes
43 PUBLICATIONS 4 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
Approche d’Amélioration de la Visibilité des Entreprises sur Internet à base du Comportement Navigationel de l’internaute View project
All content following this page was uploaded by Imen Chebbi on 21 December 2021.
Introduction
Les images numériques ont de plus en plus de domaines d’application de nos
jours. Il convient d’ailleurs de prendre ici le mot image au sens large de
cartographie d’une propriété physique, éventuellement complexe ou vectorielle, en
tout cas non limitée à l’intensité photométrique. Ces images doivent souvent être
obtenues par le calcul, à partir de données issues de capteurs, voire à partir
d’autres images.
Fondements théoriques
La segmentation d'image vise à partitionner une image en plusieurs régions disjointes,
chaque région correspondant à un objet visuel significatif. C'est un problème fondamental
dans le traitement d'image et la vision par ordinateur, et a de larges applications dans la
reconnaissance d'objets, le suivi de cibles, la récupération d'images basée sur le contenu et
le traitement d'images médicales.
De nombreuses méthodes existantes traitent la segmentation d'image comme un problème
de regroupement et ont été empiriquement réussies.
Les auteurs [1], ont présenté une méthode pour segmenter des images avec des régions
texturées et non texturées et ont formulé le problème de segmentation comme une
régression linéaire multivariée, où la solution est obtenue par estimation des moindres
carrés tout en approchant l'histogramme spectral local d'un emplacement de pixel par une
combinaison linéaire des caractéristiques représentatives pondérées par la couverture de
zone de chaque entité. Aussi, ils ont proposé un algorithme pour identifier
automatiquement les caractéristiques représentatives correspondant à différentes régions
homogènes et ont montré que le nombre de caractéristiques représentatives peut être
déterminé en examinant le rang effectif d'une matrice de caractéristiques.
Dans [2], l'extension des images couleur avec des images de profondeur régressées en
profondeur correspondantes, a été étudiée, pour améliorer les performances de la
segmentation sémantique. Les auteurs ont utilisé la combinaison de canaux de couleur avec
la profondeur estimée ou le canal de profondeur de vérité au sol est comparé. Ils ont utilisé
dans les expériences, deux ensembles de données RGBD populaires, à savoir, SUNRGBD
et NYUDv2, pour la segmentation sémantique de 37 et 40 classes, respectivement.
Les auteurs [3], présentent un modèle de jeu de niveaux basé sur la région locale pour la
segmentation d'image. Ils ont définit, dans chaque région locale, une énergie des moindres
carrés pondérée localement pour s'adapter à un classificateur linéaire. Avec une
représentation par jeu de niveaux, ces fonctions énergétiques locales sont ensuite intégrées
sur tout le domaine de l'image pour développer un modèle de segmentation global. La
fonction objective dans ce modèle est ensuite minimisée via l'évolution de l'ensemble de
niveaux. Dans ce processus, les paramètres liés au classificateur localement linéaire sont
estimés de manière itérative. Les auteurs ont introduit les fonctions localement linéaires
pour séparer l'arrière-plan et l'avant-plan dans les régions locales.
Dans [4], les auteurs ont proposé un algorithme de regroupement flou, pour segmenter les
images en différents tissus. Aussi, ils ont utilisé des méthodes de régression linéaire, pour
concevoir le modèle de régression basé sur la méthode d'extraction de caractéristiques et
les valeurs d'intensité de luminosité. Les résultats de l'algorithme proposé pour
l'histogramme dose-volume (DVH), les courbes isodose et l'analyse gamma ont été étudiés
à l'aide du système de planification de traitement RayPlan et du logiciel VeriSoft. En outre,
divers indices statistiques tels que l'erreur absolue moyenne (MAE), l'erreur moyenne
(ME) et l'indice de similarité structurelle (SSIM) ont été calculés.
Les auteurs [5], ont proposé une approche intégrée basée sur la régression inverse itérative
en tranches (ISIR) pour la segmentation d'images par ultrasons et résonance magnétique
(RM).Ils se sont basé sur le clustering non supervisé qui combine la mise à l'échelle
multidimensionnelle (MDS) avec des K-Means pour la réduction de dimension et donc
obtenir moins de variables représentatives comme variables d'entrée pour les K-Means.
Aussi, ils ont combiné le SIR avec le classificateur moyen le plus proche (NMC) ou la
machine vectorielle de support (SVM) pour mettre à jour de manière itérative les étiquettes
de groupe pour la segmentation supervisée.
Algorithmes
On cherche à modéliser une variable quantitative Y en fonction de variables explicatives
quantitatives x1, x2, ..., xp.
Sous l’hypothèse gaussienne, le modèle de régression linéaire s’écrit :
(1)
avec β0, β1, ..., βp inconnus, et e1, ..., en n observations indépendantes d’une loi N(0,σ2 )
avec σ2 inconnue.
On veut étudier la relation entre ces deux variables, et en particulier, l’effet de x (variable
explicative) sur y (variable réponse). Dans un premier temps, on peut représenter
graphiquement cette relation en traçant le nuage des n points de coordonnées (xi ,yi). Dans
le cas où le nuage de points est de forme “linéaire”, on cherchera à ajuster ce nuage de
points par une droite.
La relation entre yi et xi s’écrit alors sous la forme d’un modèle de régression linéaire
simple [6]:
∀i = {1,...,n} (2)
où ei est une réalisation de Ei ∼ N(0,σ2 ), et les n v.a. Ei sont indépendantes. La première
partie du modèle β0 + β1xi représente la moyenne de yi sachant xi , et la seconde partie ei ,
la différence entre cette moyenne et la valeur observée yi . Le nuage de points est résumé
par la droite d’équation y = β0 + β1x.
Poids du courrier
Pour un xi donné, correspondent donc yi la valeur observée et β0 + β1xi la valeur prédite
par la droite.
Expérimentations
Dans notre travail, on a utilisé ‘perturbations’,’predictions’ et ‘weights’ pour ajuster
un modèle explicable (linéaire), Un modèle de régression linéaire pondéré est
ajusté à l'aide des données des étapes précédentes (perturbations, prédictions et
poids). Étant donné que la classe que nous voulons expliquer est le labrador, lors
de l'ajustement du modèle linéaire, nous ne prenons du vecteur de prédictions que
la colonne correspondant à la classe prédite la plus élevée. Chaque coefficient du
modèle linéaire correspond à un superpixel dans l'image segmentée. Ces
coefficients représentent l'importance de chaque superpixel pour la prédiction du
labrador.
Ce critère calcule la somme des contrastes des régions (pondérée par leur aire ( . On peut
définir le contraste d’une région à partir des contrastes existants avec les régions qui lui
sont contigües
Ou (3)
Avec
: moyenne de la région.
: Longueur de la frontière commune entre et.
: Périmètre de la région.
Ce critère permet de calculer la somme des variances normalisées des régions (retranchée à
1).
L’avantage de ce critère est d’être facilement mis à jour dans les opérations de fusion ou de
division des régions.
(4)
: disparité inter-classe
Dans le cas uniforme la disparité intraclasse d’une région est donnée par :
(5)
Moy1 : la moyenne des sommes carrées des niveaux de gris de la région examinée.
Cette statistique d’ordre 2 sur la dispersion des niveaux de gris d’une région est
suffisante pour caractériser la disparité intra-classe d’une région.
Disparité interclasse
On calcule la disparité entre deux régions et de la facon suivante :
(6)
L’avantage principal des critères d’évaluation non supervisés est qu’ils requièrent
seulement une métrique de mesure de qualité .Alors, ils sont automatisables et ne
nécessitent aucun expert. L’inconvénient majeur de ces critères est l’incertitude sur la
fonction de calcul de caractéristiques [10].
Pour tester notre algorithme nous avons utilisé les images Fig1 et Fig2 suivantes :
Fig3: L’effet perturbation sur Fig4: L’effet perturbation sur l’image Lina
l’image Cameramen
Fig6: L’effet perturbations, prédictions et weights pour ajuster un modèle explicable (linéaire)
sur l’image Lina
Pour tester notre Algorithme nous avons trouvée comme valeur de mesure Levine-Nazif :
Figure 1 Figure 2
Levine-Nazif 0,035 0,030
Code Python
Nous avons utilisé pour la régression linéaire Google Colab et voici les
deux codes pour les deux images. On commence pour le code de régression
linéaire pour l'image Lina :
%tensorflow_version 1.x
import numpy as np
import keras
from keras.applications.imagenet_utils import decode_predictions
import skimage.io
import skimage.segmentation
import copy
import sklearn
import sklearn.metrics
from sklearn.linear_model import LinearRegression
import warnings
warnings.filterwarnings('ignore')
inceptionV3_model = keras.applications.inception_v3.InceptionV3() #Load pr
etrained model
from google.colab import drive
drive.mount('/content/drive')
cd drive/My Drive
Xi = skimage.io.imread("/content/drive/My Drive/lena_gray_256.jpg")
Xi = skimage.transform.resize(Xi, (299,299))
Xi = (Xi - 0.5)*2 #Inception pre-processing
skimage.io.imshow(Xi/2+0.5) # Show image before inception preprocessing
np.random.seed(222)
preds = inceptionV3_model.predict(Xi[np.newaxis,:,:,:])
decode_predictions(preds)[0] #Top 5 classes
top_pred_classes = preds[0].argsort()[-5:][::-1]
top_pred_classes #Index of top 5 classes
superpixels = skimage.segmentation.quickshift(Xi, kernel_size=4,max_dist=2
00, ratio=0.2)
num_superpixels = np.unique(superpixels).shape[0]
num_superpixels
skimage.io.imshow(skimage.segmentation.mark_boundaries(Xi/2+0.5, superpixe
ls))
num_perturb = 150
perturbations = np.random.binomial(1, 0.5, size=(num_perturb, num_superpix
els))
perturbations[0] #Show example of perturbation
def perturb_image(img,perturbation,segments):
active_pixels = np.where(perturbation == 1)[0]
mask = np.zeros(segments.shape)
for active in active_pixels:
mask[segments == active] = 1
perturbed_image = copy.deepcopy(img)
perturbed_image = perturbed_image*mask[:,:,np.newaxis]
return perturbed_image
skimage.io.imshow(perturb_image(Xi/2+0.5,perturbations[0],superpixels))
predictions = []
for pert in perturbations:
perturbed_img = perturb_image(Xi,pert,superpixels)
pred = inceptionV3_model.predict(perturbed_img[np.newaxis,:,:,:])
predictions.append(pred)
predictions = np.array(predictions)
predictions.shape
original_image = np.ones(num_superpixels)[np.newaxis,:] #Perturbation with
all superpixels enabled
distances = sklearn.metrics.pairwise_distances(perturbations,original_imag
e, metric='cosine').ravel()
distances.shape
kernel_width = 0.25
weights = np.sqrt(np.exp(-
(distances**2)/kernel_width**2)) #Kernel function
weights.shape
class_to_explain = top_pred_classes[0]
simpler_model = LinearRegression()
simpler_model.fit(X=perturbations, y=predictions[:,:,class_to_explain], sa
mple_weight=weights)
coeff = simpler_model.coef_[0]
coeff
num_top_features = 4
top_features = np.argsort(coeff)[-num_top_features:]
top_features
mask = np.zeros(num_superpixels)
mask[top_features]= True #Activate top superpixels
skimage.io.imshow(perturb_image(Xi/2+0.5,mask,superpixels) )
%tensorflow_version 1.x
import numpy as np
import keras
from keras.applications.imagenet_utils import decode_predictions
import skimage.io
import skimage.segmentation
import copy
import sklearn
import sklearn.metrics
from sklearn.linear_model import LinearRegression
import warnings
warnings.filterwarnings('ignore')
inceptionV3_model = keras.applications.inception_v3.InceptionV3() #Load pr
etrained model
from google.colab import drive
drive.mount('/content/drive')
cd drive/My Drive
Xi = skimage.io.imread("/content/drive/My Drive/cameramen.jfif")
Xi = skimage.transform.resize(Xi, (299,299))
Xi = (Xi - 0.5)*2 #Inception pre-processing
skimage.io.imshow(Xi/2+0.5) # Show image before inception preprocessing
np.random.seed(222)
preds = inceptionV3_model.predict(Xi[np.newaxis,:,:,:])
decode_predictions(preds)[0] #Top 5 classes
top_pred_classes = preds[0].argsort()[-5:][::-1]
top_pred_classes #Index of top 5 classes
superpixels = skimage.segmentation.quickshift(Xi, kernel_size=4,max_dist=2
00, ratio=0.2)
num_superpixels = np.unique(superpixels).shape[0]
num_superpixels
skimage.io.imshow(skimage.segmentation.mark_boundaries(Xi/2+0.5, superpixe
ls))
num_perturb = 150
perturbations = np.random.binomial(1, 0.5, size=(num_perturb, num_superpix
els))
perturbations[0] #Show example of perturbation
def perturb_image(img,perturbation,segments):
active_pixels = np.where(perturbation == 1)[0]
mask = np.zeros(segments.shape)
for active in active_pixels:
mask[segments == active] = 1
perturbed_image = copy.deepcopy(img)
perturbed_image = perturbed_image*mask[:,:,np.newaxis]
return perturbed_image
skimage.io.imshow(perturb_image(Xi/2+0.5,perturbations[0],superpixels))
predictions = []
for pert in perturbations:
perturbed_img = perturb_image(Xi,pert,superpixels)
pred = inceptionV3_model.predict(perturbed_img[np.newaxis,:,:,:])
predictions.append(pred)
predictions = np.array(predictions)
predictions.shape
original_image = np.ones(num_superpixels)[np.newaxis,:] #Perturbation with
all superpixels enabled
distances = sklearn.metrics.pairwise_distances(perturbations,original_imag
e, metric='cosine').ravel()
distances.shape
kernel_width = 0.25
weights = np.sqrt(np.exp(-
(distances**2)/kernel_width**2)) #Kernel function
weights.shape
class_to_explain = top_pred_classes[0]
simpler_model = LinearRegression()
simpler_model.fit(X=perturbations, y=predictions[:,:,class_to_explain], sa
mple_weight=weights)
coeff = simpler_model.coef_[0]
coeff
num_top_features = 4
top_features = np.argsort(coeff)[-num_top_features:]
top_features
mask = np.zeros(num_superpixels)
mask[top_features]= True #Activate top superpixels
skimage.io.imshow(perturb_image(Xi/2+0.5,mask,superpixels) )
Conclusion
Bibliographie
[1] Yuan, J., Wang, D., & Li, R. (2012). Image segmentation using local spectral
histograms and linear regression. Pattern Recognition Letters, 33(5), 615–
622. doi:10.1016/j.patrec.2011.12.003.
[2] Bertò, G., Bullock, D., Astolfi, P., Hayashi, S., Zigiotto, L., Annicchiarico, L.,
Olivetti, E. (2020). Classifyber, a robust streamline-based linear classifier for white
matter bundle segmentation. NeuroImage,
117402. doi:10.1016/j.neuroimage.2020.117402.
[3] Ying Wang, Shiming Xiang, Chunhong Pan, Lingfeng Wang, Gaofeng Meng. (2013). Level set evolution
locally linear classification for image segmentation. Pattern Recognition Volume 46, Issue 6, Pages 1734-1746.
[4] Yousefi Moteghaed, N., Mostaar, A., Maghooli, K., Houshyari, M., & Ameri, A. (2020). Estimation and evalu
of pseudo-CT images using linear regression models and texture feature extraction from MRI images in the
region to design external radiotherapy planning. Reports of Practical Oncology & Radiotherapy, 25(5),
745. doi:10.1016/j.rpor.2020.05.005
[5] Wu, H.-M., & Lu, H. H.-S. (2007). Iterative sliced inverse regression for segmentation of ultrasound and
images. Pattern Recognition, 40(12), 3492–3502. doi:10.1016/j.patcog.2007.04.019.
[6] C.Chouquet. (2010). MODELES LINEAIRES. M1 IMAT, Année 2009-2010, Laboratoire de Statistiqu
Probabilités - Université Paul Sabatier – Toulouse.
[8] Hélène LAURENT, Sébastien CHABRIER, Christophe ROSENBERGER, Bruno EMILE, Pierre MARCHÉ. E
comparative de critères d’évaluation de la segmentation. Laboratoire Vision et Robotique ENSI de Bourg
Université d’Orléans
[9] Seyed Sadough, Touloumdjian. (2004). Segmentation par ligne de partage des eaux sous contraintes. DEA A
http://www.tsi.telecom-paristech.fr/pages/enseignement/ressources/beti/lpe2/ index.html.
[11] LEVINE M.D., NAZIF A.M., (1985). Dynamic measurement of computer generated image segmentations, I
Trans. on PAMI, 7(25), p. 155-164.