Blind Sources Separation - Séparation de Sources à l'Aveugle

91
UCL Ecole Polytechnique de Louvain FSAB1507 Mathématiques appliquées RAPPORT - PROJET 4 “Séparation de sources à l’aveugle” Année 2012-2013 Pierre-Alexandre BEAUFORT 22481000 Anouchka PLAS 60111000 Gaëtan RENSONNET 23461000 Wauthier SCHOONJANS 44531000 Professeurs - Pierre-Antoine Absil - François Glineur - Julien Hendrickx - Yurii Nesterov -

description

Bachelor report of engineering students about the Blind Source Separation methods. There is a discussion about the theory that builds the different methods. An analysis of results is done, with some experiments. Besides, implementations perform the separation is available in the appendix.----Rapport d'étudiants bachelier ingénieur. Ce rapport traite de la Séparation de Sources à l'Aveugle. On y trouve une présentation des outils théoriques permettant de construire les différentes méthodes de séparations. De plus, différentes expériences ont été réalisées ; les résultats sont analysés. Par ailleurs, les implémentations effectuant la séparation sont disponibles en annexes.#EPL-Ecole Polytechnique de Louvain#UCL-Université Catholique de Louvain

Transcript of Blind Sources Separation - Séparation de Sources à l'Aveugle

Page 1: Blind Sources Separation - Séparation de Sources à l'Aveugle

UCLEcole Polytechnique de Louvain

FSAB1507

Mathématiques appliquées

RAPPORT - PROJET 4

“Séparation de sources à l’aveugle”Année 2012-2013

Pierre-Alexandre BEAUFORT 22481000Anouchka PLAS 60111000Gaëtan RENSONNET 23461000Wauthier SCHOONJANS 44531000

Professeurs- Pierre-Antoine Absil - François Glineur - Julien Hendrickx - Yurii Nesterov -

Page 2: Blind Sources Separation - Séparation de Sources à l'Aveugle

Table des matières

Introduction 4

1 Modélisation 51.1 Modélisation mathématique du problème . . . . . . . . . . . . . . . . . . . . . . 51.2 Représentation numérique de nos données . . . . . . . . . . . . . . . . . . . . . 61.3 Critère de qualité de nos signaux de sortie . . . . . . . . . . . . . . . . . . . . . 7

2 Détection de contours 82.1 Traitement d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.1.1 Modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.2 Evaluation du gradient d’une image . . . . . . . . . . . . . . . . . . . . . 92.1.3 Matrice des contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1.4 Contours communs comme critère de séparation . . . . . . . . . . . . . . 122.1.5 Différents algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Méthode de la force brute . . . . . . . . . . . . . . . . . . . . . . 13Méthode du tir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.1.6 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Cas réel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Forte similarité des images mélangées . . . . . . . . . . . . . . . . 15Gradients "faibles" . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Mélanges non uniformes . . . . . . . . . . . . . . . . . . . . . . . 17

2.1.7 Pistes d’amélioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2 Traitement de bandes sonores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2.1 Adaptation du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.2 Adaptation du gradient et construction du vecteur de contours . . . . . . 192.2.3 Différents algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Méthode de la force brute avec raffinement . . . . . . . . . . . . . 20Méthode du calcul direct . . . . . . . . . . . . . . . . . . . . . . . 21

2.2.4 Généralisation à plusieurs Sources . . . . . . . . . . . . . . . . . . . . . . 22Cas 3 sources et 2 micros . . . . . . . . . . . . . . . . . . . . . . . 22Cas 3 sources et 3 micros . . . . . . . . . . . . . . . . . . . . . . . 22

2.2.5 Cas pathologiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.2.6 Pistes d’améliorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Independent Component Analysis 243.1 Justification théorique de l’algorithme fast-ICA . . . . . . . . . . . . . . . . . . 24

3.1.1 Mesure de l’indépendance statistique de deux variables aléatoires . . . . 243.1.2 Mesure de la gaussianité d’une variable aléatoire . . . . . . . . . . . . . . 25

Maximisation du kurtosis . . . . . . . . . . . . . . . . . . . . . . . 25Maximisation de la néguentropie . . . . . . . . . . . . . . . . . . . 26Approximation de la néguentropie . . . . . . . . . . . . . . . . . . 27Choix de G(y) pour l’approximation de la néguentropie . . . . . . 28

3.1.3 Pre-processing : PCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2 L’algorithme fast-ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.2.1 Estimation d’un vecteur wi . . . . . . . . . . . . . . . . . . . . . . . . . 303.2.2 Estimation de plusieurs vecteurs . . . . . . . . . . . . . . . . . . . . . . . 313.2.3 Complexité calculatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.3 Implémentation pratique pour les images . . . . . . . . . . . . . . . . . . . . . . 323.3.1 Traitement des images pré-ICA . . . . . . . . . . . . . . . . . . . . . . . 32

2

Page 3: Blind Sources Separation - Séparation de Sources à l'Aveugle

Noir et blanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33RGB component-by-component . . . . . . . . . . . . . . . . . . . 33Noir et blanc vers RGB . . . . . . . . . . . . . . . . . . . . . . . . 35RGB all-in-one . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.3.2 Appel de l’algorithme ICA . . . . . . . . . . . . . . . . . . . . . . . . . . 363.3.3 Normalisations post-ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Normalisation de la matrice A . . . . . . . . . . . . . . . . . . . . 37Moyenne des mixtures . . . . . . . . . . . . . . . . . . . . . . . . 38

3.4 Implémentation pratique pour les sons . . . . . . . . . . . . . . . . . . . . . . . 383.5 Echantillonnage des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.6 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.6.1 Mixage linéaire, homogène et constant . . . . . . . . . . . . . . . . . . . 413.6.2 Signaux sources indépendants . . . . . . . . . . . . . . . . . . . . . . . . 433.6.3 Absence de décalage spatial ou temporel . . . . . . . . . . . . . . . . . . 433.6.4 Sources identiquement distribuées et non-gaussiennes . . . . . . . . . . . 443.6.5 Mixages bruités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.6.6 Situation réelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

4 Interface utilisateur BSS.m 494.1 Critères de l’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.2 Comparaison Edge Detection et ICA . . . . . . . . . . . . . . . . . . . . . . . . 494.3 Perspectives d’amélioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Conclusion 52

Annexes 54

A Cahier des charges 54

B Maximisation du kurtosis 58

C Options implémentées pour l’algorithme ICA 61C.1 RGB component-by-component . . . . . . . . . . . . . . . . . . . . . . . . . . . 61C.2 Noir et blanc vers RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61C.3 RGB all-in-one . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62C.4 Normalisation de la matrice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62C.5 Moyenne des mixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63C.6 Normalisation des résultats son . . . . . . . . . . . . . . . . . . . . . . . . . . . 63C.7 Echantillonnage des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

D Implémentations Matlab 65D.1 Interface utilisateur et utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

D.1.1 BSS.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65D.1.2 importImage.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72D.1.3 importaudio.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73D.1.4 equalizesignals.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73D.1.5 feedbackResults.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74D.1.6 evaluateOutputs.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

D.2 Détection de contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76D.2.1 EdgeSeparation.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76D.2.2 EdgeSeparationTir.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78D.2.3 EdgeSeparationAudio.m . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

3

Page 4: Blind Sources Separation - Séparation de Sources à l'Aveugle

D.2.4 AnalyticalSeparation.m . . . . . . . . . . . . . . . . . . . . . . . . . . 82D.3 ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

D.3.1 fastica.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84D.3.2 fxptica.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85D.3.3 whiten.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88D.3.4 normalisation.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

4

Page 5: Blind Sources Separation - Séparation de Sources à l'Aveugle

Abstract

La séparation de signaux à l’aveugle (blind source separation) consiste à séparer des signauxmixés en ne disposant d’aucune information a priori sur ces signaux. Dans le cadre de ce pro-jet, nous nous sommes vu jouer le rôle d’agents de la Sûreté d’Etat, chargés de récupérer uneconversation d’importance couverte par une musique intempestive et de récupérer la photogra-phie d’un document confidentiel gâchée par un reflet indésirable.

Sous les hypothèses d’un mixage linéaire, homogène et constant de sources mutuellement indé-pendantes, nous avons pu développer un algorithme basé sur la détection de contours se révélantrelativement précis dans la séparation de sons et d’images respectant le modèle linéaire. En sup-posant en plus la non-gaussianité des sources nous, avons pu implémenter l’algorithme fast-ICAbasé sur la théorie de l’Independent Component Analysis, alliant robustesse statistique, rapiditéet garantie de convergence vers les sources.

Notre modèle est par définition incapable de renvoyer des sources d’amplitude exacte. Diversestechniques de normalisation ont donc été mises en place, en particulier dans le cadre de larécupération de photographies couleur. Enfin nous avons écrit une fonction Matlab prenanten entrée deux fichiers audio ou images, réalisant leur séparation et affichant les résultats.

Blind source separation consists in trying to recover mixed signals with no prior informationon these signals. In this project, we played the role of Homeland Security Agents in chargeof retrieving an important conversation covered by loud music and getting a photograph of aconfidential document blurred by unwanted reflections.

Under the assumption of a linear, homogeneous and constant mixing of mutually independentsources, we have developed a system based on edge detection. This method is relatively accu-rate in revealing the separation of sounds and images respecting that linear model. Assuming inaddition the non-Gaussianity of our sources we were able to implement the fast-ICA algorithm,based on the theory of Independent Component Analysis and combining statistical robustness,speed and guarantee of convergence towards the sources.

Our model is by definition unable to return sources of exact amplitude. Various normalizationtechniques have been experimented, particularly in the context of the treatment of color photo-graphs. Finally we wrote a function Matlab taking two audio or image files as inputs, makingtheir separation and displaying the results.

5

Page 6: Blind Sources Separation - Séparation de Sources à l'Aveugle

Introduction

La séparation de sources à l’aveugle consiste à séparer un ensemble de signaux sources qui - parleur superposition - produisent un unique signal. Ce signal peut être enregistré soit par plusieurscanaux, soit en des instants différents. Ces enregistrements forment eux-mêmes des signaux dis-tincts les uns des autres. A partir de ceux-ci, on souhaite isoler les sources qui en sont à l’origine.

Ce procédé de séparation a de nombreuses applications en génie biomédical telles que pourles encéphalogrammes, les électrocardiogrammes ou encore les résonances magnétiques. Cettetechnique est également utilisée dans les domaines de la télécommunication, de l’instrumenta-tion multi-capteurs et du traitement de signal.

Dans ce rapport, nous émettons nos réflexions et solutions quant à deux problèmes. Le premierconsiste à récupérer un document dont les deux photographies ont été altérées par un refletindésirable. Le second a pour objectif d’isoler une conversation téléphonique enregistrée pardeux microphones avec une musique parasite.

Tout d’abord, nous procédons à la modélisation de notre problématique. Nous énonçons leshypothèses posées, tout en précisant le critère mathématique de la solution. Par ailleurs, nousprécisons la représentations numériques des données traitées.

Ensuite, nous présentons une première solution basée sur la détection de contours. Cette mé-thode semble pertinente selon l’intuition pour le traitement d’images, mais nous sommes parve-nus à développer une méthode basée sur le même concept pour le traitement de bandes sonores.Toujours dans le cas audio, nous nous intéressons aux situations multi-sources. Évidemment,divers résultats sont présents et critiqués.

Par après, nous développons une seconde solution basée sur l’independent component analysis.Dans un premiers temps, nous passons en revue les grandes lignes de la théorie ICA. Nous pour-suivons avec l’algorithme mettant en oeuvre ces notions. L’implémentation de cet algorithmeest expliquée, en présentant ses nombreuses options de traitement. Nous terminons en incluantdes résultats particuliers.

Enfin, nous terminons notre rapport par l’interface utilisateur. Nous rappelons ses critères quenous nous sommes fixés dans notre cahier des charges. Aussi, une comparaison entre les deuxsolutions est mise en évidence. Finalement, des perspectives d’amélioration de l’interface sontproposées.

Tout au long du rapport, des illustrations des résultats sont présentes et souvent formées àpartir des mêmes fichiers sources. Outre le corps du rapport, des annexes reprennent certainsconcepts et détails de nos implémentations Matlab.

6

Page 7: Blind Sources Separation - Séparation de Sources à l'Aveugle

1 Modélisation

Nous abordons ici la modélisation mathématique de la situation-problème puis la manière dontnous avons représenté et stocké nos signaux numériquement, nécessaire à la bonne compréhen-sion de nos algorithmes sur les signaux.

1.1 Modélisation mathématique du problèmeDans les deux problèmes qui nous ont été donnés, nous devons dissocier deux signaux sourcesdiscrets représentés par les vecteurs s1 = [s11s12 . . . s1n], s2 = [s21s22 . . . s2n] (dont la nature estdiscutée dans le tableau 1) à partir de deux signaux observés x1 et x2, également des vecteurs

lignes de n entrées. Les matrices S et X sont définies par S =[s1s2

]et X =

[x1x2

]. Notons qu’une

image peut facilement être représentée par un vecteur de dimension 1 en allongeant côte à côteles éléments de la matrice de pixels qui lui est associée.

Signal Image Son(valeurs spatiales) (valeurs temporelles)

s1 image de fond conversation d’intérêts2 image réfléchie musiquex1 première photo enregistrement du premier microphonex2 deuxième photo enregistrement du deuxième microphone

Table 1 – Nature des signaux

Les hypothèses sont :1. Les signaux perçus par les capteurs (camera ou microphones) peuvent être obtenus par

combinaisons linéaires des signaux inconnus.2. Les coefficients de la transformation linéaire sont constants dans le temps (identiques

entre le début et la fin de l’enregistrement audio) et homogènes dans l’espace (égaux pourchaque pixel de l’image).

3. les signaux sources sont indépendants (par exemple : la musique n’a aucun impact surl’intensité, le ton et le rythme de la conversation).

4. Il n’y a pas de délai de phase dans le problème des sons : les signaux émis par les sourcesà un certain temps sont simultanément enregistrés par les deux microphones. De même, iln’y a pas de décalage spatial entre les deux images, les cadres sont parfaitement identiques.

Nos hypothèses 1 et 2 nous permettent d’écrire :

X = AS,⇔[x11 x12 · · · x1nx21 x22 · · · x2n

]=[a11 a12a21 a22

] [s11 s12 · · · s1ns21 s22 · · · s2n

], (1)

où nous appelons A ∈ R2×2 la matrice de mixage.

Notre problème consiste donc à trouver la matrice de "démixage" W ≈ A−1 ∈ R2×2 telle queS = WX est une bonne approximation de S (voir figure 1 1).

L’hypothèse 3 nous apporte un critère de maximisation : nous allons imposer à la solution dusystème ci-dessus de maximiser l’indépendance des sources approchées s1 et s2. Nous dévelop-perons deux manières de mesurer l’indépendance entre différents signaux : minimisation des

1. Tirée de http://iopscience.iop.org/0964-1726/21/4/045019/article

7

Page 8: Blind Sources Separation - Séparation de Sources à l'Aveugle

contours communs dans le cadre d’une méthode de détection de contours et minimisation dela gaussianité dans l’Independent Component Analysis. Notons que dans le cas de l’image, lasomme des éléments d’une ligne de la matrice A devra en plus valoir l’unité.

Figure 1 – Séparation des sources par démixage linéaire

Pour terminer, notons deux ambiguïtés intrinsèques à ce modèle : les signaux récupérés sontdéfinis à une constante près (ce qui posera surtout problème pour la séparation d’images) etl’ordre dans lequel ils sont renvoyés est impossible à prédire. Mathématiquement on écrit que∀α ∈ R, le modèle X = ( 1

αA) · (αS) correspond aussi aux observations X, avec simplement une

matrice de mixage 1αA et des sources αS. De manière similaire, si P ∈ R2×2 est une matrice de

permutation, la modèle X = (AP−1) · (PS) est équivalent à (1).

1.2 Représentation numérique de nos donnéesSignaux audio Conformément aux spécifications du cahier des charges 2, les signaux sonoressont importés à partir de fichiers WAVE (.wav). Matlab les stocke par défaut sous forme devecteurs de classe double normalisés à l’intervalle [−1, 1]. On sait que la précision en virguleflottante d’un calculateur est d’autant plus élevée que l’on est proche de zéro, c’est pourquoinous avons conservé ces paramètres par défaut. Une autre donnée importante à conserver estévidemment la fréquence d’échantillonnage du signal, pour pouvoir réécouter les clips audio aubon rythme par après. Précisons que nous nous sommes limités durant ce projet à des fichiersmonophoniques 3.

Lors du mélange artificiel de signaux audio, deux paramètres sont à prendre en compte :- la durée des mélanges est limitée par la durée minimum des signaux mélangés- les longueurs des vecteurs son doivent être identiques pour nos algorithmes

Nous avons fait le choix de fixer le nombre d’échantillons, pour une durée temporelle don-née, selon la fréquence d’échantillonnage la plus élevée des signaux à mélanger. Il a doncparfois fallu sur-échantillonner un des vecteurs (par simple interpolation linéaire, voir fonc-tion importaudio.m and equalizesignals.m), ce qui à l’oreille se remarque à peine et quine semble pas trop affecter le contenu fréquentiel du signal. La figure 2 montre cette (faible)variation spectrale pour notre fichier audio "badfeeling.wav" (voix humaine).

Signaux images Nous nous sommes limités, comme spécifié dans le cahier des charges, à l’im-portation de fichier images JPEG et PNG, par défaut stockés sous forme de matrices m × ndans le cas noir et blanc (m,n ∈ R), m × n × 3 dans le cas couleur RGB (un "étage" parcouleur), dont les entrées sont de type entiers 8 bits "uint8" allant de 0 à 255. Nous aurions pu

2. voir annexe A3. Son enregistré via un unique canal.

8

Page 9: Blind Sources Separation - Séparation de Sources à l'Aveugle

−6000 −4000 −2000 0 2000 4000 60000

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

Amplitude Spectrum of y(t) (fs: 11.025 kHz)

Frequency (Hz)

|Y(f

)|

(a) Spectre original du signal échantillonné à 11.025kHz

−6000 −4000 −2000 0 2000 4000 60000

0.005

0.01

0.015

0.02

0.025

0.03

0.035

Amplitude Spectrum of y(t) (fs: 22 kHz)

Frequency (Hz)

|Y(f

)|

(b) Spectre du même signal avec 22000 échantillons parseconde calculés par interpolation linéaire.

Figure 2 – Effet du sur-échantillonnage par interpolation linéaire sur le contenu fréquentield’un signal audio.

tout aussi bien stocker les données avec 16 bits pour obtenir une meilleure granularité, maisuint8 est l’option de loin la plus courante et certaines routines Matlab telle que la conversioncouleur vers noir et blanc requièrent spécifiquement des entiers 8 bits. Cela n’affecte de toutesfaçons pas l’utilisateur et ne sert que pour nos calculs internes.

1.3 Critère de qualité de nos signaux de sortieNous avons établi un critère permettant de mesurer la similitude entre deux signaux représentéssous forme vectorielle. Pour comparer des matrices d’images il faut donc d’abord les aplatir envecteurs ligne ou colonne. Supposons deux vecteurs représentant typiquement une source, s, etun output, y. Notre critère s’énonce :

qual(s, y) = − log {1− |cos (∠ (s, y))|} , (2)

où on a utilisé :cos(∠(s, y)) = sTy

‖s‖‖y‖. (3)

Ce critère possède les caractéristiques suivantes :– le cosinus de deux vecteurs similaires se rapproche vite de 1 en valeur absolue et le log(1 −| cos(. . . )|) peut donc s’interpréter comme le nombre de "9" après la virgule quand on évalue|cos (∠ (s, y))|. Deux images paraissent similaires à l’oeil nu quand le critère renvoie desvaleurs de 2 ou 3 et deux sons semblent identiques à l’oreille pour environ 3-4. Un inconvénientdu critère est qu’il augmente ensuite rapidement pour des incréments de qualité parfoisrelativement peu perceptibles.

– indépendant de l’échelle. Pour α, β ∈ R :

qual(αs, βy) = qual(s, y),

ce qui est pratique étant donné l’ambiguité d’amplitude de notre modèle. Cependant onverra que cela ne permet pas bien de mesurer la qualité visuelle d’une image couleur, car lesamplitudes relatives de chaque composante (R, G et B) influencent beaucoup le rendu final.

– ne dépend pas de la taille des vecteurs, si ce n’est que pour des vecteurs approchant le milliond’entrées, des problèmes d’arrondis apparaissent. On a parfois |cos (∠ (s, y))| > 1, ce qu’il afallu traiter dans la sous-fonction cosineangle de notre fonction evaluateOutputs.m.

– n’est évidemment utilisable en pratique que lorsque les sources sont connues et ne pourraservir qu’à caractériser la qualité de nos algorithmes sur des cas synthétiques. Nous tenteronsde trouver des critères plus absolus de qualité dans la section 3 mais verrons qu’il resteintrinsèquement difficile d’évaluer la qualité ex nihilo de nos outputs.

9

Page 10: Blind Sources Separation - Séparation de Sources à l'Aveugle

2 Détection de contours

Dans cette section, nous tenterons d’isoler les sources par soustraction itérative des observa-tions ou mixages. Nous montrerons qu’il existe un coefficient de soustraction qui permet d’isolerchacune des sources initiales.

L’identification de ce point de séparation ne peut être possible que par l’évaluation d’un cri-tère bien précis. Nous avons ici fait le choix d’utiliser la détection des points de contours desmélanges.

Nous aborderons d’abord les images puis nous tenterons d’appliquer ces méthodes aux sons.

2.1 Traitement d’imagesNous allons montrer que nous pouvons obtenir les deux sources initiales s1 et s2 recherchéespar soustraction de deux combinaisons linéaires de celles-ci : x1 et x2.

2.1.1 Modèle

Soit deux images x1 et x2, combinaisons linéaires de deux images sources s1 et s2 telles quepour a, b ∈ [0, 1] : {

x1 = a · s1 + (1− a) · s2x2 = b · s1 + (1− b) · s2

⇔ X = AS

où a et b représentent donc le pourcentage de la source s1 dans la mixture, A =[a (1− a)b (1− b)

]et où S et X correspondent aux notations présentées dans notre modélisation, section 1.1.La sommes des éléments de chaque ligne de A vaut bien l’unité. La figure 3 montre un exempled’un tel mélange, réalisé par nos soins.

(a) Source s1 (b) Source s2

(c) Mélange x1 (d) Mélange x2

Figure 3 – Sources originales et mixages avec a = 0.6 et b = 0.3

10

Page 11: Blind Sources Separation - Séparation de Sources à l'Aveugle

Nous allons montrer que les sources peuvent être obtenues par soustraction des mixtures pourun certain coefficient α ∈ R tel que :

F (α) = x1 − α · x2 = a · s1 + (1− a) · s2 − α · b · s1 − α · (1− b) · s2= (a− α · b︸ ︷︷ ︸

L

) · s1 + (1− a− α + α · b︸ ︷︷ ︸M

) · s2

où F (α) représente l’image résultant de la soustraction de x2 à partir de x1 (respectivementde x1 à partir de x2) pondérée par le paramètre α. Nous isolons s1 quand M = 0 et s2 quandc’est L qui s’annule. Les valeurs de α correspondantes sont alors, dans le cas où l’on a soustraitα · x2 de x1 :

s1 récupérée si M = 0s2 récupérée si L = 0 ⇔

{0 = 1− a− α + α · b0 = a− α · b ⇔

α1 = 1− a

1− b

α2 = a

b

(4)

Réciproquement si nous effectuons la soustraction x2 − α · x1, nous trouvons les deux sourcespour des α valant exactement l’inverse de ceux trouvés précédemment :

α2 = 1− b

1− a ⇒ récupération de s2

α1 = b

a⇒ récupération de s1

(5)

Si a 6= b (avec toujours a, b ∈ [0, 1]) on voit à partir des équations 4 et 5 qu’une des deux valeursparticulières de α appartient toujours à l’intervalle [0, 1], et que l’autre est > 1. On isole doncune première source pour un certain α ∈ R. L’ordre de soustraction des images inverse cescoefficients, il existe donc un autre α ∈ [0, 1] réalisant l’isolation de la deuxième source. Doré-navant nous noterons indifféremment par F (α) l’image résultant de la soustraction x1 − α · x2ou x2 − α · x1. Dans la suite de ce rapport, tous les calculs seront effectués deux fois, une foispour x1 − α · x2 et une fois pour x2 − α · x1.

Notons que si a = b, on supprime les deux images en même temps. Il est donc impossible defaire un programme de séparation basé sur la soustraction de deux mixtures identiques, ce àquoi on s’attendait.

Nous venons d’établir l’existence d’un point de séparation dans un intervalle précis. Il fautencore trouver un critère pour reconnaitre ce point et identifier la disparition subite d’une desdeux sources. Pour cela, nous avons décidé d’utiliser les contours de nos images x1 et x2.

La détection numérique de contours consiste à déterminer les points (ou pixels) d’une imagenumérique qui correspondent à un brusque changement de l’intensité lumineuse. Dans cetteapproche, on suppose que les images sont constituées de régions quasi homogènes séparées pardes créneaux plus ou moins larges, caractérisés par une variation significative de la luminance.

2.1.2 Evaluation du gradient d’une image

Nos images sont représentées par des matrices M ∈ Rm×n dont chaque entrée est une valeurd’intensité lumineuse (nous considérons ici le cas noir et blanc et donc la valeur de luminance)

11

Page 12: Blind Sources Separation - Séparation de Sources à l'Aveugle

correspondant à un pixel de la discrétisation spatiale effectuée par l’appareil. On peut doncdéfinir un "gradient d’image", par analogie au gradient d’une fonction continue, associé à l’entréeMi,j de notre matrice de pixel, comme suit :

−→G ij =

M(i+1,j) −M(i−1,j)

2

M(i,j+1) −M(i,j−1)

2

, (6)

avec 2 ≤ i ≤ m−1 et 2 ≤ j ≤ n−1. On peut interpréter ces formules comme des approximationsdes "dérivées partielles" horizontale et verticale par différences centrées d’ordre 2.Chaque composante de −→G peut être obtenue en faisant la convolution de notre image M pardes filtres dérivateurs associés à chacune des directions et présentés dans la table 2. On appelleaussi ces filtres "masques" de convolution, et la convolution est définie de façon assez intuitiveen remplaçant chaque pixel de la matrice par la somme des valeurs des pixels voisins et delui-même, affectés par les coefficients du masque correspondants. 4

(a)0 0 0-1 0 -10 0 0

(b)0 -1 00 0 00 -1 0

Table 2 – Masques de convolution horizontale (a) et verticale (b) pour l’estimation des com-posantes du gradient d’image.

Pour s’affranchir des bruits causés par l’opération de dérivation, de nombreux filtres ont étémis sur pieds à partir des critères de sélection en fréquences (voir [11] et [12]). Nous trouvonsparmi ceux-ci les filtres de Roberts, Prewitt, Sobel et Kirsch (voir table 3).

(a)1 00 -1

(b)1 0 -11 0 -11 0 -1

(c)1 0 -12 0 -21 0 -1

(d)-3 -3 5-3 0 -3-3 -3 5

Table 3 – Masques de convolution horizontale de Roberts(a), Prewitt(b), Sobel(c) et Kirsch(d).

Dans note implémentation, nous avons choisi d’utiliser le masque de Sobel pour les deux di-rections, comme vous pouvez l’observer sur le listing 1 reprenant le code de notre détection decontours edge1.m.

Le gros avantage de ce filtre réside dans le fait que celui-ci combine l’information de 9 pixelspour se comporter à la fois comme filtre passe-bas et opérateur dérivateur [10]. Le filtre passe-bas engendre un lissage des contours qui a pour effet de rendre le filtre plus robuste au bruittout en lui imposant malgré tout une diminution de la précision. Notons qu’un filtre 3 × 3 atendance à augmenter l’épaisseur des contours par rapport à un filtre 2 × 2 comme celui deRoberts.Vous pouvez observer ces assertions sur la figure 4, quoi que la différence entre le filtre dePrewitt et celui de Sobel ne soit pas frappante.

4. La convolution n’est évidemment pas définie sur les bords de la matrice. Pour un masque de dimension3× 3 par exemple, on ne peut la calculer que pour 2 ≤ i ≤ m et 2 ≤ j ≤ n

12

Page 13: Blind Sources Separation - Séparation de Sources à l'Aveugle

(a) Filtre de Sobel (b) Filtre de Prewitt

(c) Filtre de Kirsch (d) Filtre de Roberts

Figure 4 – Résultats de la détection de contours sur l’image 3(a) avec 4 filtres courammentutilisés pour l’estimation du gradient d’une image. Le seuil de détection de contour est de 40(voir section 2.1.3).

2.1.3 Matrice des contours

Nous définissons les contours comme les points en lesquels le gradient est de "grande norme",c’est-à-dire de norme supérieure à un seuil qu’il nous faut fixer. Par essais-erreurs nous sommesarrivés à un seuil satisfaisant de 40 pour un format d’image standard entier à 8 bits : ni troppetit, ce qui considérerait comme contours des pixels qui à l’oeil nu n’appartiennent clairementpas à une ligne de contour, ni trop grand, ce qui nous ferait manquer des contours intéressants.La matrice de contours est une matrice booléenne établie par notre fonction edge1.m, dont onpeut voir le code dans le listing 1. Un pixel dont la norme du gradient est supérieure au seuilfixé sera traduit par un 1 et considéré comme appartenant à une ligne de contour, tandis queles autres seront fixés à 0.

1 f u n c t i o n [grad] = edge1 ( entree )2 Mx = [ -1 0 1 ; -2 0 2 ; -1 0 1];3 My = [ 1 2 1 ; 0 0 0 ; -1 -2 -1];4 Gx = conv2(Mx , entree );5 Gy = conv2(My , entree );6 grad = double ( s q r t ( abs (Gx .^2)+ abs (Gy .^2)));7 grad =( grad >40);8 end

Listing 1 – Calcul des contours. L’algorithme approxime chaque composante du vecteur gradientpar convolution de la matrice image avec le filtre de Sobel (horizontal puis vertical) et attribuela valeur booléenne 1 aux points en lesquels la norme du gradient est supérieure à un seuil fixé.

13

Page 14: Blind Sources Separation - Séparation de Sources à l'Aveugle

2.1.4 Contours communs comme critère de séparation

Afin de séparer les images sources des images mélangées, nous allons partir d’une hypothèsesimple : les contours d’une image mixée proviennent en grande partie des contours des deuximages qui la constituent, ou, formulé autrement, un pixel appartenant à un contour dans unedes deux sources appartiendra certainement à un contour dans l’image mixée, et vice-versa. Lafigure 5 illustre cette observation.

En pratique nous allons évaluer le nombre de points de contours communs entre F (α) et uneimage B qui reprend l’ensemble des contours deux images mixées x1 et x2. Cette image B estce dont nous disposons de plus proche d’une image mixées ’parfaites’, reprenant l’ensemble descontours des deux sources.

Nous noterons le nombre de contours communs N(α), encore une fois indifféremment pour lasoustraction x1 − α · x2 ou x2 − α · x1.

(a) Contours de la source s1 (b) Contours de la source s2

(c) Contours du mélange x1

Figure 5 – Comparaison des points de contours entre les sources et un mixage de celles-ci. Lespoints de contours dans le mélange appartiennent généralement à un contour dans leur imagede départ.

Une image source et une image mélangée possèdent moins de contours communs que deuximages mélangées, car dans le 1er cas ce nombre est limité par le nombre de contours del’unique source, alors que les images mélangées ont en commun grosso modo l’entièreté descontours des deux sources. Le α minimisant le nombre de contours communs devrait donc aussiêtre le α permettant d’isoler une source. Ainsi, notre problème consiste à minimiser N(α) pourun α ∈ [0, 1].

2.1.5 Différents algorithmes

Pour identifier le α minimisant N(α), nous avons mis au point deux techniques différentes. Lapremière est une méthode dite de "force brute", tandis que la suivante utilise la méthode du tir.

14

Page 15: Blind Sources Separation - Séparation de Sources à l'Aveugle

• Méthode de la force brute

On cherche ici le α optimal en testant de nombreuses valeurs dans l’intervalle [0, 1] prédit parle modèle. Nous avons choisi une valeur de 0.005 pour le pas, valeur qui s’est avérée être unbon compromis entre précision et rapidité de la méthode. Notons que cela impose un nombrefixe de 200 itérations, une pour chaque valeur de α.

Pour ce faire, l’algorithme convertit les images d’entrée en images noir et blanc afin d’accélérerles calculs et de réduire la taille du tableau contenant les images. L’évaluation du gradient n’estde toutes façons possible qu’avec une valeur associée à chaque pixel.

Ensuite, nous calculons F (α) et N(α) pour chaque valeur de α, en normalisant bien chaquenouvelle image obtenue afin que la moyenne de l’intensité des pixels en noir et blanc soit lamême avant et après la soustraction. Cela permet de ne pas fausser le calcul des contours enchangeant arbitrairement l’intensité de l’image.

La dernière étape consiste à garder la valeur de α qui minimise N(α). Cette valeur est ensuiteutilisée pour séparer les sources des images en couleur. La figure 6 reprend l’évolution typiquedu nombre de points de contours communs entre une mixture originale et les images obtenuespar soustractions successives. Elle illustre bien le fait que la fonction N(α) ne possède qu’unseul minimum dans l’intervalle prédit (du moins dans le cas de mélange bien linéaire et homo-gène), ce qui nous permet de séparer de manière très efficace des images mélangées.

On peut estimer une complexité calculatoire pour une itération correspondant à une valeurparticulière de α en O(N), où N est le nombre d’entrées total d’une matrice image. En effet,pour la récupération d’une source, pour chaque valeur de α, on effectue un nombre fixé apriori de convolutions, soustraction, comparaison et somme d’éléments, qui sont toutes desopérations proportionnelles à N . Le code Matlab correspondant à cette méthode est le fichierEdgeSeparation.m.

0 20 40 60 80 1004

4.2

4.4

4.6

4.8

5

5.2

5.4

5.6

5.8

6x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

Figure 6 – Graphe des points de contours communs N(α)

• Méthode du tir

Afin d’améliorer le temps de résolution de notre algorithme, nous avons utilisé la méthode dutir. Puisqu’il n’existe qu’un seul minimum à la fonction des contours communs en fonction de αdans l’intervalle considéré, nous pouvons utiliser une estimation de la dérivée de N(α) commecritère pour déterminer si le point de séparation d’une des sources correspond à un coefficientinférieur ou supérieur au coefficient α courant : si elle est négative, le point de séparation est

15

Page 16: Blind Sources Separation - Séparation de Sources à l'Aveugle

plus grand que l’itéré courant, sinon il est inférieur.

Par un raisonnement similaire à celui effectué sur l’algorithme de "force brute", la complexitéde cet algorithme pour une valeur donnée de α est O(n). Cependant on sait que la convergenced’une méthode de tir est linéaire (divisant l’erreur maximale sur α par 2 à chaque étape) et onpeut donc espérer un nombre d’itérations inférieurs à la valeur précédente de 200. En effet, 10itérations suffisent au programme EdgeSeparationTir.m pour approcher la véritable valeur deα mieux que ne le fait la méthode brute.

2.1.6 Résultats

Appelons y1 et y2 les deux images de sortie obtenues avec l’algorithme. On constate que laméthode fonctionne très bien lorsqu’il s’agit de traiter des combinaisons linéaires x1 et x2 dedeux sources s1 et s2. Sur le schéma 4, vous pouvez observer :

− à gauche : les mixtures à traiter.− au centre : en bleu, les graphes du nombre de contours communs

en fonction du coefficient α de séparation de deux mixtures.en rouge, la valeur exacte de α correspondant à la séparation.

− à droite : les sorties produites par l’algorithme.

(a) x1 (b) N(α)

0 20 40 60 80 1001.6

1.8

2

2.2

2.4

2.6

2.8x 10

5

α

Con

tour

s C

omm

uns

(c) y1

(d) x2 (e) N(α)

0 20 40 60 80 1001.8

1.9

2

2.1

2.2

2.3

2.4

2.5

2.6

2.7

2.8x 10

5

α

Con

tour

s C

omm

uns

(f) y2

Table 4 – Résultat de l’algorithme sur deux combinaisons linéaires de deux photos initialesavec a = 0.7 et b = 0.3 selon le modèle présenté et évolution du nombre de points de contourscommuns pour chaque source récupérée.

Voyons maintenant comment l’algorithme réagit face à des cas pathologiques ou des situationsqui ne respectent plus forcément le modèle établi dans la section 1.1.

• Cas réel

Vous pouvez observer le résultat obtenu par la méthode de détection de contours avec la mé-thode du tir sur une photo qui a été prise par le groupe 1 à la figure 5. Le résultat est relativement

16

Page 17: Blind Sources Separation - Séparation de Sources à l'Aveugle

concluant quoi qu’il reste des traces de chacune des images sources. Ceci est dû au fait que l’ef-ficacité de la méthode n’est garantie que si les hypothèses de linéarité du modèle sont vérifiées,or les cas réels ne respectent que rarement parfaitement le modèle. On peut également mettreen doute l’homogénéité du mélange dans la réalité.

(a) x1 (b) N(α)

0 20 40 60 80 1005200

5250

5300

5350

5400

5450

5500

5550

5600

5650

α

Con

tour

s C

omm

uns

(c) y1

(d) x2 (e) N(α)

0 20 40 60 80 1002000

2500

3000

3500

4000

4500

5000

5500

6000

α

Con

tour

s C

omm

uns

(f) y2

Table 5 – Résultat de l’algorithme sur deux photo réelles prises par le groupe 1.

• Forte similarité des images mélangées

Nous avons pu relever l’inefficacité de la méthode dans le cas où les deux images d’entrée sontexactement les mêmes, ce qui avait été prédit par notre théorie. Dans ce cas les images de sortiesont les mêmes que les images d’entrée.

Dans le même ordre d’idée, si les deux mixtures sont très proches mais pas identiques, unepetite erreur du coefficient α trouvé engendrera une forte dégradation des résultats, qui serontla plupart du temps inutilisables. La détection de contours nécessite donc une différentiationminimum des images mixées pour marcher efficacement. Expérimentalement on a pu voir queles deux images mixées sont suffisamment différenciées si | a − b |> 0.05, avec a et b tels quedéfinis dans la section 2.1.1.

• Gradients "faibles"

Les gradients jouent un rôle primordial dans notre implémentation et le seuil qui nous permetde déterminer l’existence d’un contour est un paramètre à choisir avec précaution. Un seuil trèsbas permet hypothétiquement de percevoir de plus faibles variations et donc de trouver un αplus proche de celui de la séparation réelle des sources, mais, en pratique, un tel seuil rendl’algorithme trop sensible à de faibles gradients, ou gradients "parasites", qui sont très variablesen fonction des deux sources, ce qui réduit grandement la fiabilité de la méthode.La figure 6 illustre ce phénomène, on remarque en effet que le minimum de N(α) ne correspond

17

Page 18: Blind Sources Separation - Séparation de Sources à l'Aveugle

plus au point de séparation exact des sources lorsque le seuil de détermination de contoursdevient trop petit.Dans le but de pouvoir utiliser un seuil très faible (et donc théoriquement plus précis) sans sesdésavantages, nous avons créé des images en noir et blanc uniquement, donc sans aucun niveaude gris et sans gradient "faible". Ce type d’images peut paraître artificiel mais il est courantdans les documents imprimés, ce qui est - rappelons-le - un des objectifs de ce projet.

(a) seuil de 40

0 20 40 60 80 1004.4

4.6

4.8

5

5.2

5.4

5.6

5.8

6x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

(b) seuil de 20

0 20 40 60 80 1008.1

8.2

8.3

8.4

8.5

8.6

8.7

8.8

8.9

9

9.1x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

(c) seuil de 5

0 20 40 60 80 1001.365

1.37

1.375

1.38

1.385

1.39

1.395

1.4

1.405

1.41

1.415x 10

5

Nom

bre

de p

oint

s de

con

tour

s

α[%]

Table 6 – Graphe des contours communs en fonction du seuil déterminant l’existence d’uncontour. En a), nous avons un seuil de 40, en b) 20 et en c) 5

L’algorithme appliqué à de telles images avec un seuil de 1, bien inférieur donc au seuil de 5qui posait déjà problème avec l’image de la figure 6, nous a donné des résultats surprenants, àsavoir que le graphe de N(α) possède un pic de diminution du nombre de contours communsau point précis de séparation des sources. On peut l’observer sur la figure 7.

Ce résultat nous conforte dans l’idée que c’est l’existence de ces faibles gradients dans lesimages sources qui nous empêche de baisser arbitrairement le seuil de détection de contoursafin d’obtenir des résultats plus précis. Nous reviendrons dans le traitement de signaux sonoressur d’autres méthodes capables de tirer profit de ce type de comportement.

18

Page 19: Blind Sources Separation - Séparation de Sources à l'Aveugle

(a) x1 (b) N(α)

0 20 40 60 80 1001

1.5

2

2.5

3

3.5

4

4.5

5

5.5x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

(c) y1

(d) x2 (e) N(α)

0 20 40 60 80 1005.12

5.14

5.16

5.18

5.2

5.22

5.24

5.26

5.28

5.3

5.32x 10

4 N

ombr

e de

poi

nts

de c

onto

urs

α[%]

(f) y2

Table 7 – Résultat de l’algorithme sur deux combinaisons linéaires de deux photos sans nuancesde gris avec a = 0.7 et b = 0.3 selon le modèle de la section 2.1.1.

• Mélanges non uniformes

Nous avons créé des mélanges non uniformes en modifiant localement les coefficients de mixage,comme vous pouvez l’observer sur la table 8. Les résultats obtenus avec EdgeSeparationTir.mne sont pas optimaux, comme on pouvait s’y attendre puisque le mélange ne respecte pas leshypothèses de notre modèle. Si l’on complique encore les choses, les résultats commencent àsérieusement se dégrader, comme vous pouvez le voir sur la table 9.

19

Page 20: Blind Sources Separation - Séparation de Sources à l'Aveugle

(a) x1 (b) y1

(c) x2 (d) y2

Table 8 – Résultat de l’algorithme sur deux mixages non-homogènes.

(a) x1 (b) y1image final couleur 2

(c) x2 (d) y2image final couleur 1

Table 9 – Résultat de l’algorithme sur deux combinaisons fortement non-homogènes.

2.1.7 Pistes d’amélioration

Notre code, quoique fonctionnel, peut encore être optimisé comme en attestent les résultats surles photos réelles.Certaines pistes d’amélioration pourraient être :

20

Page 21: Blind Sources Separation - Séparation de Sources à l'Aveugle

- adaptation du seuil sur les contours en fonction des images reçues afin d’arriver au seuiloptimal. On pourrait par exemple détecter si une image possède ou non de "faibles" gradientset se permettre un seuil très bas, le cas échéant.

- adaptation du filtre de convolution : des filtre autres que le filtre de Sobel sont peut-êtremieux adaptés à certaines situations.

- amélioration de la méthode de recherche α minimisant N(α) : intrinsèquement difficilepuisque N(α) ne possède pas d’expression analytique.

2.2 Traitement de bandes sonoresNous allons à présent nous pencher sur le problème de la séparation de deux sources sonores s1et s2. Dans un premier temps, nous allons regarder si nous pouvons appliquer la méthode dedétection de contours. Pour ce faire, notre modèle nécessite d’être quelque peu modifié.

2.2.1 Adaptation du modèle

Soit deux bandes sonores x1 et x2 de même dimension, combinaisons linéaires de deux sourcess1 et s2 telles que pour a, b ∈ R :

x1 = a · s1 + c · s2x2 = b · s1 + d · s2

où on pose A =[a cb d

]. Cette fois, les coefficients a, b, c et d ne sont plus soumis à des

contraintes particulières.

En effectuant x1−α ·x2 nous obtenons comme point de séparation α1 = a/b et α2 = c/d tandisqu’en faisant x2 − α · x1 nous obtenons l’inverse, c’est à dire α1 = b/a et α2 = d/c.

On remarque que parmi les 4 valeurs de α correspondant à la séparation des sources, deux obli-gatoirement sont comprises dans l’intervalle [0, 1]. Cependant, ici, pour un ordre de soustractiondonné, on peut tomber sur 0, 1, ou 2 minima de N(α) dans l’intervalle [0, 1] correspondant à laséparation des sources. La soustraction inverse donnera alors respectivement 2, 1 ou 0 valeursde α ∈ [0, 1] correspondant à la récupération d’une source.

Pour voir si la méthode de détection de contour peut être adaptée au vecteurs sonores, tentonsde procéder dans la même ordre que pour les images.

2.2.2 Adaptation du gradient et construction du vecteur de contours

Nous ne sommes plus en présence d’une matrice, mais bien d’un vecteur. Ceci implique que lefiltre pour calculer la gradient doit être adapté. Un bon candidat pour celui-ci pourrait être 5 :

-1 0 1

Table 10 – Filtre gradient Vectoriel

Dans la même lignée que pour les images, construisons le vecteur des points contours en dé-finissant celui-ci comme étant le vecteur pour lequel seul les points dont la valeur absolue dugradient est supérieure à un seuil fixé sont remplacés par un 1, tandis que les autres sont misà 0. Vous pouvez observer ceci sur le listing 2.

5. La convolution entre un vecteur son et un filtre se définit de la même manière intuitive que dans la section2.1.2

21

Page 22: Blind Sources Separation - Séparation de Sources à l'Aveugle

1 f u n c t i o n [edge] = edgedetection1D (signal , seuil )2 matrix =[ -1 0 1] ’;3 convo = abs (conv2(matrix , signal ));4 convo =( convo > seuil );5 edge= convo ;6 end

Listing 2 – Calcul du vecteur de contour du vecteur "signal". On remplace par 1 tous les élémentsdont la valeur absolue du gradient est supérieure à "seuil".

2.2.3 Différents algorithmes

A présent, grâce à nos vecteurs des points de contours, nous allons tenter de procéder de ma-nière similaire aux images afin d’isoler les deux sources s1 et s2. Ceci consiste donc à minimiserle nombre de contours communs, N(α) ou de manière équivalente, à maximiser le nombre d’élé-ments sans contours.

Pour cela, nous avons mis au point deux méthodes différentes : une méthode similaire à celledes images mais améliorée, et une méthode analytique.

• Méthode de la force brute avec raffinement

Cette méthode est très similaire à celle utilisée pour les images. Nous testons plusieurs valeursde α et choisissons celle qui minimise N(α). Vous pouvez observer son implémentation dans lafonction EdgeSeparationAudio.m.

Lors de tests pour choisir le seuil optimal, nous avons noté qu’en diminuant le seuil de détectionde contours, le graphe de N(α) tendait de plus en plus vers une fonction constante possédant 0,1 ou 2 "deltas de Dirac" inverses aux points précis de séparation des sources. C’est le cas idéalque l’on obtenait pour les images sans gradients "faibles" à la section 2.1.6. Le phénomène estvisible sur la figure 11, où 2 minima apparaissent dans l’intervalle [0, 1].

(a) seuil de 10−1

0 20 40 60 80 1000.4

0.6

0.8

1

1.2

1.4

1.6

1.8x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

(b) seuil de 10−4

0 20 40 60 80 1003.75

3.8

3.85

3.9

3.95

4

4.05x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

(c) seuil de 0

0 20 40 60 80 1003.95

3.96

3.97

3.98

3.99

4

4.01x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

Table 11 – Raffinage du seuil afin de trouver le seuil optimal. En a), nous avons un seuil de10−1, en b) 10−4 et en c) 0

Ce résultat provient du fait que chaque vecteur source s possède un certain nombre d’élémentspour lesquels le gradient (tel que calculé ci-dessus) s’annule.

Lors de la combinaison linéaire de deux sources, seuls les éléments dont le gradient des deuxsources est nul en ce point possèderont un gradient nul. On peut donc affirmer que le nombre

22

Page 23: Blind Sources Separation - Séparation de Sources à l'Aveugle

d’éléments dont la norme du gradient est nulle dans une image mixée x est beaucoup plus faibleque celui dans une image source s. Lorsque l’on fait tendre le seuil vers 0, on se rapproche dece résultat, ce qui explique les grandes variations observées lors de la séparation des sources.

Ce résultat très fort nous a permis de faire un algorithme plus précis que celui pour les images.En effet, notre algorithme commence par chercher une première approximation des points deséparation des sources et les localise dans un intervalle précis. Nous concentrons ensuite nosrecherches dans cet intervalle pour trouver une valeur de α plus exacte.

Pour ce faire, nous diminuons localement le pas ainsi que le seuil. Ceci nous permet de trouverdes résultats extrêmement précis pour un nombre d’opérations relativement réduit. Le codeétant assez long, nous vous invitons à aller voir les fonctions Refining.m et RefiningDelta.m.La complexité de cet algorithme est en O(n).Il est a noter que - comme prédit par le modèle adapté sur les sons - il est possible de trouver 0,1ou 2 points de séparation des sources dans l’intervalle [0, 1] en fonction de l’ordre de soustraction,chaque cas étant pris en compte dans notre code afin de pouvoir séparer les 2 sources.La méthode de détection de contours peut donc être adaptée pour les sons, bien que cela semblecontre-intuitif a priori. Ceci vient du fait que notre méthode de séparation de deux sources estbasée initialement sur la soustraction de deux mixtures et la détection de contours n’est que lecritère choisi pour détecter la séparation des sources (voir section 2.1.1).

• Méthode du calcul direct

Cette méthode utilise la linéarité du gradient. Celui-ci est calculé par convolution afin de déter-miner le point exact de séparation des sources. Si l’on note par ∇(f) le vecteur gradient d’unvecteur f, on peut écrire :

∇(x1 − α · x2) = ∇(x1)− α · ∇(x2)

Ainsi, nous pouvons construire le vecteur α(i) contenant les valeurs de α qui, pour chaqueélément i du vecteur son, annulent son gradient :

α(i) = ∇(x1(i))∇(x2(i))

Une fois tous les coefficients calculés, il suffit de prendre les deux valeurs α apparaissant le plussouvent dans le vecteur α(i). Ceci nous permet de trouver les deux points de séparation avecune précision de l’ordre de l’epsilon machine.

Pour toute situation respectant les hypothèses de la modélisation, cette méthode donne laréponse exacte, à l’exception du cas où les deux entrées sont identiques. Par ailleurs, elleest de loin la meilleure de nos méthodes si le modèle est respecté. La complexité de l’al-gorithme est en O(n2) et vous pouvez consulter le code de l’algorithme dans la fonctionAnalyticalSeparation.m.Remarquons qu’il est possible de créer des sources ne possédant aucun point où le gradients’annule, mettant donc cette méthode en échec, mais qu’il nous a été absolument impossible detrouver de telles sources sans les construire nous-même.Nous avons essayé d’utiliser cette méthode sur des images "aplaties", c’est-à-dire écrite sousforme de vecteurs et cette algorithme nous a encore une fois donné des résultats exacts. Ce codeest consultable dans la fonction AnalyticalSeparationImage.m mais faute de suffisammentde tests, nous n’en parlerons pas plus dans ce document.

23

Page 24: Blind Sources Separation - Séparation de Sources à l'Aveugle

2.2.4 Généralisation à plusieurs Sources

Nous nous sommes ensuite intéressés à des situations impliquant un nombre supérieur de sourceset de micros.

• Cas 3 sources et 2 micros

Le problème se réécrit ainsi :x1 = a · s1 + c · s2 + e · s3x2 = b · s1 + d · s2 + c · s3

On peut observer sur le graphe 7 des contours communs obtenu, qu’il est possible de trouverles trois valeurs de α séparant une des sources, en laissant donc deux autres. Il est possible enrépétant plusieurs fois la première méthode d’isoler chaque source.

0 20 40 60 80 1003.99

3.995

4

4.005

4.01

4.015x 10

4

Nom

bre

de p

oint

s de

con

tour

s

α[%]

Figure 7 – Contours communs N(α) pour 3 sources et deux micros

La méthode du calcul direct peut aussi être directement appliquée, puisqu’il suffit de calculerles trois valeurs α de αn les plus courantes (et non plus les deux). La précision extrêmementplus élevée de cette méthode diminue la propagation des erreurs lors de chaque itération, per-mettant ainsi d’obtenir de très bons résultats.

Dans un cas plus général avec N sources et toujours deux micros, il faudrait effectuer N foisl’algorithme avant de pouvoir isoler une source.

• Cas 3 sources et 3 micros

Dans ce cas le problème s’écrit :x1 = a · s1 + d · s2 + i · s3x2 = b · s1 + e · s2 + j · s3x3 = c · s1 + f · s2 + k · s3

La soustraction de la méthode se résume donc par : x1 − α · x2 − β · x3L’adaptation de la méthode de la force brute dans ce cas permet d’avoir le graphe de la figure12. On peut facilement observer les droites en blanc qui permettent d’annuler une seule destrois sources, avec à leur intersection les valeurs de α et β qui permettent d’isoler une des sources.

Dans un cas plus général avec N sources et M micros, il est possible de réduire de M − 1 lenombre de sources encore présentes dans les sons mixés par itération d’un algorithme tel quecelui de la force brute, ce qui donne une nombre maximal d’itérations égal à N−1

M−1 arrondi àl’entier supérieur. Bien entendu les erreurs engendrées à chaque itération risquent de rendre lessorties inutilisables si le nombre d’itérations nécessaires est trop élevé.

24

Page 25: Blind Sources Separation - Séparation de Sources à l'Aveugle

(a)β[%

]

α[%]

10 20 30 40 50 60 70 80 90 100

10

20

30

40

50

60

70

80

90

100

3.8

3.82

3.84

3.86

3.88

3.9

3.92

3.94

3.96

3.98x 10

4

(b)

β[%

]

α[%]

10 20 30 40 50 60 70 80 90 100

10

20

30

40

50

60

70

80

90

100

Table 12 – Graphe des contours communs en 2D. Plus la couleurs est rouge, plus N(α, β) estfort. Par contre, plus elle est bleue, plus nous tendons vers un minimum. Les lignes blanchesindiquent les valeurs de α et β qui permettent d’isoler deux des trois sources.

2.2.5 Cas pathologiques

A l’heure actuelle, nous n’avons identifié que deux situations respectant les hypothèses dumodèle pour lesquelles l’algorithme échouait dans la séparation des deux sources :– Les deux sons mélangés sont identiques.– Les mixtures sont trop proches. Ceci implique que les deux deltas sont également très procheset on sait de moins en moins les différencier l’un de l’autre. Malgré tout, une bonne séparationest toujours possible en augmentant le nombre de points localement afin d’avoir la résolutionnécessaire pour les distinguer. Ce cas n’existe pas pour la méthode du calcul direct.

2.2.6 Pistes d’améliorations

Notre algorithme quoique relativement efficace, pourrait encore être amélioré en suivant diffé-rentes pistes :– trouver des méthodes toujours plus efficaces pour trouver le point de séparation exact, ou demanière équivalente, pour trouver la position des deltas.

– adaptation intelligente et automatique du seuil afin de remarquer si nous sommes en présencedu bon nombre de deltas significatifs (dans le cas avec deux sources mélangées il y a deuxdeltas significatifs). Dans le cas contraire, il faudrait augmenter le nombre de points dediscrétisation de manière globale ou locale si l’on ne trouve pas de delta ou si les mixagessont trop proches les uns des autres.

– utilisation du seuil pour détecter si la réponse trouvée est correcte à un epsilon près. En effet,avec un seuil de 0, si nous n’avons pas trouvé le point précis de séparation, le nombre decontours est plus ou moins constant, tandis que si on se trouve au point de séparation alorsle nombre de contours diminue drastiquement.

25

Page 26: Blind Sources Separation - Séparation de Sources à l'Aveugle

3 Independent Component Analysis

Nous nous intéressons maintenant à une méthode de séparation de signaux sources qui reposesur de l’intuition plus mathématique et moins graphique que la détection de contour présen-tée dans la section précédente. Nous continuons à travailler sur le modèle linéaire de mixageX = A · S présenté à la section 1.1 mais portons plus spécifiquement notre attention sur l’hy-pothèse 3 de notre modélisation : l’indépendance statistique des signaux sources s1, s2, . . . , sn.Nous nous référons ici à nos sources et nos observations plutôt en terme de vecteurs aléatoires :s = [s1, . . . , sn]T et x = [x1, . . . , xn]T

Le but principal de l’Independent Component Analysis (ICA) est de générer, par combinaisonlinéaire des signaux mélangés x1, x2, . . . , xn , des sorties y1, y2, . . . , yn aussi indépendantes lesunes des autres que possible. C’est ce que réalise l’algorithme fast-ICA, dû principalement àA. Hyvärinen, J. Karhunen et E. Oja ([3]). Dans un premier temps nous aborderons les basesthéoriques qui justifient le fonctionnement de cet algorithme, puis nous parlerons des détailsd’implémentation (particuliers au son et à l’image) et présenterons nos résultats.

3.1 Justification théorique de l’algorithme fast-ICAL’objet de cette section est de proposer un critère mathématique qui reflète le mieux pos-sible l’indépendance statistique de signaux aléatoires. C’est ce critère que pourra alors, sous lacontrainte supplémentaire de variance unité des sorties, maximiser notre algorithme. A partirde maintenant nous considérons que nos signaux sources S (et donc nos mélanges X) ont unemoyenne nulle. Si ce n’est pas le cas il suffit de l’enlever et de la rajouter adéquatement à la finde l’algorithme. Nous avions vu à la section 1.1 que les estimations des sources étaient définiesà une constante près, c’est pourquoi nous prendrons la liberté d’imposer la variance de chaquesource et donc de chaque signal de sortie yi à l’unité.

3.1.1 Mesure de l’indépendance statistique de deux variables aléatoires

Dans un premier temps nous avions pensé minimiser la corrélation entre nos signaux de sortie.Cependant nous allons voir que décorréler des signaux aléatoires se fait très facilement par unetransformation linéaire (voir section 3.1.3 sur le PCA) et que c’est une mesure bien trop faibled’indépendance statistique.

Trois grandes manières de maximiser l’indépendance ont été développées dans le cadre del’ICA : la maximisation de la non-gaussianité, l’estimation par maximum de vraisemblance etla minimisation de l’information mutuelle ([3]). Nous ne nous sommes intéressés dans ce projetqu’à la 1ère méthode. Il est à noter que les deux autres sont souvent équivalentes dans la pratique.

La maximisation de la non-gaussianité se justifie par le théorème central limite :

Théorème 1 (Théorème central limite)Soit X1, X2, . . . , Xn, une suite de variables aléatoires indépendante et identiquement dis-tribuées (iid), de moyenne µ et variance σ2, alors la moyenne d’échantillon définie parXn = 1

n

∑ni=1 Xi est une variable aléatoire qui converge en distribution vers la loi normale

de moyenne µ et de variance σ2

n:

Xnd−−−→

n→∞N (µ, σ

2

n)

26

Page 27: Blind Sources Separation - Séparation de Sources à l'Aveugle

Avec l’hypothèse supplémentaire que nos sources s1, s2, . . . , sn sont non gaussiennes et identi-quement distribuées en plus d’être indépendantes, toute combinaison linéaire x1 = ∑n

i=1 αisi(αi ∈ R, i = 1, . . . , n) est déjà un peu plus gaussienne que chaque source prise séparément.Nous reviendrons sur la validité de ces hypothèses en pratique dans la section 3.6 .

Nos vecteurs de sorties y1, . . . , yn étant obtenus par combinaison linéaire des mélanges x1, . . . , xn,ils sont en fait des combinaisons linéaires "cachées" des sources sous-jacentes :

yi = wTi x = wT

i As = zTi s, (7)

où on a posé zi = ATwi et où wi ∈ Rn. La "gaussianité" de yi est minimisée quand celui-ci est le moins possible combinaison linéaire de sources iid, donc quand zi est de la forme[0, 0, . . . , 1, 0, . . . , 0], c’est-à-dire quand yi est égal à une des sources de départ et que wi cor-respond à la ième ligne de la matrice de démixage W = A−1.

Avant de passer à l’étude de critères concrets de mesure du caractère gaussien d’une variablealéatoire, remarquons que notre modèle de mixage linéaire est toujours indéterminé lorsqueles sources sont gaussiennes : la matrice de mixage A et les sources potentielles sont en faitdéfinies à une matrice orthogonale près. En effet supposons le vecteur source s ∈ Rn de distri-bution conjointe TS(s) gaussienne, de moyenne nulle et de matrice de covariance Cs. Alors latransformation orthogonale x = Ws possède clairement une moyenne nulle et une covarianceCx = E

[Ws(Ws)T

]= WCsW

T . De plus sa distribution est également gaussienne, en effet :

TX(x) = TS(W−1x)∣∣∣∣∣ ∂s∂x

∣∣∣∣∣ = TS(W−1x)det(W )

= 1(2π)n/2

√|det(Cs)| det(W )2

e−12(xTW−TC−1

s W−1x)

= 1(2π)n/2

√| det(W )|| det(Cs)|| det(W T )|

e−12(xTW−TC−1

s W−1x)

= 1(2π)n/2

√|det(Cx)|

e−12(xTC−1

x x).

SiW est orthonormale et que chaque source a une variance unitaire, on a det(W ) = det(W T ) =1 et Cs = In et on observe que x suit alors exactement la même distribution que s. Tous lesmodèles X = (AW ) · (W−1S) avec W TW = In seront donc équivalents, ce qui est plus pro-blématique qu’une simple indétermination d’amplitude. Si en pratique k sources d’une certainedistribution et n − k sources gaussiennes ont été mélangées, on ne pourra maximiser la non-gaussianité que de k sorties et seules les k sources non gaussiennes seront récupérées, les n− kautres resteront indistinguables.

3.1.2 Mesure de la gaussianité d’une variable aléatoire

Pour maximiser ou minimiser la gaussianité d’une variable aléatoire, il nous faudrait une gran-deur statistique qui atteigne un extremum si et seulement si la variable aléatoire est normale,pour une moyenne et une variance fixées. Nous allons ici nous intéresser au kurtosis et surtoutà la néguentropie, qui remplissent dans la majorité des cas ces objectifs.

• Maximisation du kurtosis

On définit classiquement le kurtosis d’une variable aléatoire x par :

k(x) = E[x4]− 3(E[x2])2. (8)

27

Page 28: Blind Sources Separation - Séparation de Sources à l'Aveugle

Cette grandeur a la particularité de valoir 0 pour les distributions gaussiennes et d’être différentede 0 pour presque toutes les autres distributions. Maximiser la valeur absolue du kurtosis d’unesortie yi de notre algorithme pourrait donc être intéressant pour maximiser la non-gaussianité.De plus un résultat théorique assure que la maximisation de ce critère sous la contrainte devariance unité des sorties garantit l’obtention d’une source originale.

Cependant nous nous sommes laissés guider par la littérature sur le sujet (principalement [3]et [4]) déconseillant l’utilisation de ce critère à cause de son manque de robustesse aux donnéesaberrantes d’échantillon. Nous n’allons donc pas nous attarder ici sur le kurtosis mais nousjoignons des développements plus détaillés en annexe B. De plus nous allons voir qu’un autrecritère basé sur l’entropie offre également des garanties de convergence théorique, bien que lerésultat soit plus ardu à démontrer.

• Maximisation de la néguentropie

On définit d’abord l’entropie H(y) ou H(f(y)) d’une variable aléatoire y de densité de proba-bilité fY (y) (notée plus simplement f(y) à partir de maintenant) par :

H(y) = −∫Rf(y) log(f(y))dy. (9)

Cette définition se généralise aisément pour un vecteur aléatoire y, il suffit de remplacer y pary dans (9). Contrairement aux v.a. discrètes, l’entropie d’une v.a. continue peut être négativecar on peut avoir f(y) > 1. L’entropie caractérise le caractère aléatoire ou non prévisible d’unevariable aléatoire. Elle est d’autant plus petite (et éventuellement négative) que la densitéde probabilité est concentrée autour de certaines valeurs particulières, c’est-à-dire quand il estplus "facile" de prédire la réalisation d’une v.a. donnée. Si on prend l’exemple d’une distributionuniforme :

f(y) ={

si 0 ≤ y ≤ α0 sinon , (10)

on calcule H(y) = − log( 1α

), qui tend vers l’infini quand α→∞, ce qui correspond à l’intuition.

L’entropie comme mesure de gaussianité se justifie par le résultat suivant 6 :

6. tiré de [3], section 5.3.1

28

Page 29: Blind Sources Separation - Séparation de Sources à l'Aveugle

Théorème 2 (Distribution d’entropie maximale).Soit un ensemble de fonctions {F1(y), F2(y), . . . , Fn(y)} et des réels c1, c2, . . . , cn. Alors leproblème

maxf

H(f(y)) = maxf−∫f(y) log(f(y))dy

sous les contraintes ∫f(y)Fi(y)dy = ci, i = 1, . . . , n∫

f(y)dy = 1,(11)

est résolu par une fonction de la forme :

f(y) = A exp(

n∑i=1

aiFi (y)), (12)

où les ai et A se calculent en injectant f dans les contraintes (11) et en résolvant le systèmede (n+ 1) équations non linéaires à (n+ 1) inconnues. Toutes les intégrales sont prises surl’entièreté de la droite réelle. y peut être scalaire ou vectoriel.

Si on dispose d’informations sur une densité de probabilité f(y) uniquement sous forme demoments de fonctions particulières, l’estimateur optimal de f est donné par 12 car c’est lafonction la plus aléatoire compatible avec les données, celle qui fait le moins d’hypothèses apriori. En particulier si F1 = y et F2 = y2, on obtient f(y) = A exp (a1y + a2y

2), c’est-à-direune gaussienne ! A moyenne et variance fixées, la distribution ayant l’entropie maximale est ladistribution normale.

Au lieu de minimiser l’entropie de nos variables de sortie yi, on préférera dans le cadre de l’ICAmaximiser la néguentropie J(y) ou J(f(y)), qui a elle l’avantage d’être toujours positive et nulleseulement si y est gausienne. La néguentropie pour un vecteur aléatoire y est définie par :

J(y) = H(ν)−H(y), (13)

où ν est un vecteur gaussien de même moyenne et covariance que y. La néguentropie n’est pasutilisable telle quelle car elle requiert le calcul d’intégration de la densité de probabilité des yi,qui est difficile à estimer. Il faut donc développer des approximations de la néguentropie.

• Approximation de la néguentropie

Supposons à nouveau disposer des espérances d’un ensemble de fonctions {F1, . . . , Fn} parrapport à une variable aléatoire y de distribution f , de moyenne nulle et de variance unité :

∫f(y)Fi(y)dy = ci, i = 1, . . . , n,∫f(y) y dy = cn+1 = 0∫f(y) y2 dy = cn+2 = 1

(14)

En pratique on choisira des Fi et on estimera les ci via des moyennes d’échantillon. On faitde plus l’hypothèse (purement technique) que les Fi forment une base orthogonale au sens duproduit scalaire suivant :

< Fi, Fj >:=∫ϕ(y)Fi(y)Fj(y)dy = δij, (15)

où ϕ(y) = 1√2πe−y2/2 est la densité de probabilité d’une gaussienne N (0, 1). On suppose enfin,

à nouveau pour simplifier les calculs, que les Fi sont orthogonales aux polynômes de degréinférieur ou égal à 2 :

29

Page 30: Blind Sources Separation - Séparation de Sources à l'Aveugle

∫ϕ(y)Fi(y)ykdy = 0, k = 0, 1, 2. (16)

La distribution d’entropie maximale satisfaisant les contraintes (14) peut alors être approximéepar 7 :

f(y) = ϕ(y)[1 +

n∑i=1

E [Fi(y)]Fi(y)]. (17)

En injectant cette fonction dans la définition (13) et avec quelques manipulations et approxi-mations algébriques, on peut montrer que la néguentropie d’une variable aléatoire y peut êtreapprochée par :

J(y) ≈ 12

n∑i=1

E [Fi(y)] . (18)

Comme l’équation (17) nous donne à peu près la distribution f(y) d’entropie maximale, nousavons une borne supérieure sur l’entropie de notre v.a. y, et il est donc probable qu’en mini-misant cette quantité, on minimise la véritable entropie de y ou, de manière équivalente, onmaximise sa néguentropie J(y), donc qu’on "dégaussianise" y.

En pratique on a des fonctions {G1, . . . , Gn} 8 ne respectant pas forcément (15). Cependanton peut à nouveau montrer 9 que pour autant que les Gi soient linéairement indépendantes etne soient pas des polynômes de degré ≤ 2 (on parlera de fonctions non-quadratiques), on peuttoujours extraire une base F1, . . . , Fn respectant (15) et (16) par une orthogonalisation de typeGram-Schmidt. La néguentropie de la v.a. y peut alors être approximée par :

J(y) ≈n∑i=1

ki [E [Gi(y)]− E [Gi(ν)]]2 , (19)

où les ki ∈ R+ et ν ∼ N (0, 1). Dans le cas d’une seule fonction G(y), on obtient :

J(y) ≈ [E [G(y)]− E [G(ν)]]2 , (20)

qui constituera notre fonction objectif finale à maximiser. La seule inconnue à ce stade est lanature de la fonction G(y).

• Choix de G(y) pour l’approximation de la néguentropie

Le choix de G se révèle assez vaste mais il faut tout de même garder certaines contraintes àl’esprit :

1. fonction non-quadratique : contrainte technique vue au point précédent2. simplicité numérique : E[G(y)] doit être aisée à calculer par les estimateurs d’échantillon

classiques3. différentiabilité : sera nécessaire pour l’algorithme fast-ICA4. croissance modérée : G(y) ne devrait typiquement pas grandir plus vite que y2, asymp-

totiquement. Cela permet d’éviter des problèmes d’intégrabilité de la fonction d’entropiemaximale f telle que définie par (12) et de garantir donc son existence. D’autre part, unecroissance lente offre une plus grande robustesse aux données aberrantes d’échantillon.

7. démontré dans [3], section 5.6.1., en partant de l’hypothèse que f est proche d’une distribution gaussienneet que les constantes an+1 et an+2 liées aux contraintes de moyenne et de variance de f sont prépondérantesdans l’expression (12).

8. Nous verrons au point 3.1.2 comment bien les choisir9. Voir [3].

30

Page 31: Blind Sources Separation - Séparation de Sources à l'Aveugle

5. cohérence avec fY (y) : pour rappel on a J(y) = H(ν) − H(y) ≈ [E [G(ν)]− E [G(y)]]2,et intuitivement on devine que E[G(y)] devrait être proche de H(y) = −E [log(f(y))].Idéalement on a donc G(y) = log(f(y)), au signe près.

A la lumière de ces considérations, deux fonctions se démarquent :· G1(y) = log(cosh(y)) : peut être vue comme une version lissée de la fonction valeur absolue|y|, qui est elle proportionnelle au logarithme de la loi de distribution laplacienne de moyennenulle f(y) = 1

2be− |y|

b (σ2 = 2b2), relativement courante en pratique.· G2(y) = − exp(−y2/2) : plus heuristique, peut être vue comme le logarithme d’une fonctionde densité de probabilité f tendant vers 1 en l’infini, puisque lim

y→∞− exp(−y2/2) = 0 =

limy→∞

log(f(y)) si limy→∞

f(y) = 1. Elle prendrait donc bien en compte le poids des queues de dis-tributions puisqu’associée à l’entropie d’une distribution f ayant une masse de queue infinie.

Ces deux fonctions sont les plus couramment utilisées en pratique dans le cadre de l’ICA etc’est donc avec celles-là que nous travaillerons désormais.

Avant de développer l’algorithme fast-ICA, nous passerons par une dernière étape dite de "pre-processing" qui consiste à retirer la moyenne des observations x = [x1, . . . , xn]T et surtout àles décorréler par la technique de Principal Component Analysis (PCA). Cela permettra desimplifier l’algorithme.

3.1.3 Pre-processing : PCA

Après avoir imposé la variance des sources s et des sorties y, nous allons nous arranger pour queles observations x aient également une matrice de covariance identité. Cela se fait par simpletransformation linéaire x = V x, que l’on appelle transformée de Karhunen-Loève, PrincipalComponent Analysis, "whitening" ou encore "sphering".

Une matrice de covariance d’une v.a. réelle est toujours symétrique et peut donc être diagona-lisée comme suit :

Cx = E[xxT ] = EDET , (21)avec E une matrice orthogonale de vecteurs propres et D la matrice diagonale contenant les va-leurs propres positives {λ1, . . . , λn} de Cx associées. La transformation associée à V = D−1/2ET

permet bien de blanchir x, en effet :

E[xxT ] = E[D−1/2ETxxTE(D−1/2)T

]= D−1/2ETCxE(D−1/2)T

= D−1/2D(D−1/2)T = In,

où on utilise le fait que D−1/2 est aussi diagonale et égale à sa transposée. Observons aussi que :

x = D−1/2ETx = D−1/2ETAs = As. (22)

Les observations décorrélées x sont associées à une nouvelle matrice de mixage A = V A =D−1/2ETA, qui a le grand avantage d’être orthogonale. En effet comme Cx = In = Cs, on a :

In = E[xxT ] = AE[ssT ]AT = AAT . (23)

On interprète généralement ce résultat en considérant que l’on a réduit le nombre d’inconnuesde moitié. En effet la matrice de démixage W = WV −1 = WED1/2 à estimer, orthogonaleégalement, ne contient plus que n(n−1)

2 degrés de liberté. Dans la dérivation de l’algorithmefast-ICA, nous supposerons maintenant avoir affaire à des données centrées et blanchies ettenterons d’approcher la matrice W .

31

Page 32: Blind Sources Separation - Séparation de Sources à l'Aveugle

3.2 L’algorithme fast-ICACommençons par estimer une ligne de la matrice de démixage après PCA wi (les tildes sontmaintenant omis), maximisant la néguentropie d’une sortie yi = wT

i x.

3.2.1 Estimation d’un vecteur wi

On remarque d’abord que les maxima intéressants de notre fonction objectif J(yi) ≈ [E [G(yi)]− E [G(ν)]]2se produisent en des maxima de E[G(yi)]. En effet le gradient de J(wT

i x) par rapport à wi

s’écrit :

∇Jwi= 2

{E[G(wT

i x)]− E [G(ν)]

}︸ ︷︷ ︸

a

E[xg(wT

i x)]

︸ ︷︷ ︸b

, (24)

où g est la dérivée de G. Il s’annule quand a = 0, ce qui n’est pas intéressant car yi = wTi x

est alors proche d’une gaussienne, et surtout quand b = 0, avec b correspondant au gradientde E[G(wT

i x)]. La maximisation de E[G(wTi x)] sous la contrainte ‖wi‖ = wT

i wi = 1 estnécessairement obtenue en des points satisfaisant la condition du lagrangien :

E[xg(wT

i x)]− λwi = 0. (25)

L’intérêt de cette dernière équation est que, sous de faibles hypothèses de régularité sur G etavec une condition sur la source si, il a été démontré 10 que la maximisation de E[G(wT

i x)]sous la contrainte ‖wi‖ = 1 donne des vecteurs wi correspondant bien à une ligne de lanouvelle matrice de démixage W . Fast-ICA consiste à résoudre l’équation (25) par la méthodede Newton-Raphson, dont le pas d’itération ∆wi est donné par −JF (wi)−1F (wi), où F désignela fonction à gauche de l’égalité (25) et JF son jacobien. Ce dernier s’obtient par :

JF (wi) = E[xxTg′(wTi x)]− λIn. (26)

L’inversion de JF pose cependant problème. Faute de mieux, on peut faire l’approximationE[xxTg′(wT

i x)] ≈ E[xxT ]E[g′(wTi x)] = InE[g′(wT

i x)], grâce au PCA effectué sur x. On a alors

JF (wi)−1 ≈ 1E[g′(wT

i x)]− λ · In, (27)

où il faut encore estimer λ. En multipliant (25) par wTi à gauche et en utilisant ‖wi‖ = 1, on

voit qu’on peut faire l’approximation λ ≈ E[wTi xg(wT

i x)], avec wi l’itéré courant. On peutenfin trouver l’itération de point-fixe réalisée par fast-ICA :

wi ← wi − JF (wi)−1F (wi)

⇔ wi ← wi −E[xg(wT

i x)]− λwi

E[g′(wTi x)]− λ , λ = E[wT

i xg(wTi x)]

(28)

qui est suivie de la normalisation :

wi ← wi/‖wi‖. (29)

On jugera de la convergence par le cosinus de l’angle entre deux itérés successifs w+i et wi :

cos(∠(w+i ,wi)) = w+T

i wi

‖w+i ‖‖wi‖

. (30)

10. [3], section 8.3. La seule condition sur si est que E[sig(si)− g′(si)] 6= 0 ∀i, ce qui généralise la conditionde kurtosis des sources non nuls que l’on a vue dans la section 3.1.2 lors de la maximisation du kurtosis.

32

Page 33: Blind Sources Separation - Séparation de Sources à l'Aveugle

Cet algorithme allie donc robustesse statistique et rapidité de convergence garantie par Newton-Raphson, même approximée.

Les fonctions g et g′ utilisées en pratique sont donc les dérivées première et seconde d’une desdeux fonctions non quadratiques ayant servi à l’approximation de la néguentropie :

G1(x) = log(cosh(x)) : g1(x) = tanh(x) et g′1(x) = 1− tanh(x)2

G2(x) = − exp(−x2/2) : g2(x) = x exp(−x2/2) et g′2(x) = exp(−x2/2)(1− x2)Par la suite nous nous référerons souvent à l’une ou l’autre fonction par sa dérivée première :’tanh’ ou ’exp’.

3.2.2 Estimation de plusieurs vecteurs

Pour éviter que les nouveaux vecteurs à estimer ne convergent vers les mêmes sources, nousveillons à maintenir la matrice de démixage W (après whitening) orthogonale. Cela corresponden fait à une contrainte de décorrélation et de variance unité des sorties. En effet :

E[yiyj] = δij ⇔ E[wTi xx

Twj] = wTi Inw

Tj = wT

i wTj = δij. (31)

On peut opter pour deux méthodes : la décorrélation symétrique et la déflation.1. Décorrélation symétrique : on calcule toutes les sorties en même temps. Il faut transposer

l’équation 28 matriciellement en gardant à l’esprit que :

W =

wT

1 →...

wTn →

W T =[w1, · · · , wn

↓ · · · ↓

], (32)

ce qui donne 11 :

W T ← W T + diag(αi)[diag(βi) + E

[g(y)yT

]]W T , (33)

où βi = −E [yig(yi)] et αi = −1/ (βi − E [g′(yi)]). La décorrélation se fait alors par

W T ← (W TW )−1/2W T , (34)où on trouve facilement la matrice racine carrée de la matrice W TW car celle-ci estsymétrique et donc diagonalisable : W TW = EDET (avec ETE = I). On peut facile-ment vérifier que (W TW )−1/2 = ED−1/2ET . On vérifie également que (W TW )−1/2W T

est orthogonale en utilisant les propriétés (W−1)T = (W T )−1, (W 1/2)T = (W T )1/2 et(W−1)1/2 = (W 1/2)−1.

2. décorrélation par déflation : on estime chaque vecteur wi séparément mais après chaqueitération (28) on effectue une réorthogonalisation de type Gram-Schmidt-Arnoldi. Si ona déjà estimé p sorties et donc p lignes de W , on fait :

wp+1 ← wp+1 −p∑i=1wTp+1wiwi (35)

et on renormalise wp+1. Si on stocke les lignes wi dans une matrice W dont les lignes(p+ 2), . . . , n sont encore des zéros, on peut écrire :

wp+1 ← wp+1 −W TWwp+1. (36)

Cet algorithme est donc très facilement utilisable pour séparer plusieurs sources, même si nousnous sommes limités à l’étude du cas de deux sources dans le cadre de ce projet. Par la suite, dansles détails d’implémentation pratique, nous nous référerons souvent aux options de décorrélationpar ’def’ ou ’sym’.11. Issu de [4], section 6.3.

33

Page 34: Blind Sources Separation - Séparation de Sources à l'Aveugle

3.2.3 Complexité calculatoire

La complexité de notre algorithme est en O(n2) selon une première estimation. On considèreque l’algorithme reçoit une matrice k× n représentant k signaux de n échantillons à séparer etque le nombre k est fixé (à 2 chez nous). On s’intéresse ici à la méthode utilisant la fonction’exp’ comme approximation de la néguentropie et la décorrélation symétrique, mais les autrescas sont fort similaires.

Le pre-processing consiste à retirer la moyenne, opération proportionnelle à kn, à calculer lamatrice de covariance ∈ Rk×n, ce qui est donc ∝ k2n et à en calculer les valeurs et vecteurspropres. Des algorithmes de type QR sur une matrice symétrique k × k tournent typiquementen O(k3) et est donc à temps constant puisque k est fixé.

Une itération de point fixe fast-ICA est visible sur le listing 3. On y effectue :– ligne 1 : multiplication d’une matrice k × k avec une k × n, O(k3n)– ligne 2, 3, 4 : multiplications de matrices k × n élément par élément ou sommes de tous leséléments, O(kn)

– ligne 5 : Lam étant un vecteur k × 1, on a ici des opérations en O(kn+ k)– ligne 6 : la multiplication de gY par Y ′ est en O(k2n2)Nous n’avons donc que des opérations s’effectuant en temps polynomial par rapport à k et n.k étant fixé à 2 dans notre cas et la plus haute puissance de n intervenant étant n2, on a estiméune complexité en O(n2).

1 Y = W*X ;2 expon = exp(- (Y .^ 2) / 2);3 gY = Y.* expon ; % =g(Y = W*X)4 Lam = sum((Y.* gY) ’) ; % E{yi*g(yi)}5 Alpha = 1./( Lam - sum( expon .*(1 -Y.^2) ,2) ’) ;6 W = W + diag ( Alpha )*( - diag (Lam) + gY*Y’ )*W ;7 [...]8 W = r e a l ( inv (W * W ’) ^(1/2) ) * W ; % orthogonalisation

Listing 3 – Itération matricielle utilisant la fonction de néguentropie − exp(−u2/2) avecdécorrélation symétrique.

3.3 Implémentation pratique pour les imagesNous abordons ici dans un premier temps les différentes possibilités de mises en forme desimages préalablement à l’appel d’ICA. Ensuite nous voyons comment l’algorithme ICA estconcrètement appelé. Enfin, nous nous intéressons aux problèmes de normalisation post-ICA dusà l’indétermination d’amplitude du modèle, particulièrement critique pour les photos couleur.

3.3.1 Traitement des images pré-ICA

Le traitement d’images mixées via l’algorithme ICA peut s’effectuer de multiples manières etune mise en forme des images adaptée peut donner un meilleur résultat avec le traitementde l’algorithme ICA. Dans ce point, nous traitons une séparation de sources à partir de deuxphotos issues d’un même mixage, avec toutes les options ne concernant pas la mise en formepré-ICA laissées par défaut, 12 afin d’analyser objectivement le résultat des différents traite-ments possibles.

12. Options par défaut pour notre fonction Matlab BSS.m : ’mean’,’tanh’,’sym’. Voir le point 3.3.3 pour’mean’ et 3.3.2 pour ’tanh’ et ’sym’.

34

Page 35: Blind Sources Separation - Séparation de Sources à l'Aveugle

La situation que nous considérons ici est le mixage entre un document écrit et un reflet. L’inten-sité du document est exprimée par s1 et celle du reflet par s2. Dans cette situation, les mixtures

[x1x2] sont obtenues par xt =(

0.05 0.950.01 0.99

)st, où s = [s1s2].

Par ailleurs, nous donnons la qualité des résultats selon le critère défini dans la modélisation(cf. point 1.3).

• Noir et blanc

Puisque la problématique consiste à récupérer un document rendu illisible à cause d’un reflet,il est pertinent de traiter les images en noir et blanc lors de la séparation des sources. Letraitement consiste donc simplement en une conversion totale des mixtures en niveaux de gris.Ensuite, les matrices converties sont aplaties pour leur appliquer après l’algorithme ICA. Lerésultat est donc lui-même en niveaux de gris.

Mixed imagesRecovered images

(quality: 3.1946 & 4.0942) Sources

Blind Source Separation for options : − Images in gray levels − Artificial case − normalisation = mean − decorrolation = sym − negentropy function = tanh −

Figure 8 – Application de l’algorithme ICA aux mixtures converties en niveaux de gris.

Nous pouvons constater via la figure 8 que le résultat est plutôt correct, sachant que le docu-ment est visible à moins de 5% dans les mixtures.

Néanmoins, le traitement en niveaux de gris n’est pas toujours intéressant. De fait, on pourraitimaginer une situation où le document contient une image en couleur. La conversion en niveauxde gris pourrait altérer l’identification visuelle de l’image.

• RGB component-by-component

Les images sont traitées en couleurs, selon les niveaux de rouge, de vert et de bleu 13 pré-sents dans l’image. Le traitement RGB component-by-component applique successivement l’al-gorithme ICA aux composantes rouges, vertes et bleues des mixtures, séparant donc les sources13. L’acronyme employé est RGB

35

Page 36: Blind Sources Separation - Séparation de Sources à l'Aveugle

composante par composante.

Etant donné que l’algorithme ICA détermine aléatoirement l’ordre des sources séparées parses soins, il n’est pas assuré que la première composante rouge soit celle qui aille avec lapremière composante verte, par exemple. Il est donc nécessaire de définir un critère permettantde regrouper correctement les composantes RGB séparées par l’algorithme ICA.Pour ce faire, nous observons la corrélation de la première composante rouge avec celles verteset ensuite bleues. Une corrélation maximum indique que les composantes appartiennent à unemême image RGB. Ainsi, si la corrélation entre la première composante rouge et la secondeverte est plus grande que celle avec la première verte, alors la première composante rouge et laseconde verte définissent une même image.Le listing en annexe C.1 met en évidence l’implémentation exécutant le traitement RGBcomponent-by-component.

Une autre difficulté est la cohérence des intensités individuelles RGB. De fait, l’algorithme ICAsépare les sources à une amplitude près. Il est donc tout à fait possible d’observer d’une partune composante rouge séparée à une intensité plus élevée que l’originale et d’autre part unecomposante verte séparée à une moindre intensité que l’originale, par exemple. Ce type desituation, illustrée à la figure 9, est délicat puisque l’image séparée va présenter des couleursinsensées par rapport à l’originale. Ce problème est traité par la normalisation des résultats,que nous développons au point 3.3.3.

Mixed imagesRecovered images

(quality: 6.1635 & 2.4268) Sources

Blind Source Separation for options : − Artificial case − normalisation = mean − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 9 – L’algorithme ICA est appliqué itérativement aux composantes RGB des mixtures.On constate que les couleurs des images séparées sont incohérentes par rapport à celle dessources.

Malgré les difficultés de mise en oeuvre propres au traitement RGB component-by-component,celui-ci présente deux avantages.Le premier est que dans la réalité, la situation ne consiste certainement pas en des mixageslinéaires. En effet, les bandes de fréquence du spectre visible ne se réfléchissent pas de la même

36

Page 37: Blind Sources Separation - Séparation de Sources à l'Aveugle

manière, pouvant par exemple provoquer des interférences constructives ou destructives.Le second avantage est une rapidité de traitement, puisque la complexité de l’algorithme fast-ICA est à la grosse louche O(N2), avec N le nombre total d’entrées, divisé par 3 pour chaquecomposante.

• Noir et blanc vers RGB

Le traitement consiste à appliquer aux mixtures définies selon leurs composantes RGB la trans-formation obtenue pour des mixtures exprimées en niveaux de gris. Le résultat final est doncbien en couleur. Ce traitement est pertinent puisque la conversion en niveaux de gris constitueen quelques sortes une compression, une moyenne de l’information des 3 couleurs en une seuledonnée. L’implémentation exécutant ce traitement est reprise dans le listing en annexe C.2.

Ce traitement a l’avantage de traiter uniformément les composantes RGB (contrairement àRGB component-by-component), avec une complexité temporelle proche de celle du traitement“Noir et blanc”. Toutefois, l’algorithme ICA sépare toujours à une amplitude près, limitanttoute garantie quant au rendu des couleurs.

Mixed imagesRecovered images

(quality: 5.2781 & 3.4579) Sources

Blind Source Separation for options : − Artificial case − normalisation = mean − decorrolation = sym − negentropy function = tanh − processing < bw2rgb −

Figure 10 – Traitement des mixtures colorées à partir de la transformation obtenues pour lesmixtures converties en niveau de gris. On constate que les couleurs sont traitées uniformément.Le fond du texte est brun à cause de la normalisation effectuée à partir de la moyenne desmixtures (cf. point 3.3.3).

• RGB all-in-one

Etant donné que la modélisation du problème suppose des mixages linéaires des sources, il estlégitime d’appliquer l’algorithme ICA en une fois sur les mixtures colorées. Les mixtures sontà nouveau exprimées selon leurs composantes RGB.

37

Page 38: Blind Sources Separation - Séparation de Sources à l'Aveugle

Pour ce faire, il est nécessaire d’aplatir les trois matrices RGB en un vecteur, pour ensuite yappliquer l’algorithme ICA. Les sources séparées sont alors remises en format RGB à 3 "étages".L’implémentation permettant l’exécution de ce traitement est visible au listing en annexe C.3.

Puisque le traitement applique une unique fois l’algorithme ICA, les composantes RGB sontséparées uniformément, comme pour le traitement “Noir et blanc vers RGB”. Toutefois, le ré-sultat est en un sens plus précis puisqu’il ne se base pas sur une compression des données 14

mais conserve l’information des 3 couleurs. Encore et toujours, l’algorithme ICA ne sépare qu’àune amplitude près, laissant quelques écarts possibles au niveau des couleurs.

Mixed imagesRecovered images

(quality: 5.9246 & 2.7427) Sources

Blind Source Separation for options : − processing < flattening − Artificial case − normalisation = mean − decorrolation = sym − negentropy function = tanh −

Figure 11 – Application du traitement “RGB all-in-one”. Le résultat est presque parfait, àl’exception du fond gris pour le texte, justifié à la fois par le fonctionnement de l’algorithmeICA et par la normalisation à partir de la moyenne des mixture (cf. point 3.3.3).

Bien que les résultats soient probants par rapport à la modélisation du problème, il faut noterque la complexité de l’algorithme ICA n’avantage pas ce type de traitement pour des imagesde taille importante.Par ailleurs - comme dit au point 3.3.1 - il s’avère que dans la réalité les mixages ne sontpas linéaires étant donné que les bandes de fréquences du spectre visible peuvent se réfléchirdifféremment. Dès lors, les résultats obtenus pour des cas réels peuvent s’avérer incorrects étantdonné que le modèle n’est pas rigoureusement vérifié.

3.3.2 Appel de l’algorithme ICA

L’algorithme ICA est exécuté par la fonction fastica.m dans BSS.m. Cette fonction prendtoujours deux vecteurs, qui peuvent représenter dans le cas des images :– 2 matrices m× n aplaties d’une image soit exprimée en niveaux de gris, soit en RGB 15

14. Ce qui est le cas pour “Noir et blanc vers RGB”.15. Dans ce cas, on traite composante par composante, cf. point 3.3.1

38

Page 39: Blind Sources Separation - Séparation de Sources à l'Aveugle

– 2 matrices m× n× 3 aplaties d’une image exprimée en RGB 16

Notons que les deux vecteurs soumis à fastica.m peuvent être des sous-échantillonnages danstous les cas pour réduire les calculs, sauf si le traitement d’image appliqué est “RGB component-by-component” (nous parlons brièvement du sous-échantillonnage au point 3.5).

On a vu que l’algorithme ICA pouvait s’appliquer à des images traitées différemment selon l’op-tion choisie (cf. point 3.3.1.). Nous allons maintenant voir qu’il est aussi possible de nuancer leprocessus de l’algorithme ICA, avec 4 combinaisons possibles.

D’une part, la néguentropie peut être approximée à l’aide de fonctions non-quadratiques. Enl’occurrence, nous pouvons utiliser soit log(cosh(u)), soit −exp(−u2

2 ) 17. Nous les dénommonsplus souvent par leurs dérivées qui apparaissent dans l’itération de Newton-Raphson de l’algo-rithme ICA : tanh(u) et u exp(−u2

2 ) 18.D’autre part, les sorties peuvent être décorrélées de deux manières. Soit par approche symé-trique, soit par déflation. Ces deux approches ont été présentées au point 3.2.2.

3.3.3 Normalisations post-ICA

Comme l’algorithme ICA sépare les sources à une amplitude près, il est n’est pas superflu deprocéder à une normalisation des résultats issus d’un traitement d’images. La normalisationdu traitement doit donc rendre cohérents les résultats obtenus. Les normalisations implémen-tées sont utilisables pour tous les traitements que nous avons conçus et développés au point3.3.1. Nous effectuons les différentes normalisations sur une même situation de mixages, avecles options standards 19 {’tanh’,’sym’} 20 afin d’analyser objectivement le résultat des différentstraitements possibles.

Pour rappel, si l’on considère l’intensité du document exprimée par s1 et celle du reflet par s2,

les mixtures [x1x2] sont obtenues par xt =(

0.05 0.950.04 0.96

)st, où s = [s1s2]. L’algorithme ICA

approxime l’inverse de la matrice de mixage A 21 par W tel que : Wxt = stPar ailleurs, nous donnons la qualité des résultats selon le critère défini dans la modélisation(cf. point 1.3).

• Normalisation de la matrice A

Puisque les mixages sont supposés linéaires et que - en particulier dans le cas d’un mixaged’images - la somme des opacités d’une mixture doit valoir l’unité, il est tout à fait pertinentd’imposer que la somme des éléments d’une ligne de la matrice de mixage A vaille l’unité. Ainsi,après avoir normalisé la matrice A issue du traitement d’images 22, nous appliquons yt = A−1xt.

L’implémentation de cette normalisation est visible dans le listing en annexe C.4. Sur la figure12, on peut constater que la normalisation de la matrice A donne un résultat presque parfaitpour notre exemple de référence.

16. Dans ce cas, on traite toutes les composantes en une seule fois, cf. point 3.3.117. Détails théoriques développés au point 3.1.218. Notées ’tanh’ et ’exp’ comme options dans notre implémentation.19. Standard au sens de notre fonction matlab BSS.m20. Voir le point 3.1.2 pour ’tanh’ et ’def’. Le traitement est “RGB component-by-component” (cf point 3.3.1)21. Une entrée de A représente physiquement l’opacité d’une source dans une mixture.22. La matrice A normalisée est notée A, à ne pas confondre avec la matrice A associées aux observations

blanchies par PCA.

39

Page 40: Blind Sources Separation - Séparation de Sources à l'Aveugle

Mixed imagesRecovered images

(quality: 2.4358 & 2.4782) Sources

Blind Source Separation for options : − Artificial case − normalisation = normA − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 12 – Résultats normalisés selon la normalisation de la matrice de mixage A issue del’algorithme ICA.

• Moyenne des mixtures

Nous pouvons normaliser les résultats indépendamment de la modélisation, ce qui s’avère assezapproximatif dans les situations réelles. La normalisation des résultats se fait dans ce cas surbase des données du problème. En l’occurrence, les mixtures sont les seules données précises 23

du problème dont nous disposons. Il est donc cohérent d’en tenir compte. C’est pourquoi, nousnormalisons les résultats du traitement d’images selon la moyenne des mixtures. Les résultatssont normalisés composante par composante, assurant ainsi une même luminance en entrée del’algorithme ICA qu’en sortie. La normalisation est exprimée par l’implémentation reprise aulisting en annexe C.5.

Néanmoins, cette normalisation n’est pas toujours pertinente. De fait, si une des sources estpeu présente dans les deux mixtures, comme le suggère notre cas avec le document illisible àcause d’un reflet, alors sa séparation normalisée pourrait être fort éloignée de l’originale. Elle lesera d’autant plus si l’autre source - qui est prépondérante dans les mixtures - a une luminancefort différente de la première source. Or, ayant fait l’hypothèse de l’indépendance des sources etdonc de leur luminance, ce type de normalisation semble être défavorisé. Les figures 8, 9,10 et 11représentent des situations où la normalisation selon la moyenne des mixtures a été appliquée.

3.4 Implémentation pratique pour les sonsLe traitement des sons est plus simple que celui des images étant donné que sa représentationnumérique est moins complexe (cf. point 1.2). Le traitement consiste à appliquer l’algorithmeICA sur les vecteurs représentant les sons mixés. L’exécution de l’ICA peut être nuancée au ni-

23. Pour autant que le support n’ait pas altéré les signaux enregistrés.

40

Page 41: Blind Sources Separation - Séparation de Sources à l'Aveugle

veau de la fonction approximant la néguentropie 24 et au niveau de la décorrélation du résultat 25.

Les sources séparées sont normalisées à l’intervalle [−1; 1], car par expérience nous avonsconstaté que le rendu était correct. Par ailleurs, la précision numérique est d’autant meilleureautour de zéro. Cette normalisation est visible au listing en annexe C.6. Un exemple est illustrévia la figure 13.

0 1 2 3 4 5

x 104

−3

−2

−1

0

1

2

3

Mixed sounds

0 1 2 3 4 5

x 104

−1

−0.5

0

0.5

1

Recovered sounds(quality: 3.8853 & 3.9054)

0 1 2 3 4 5

x 104

−1

−0.5

0

0.5

1

Sources

0 1 2 3 4 5

x 104

−8

−6

−4

−2

0

2

4

6

8

0 1 2 3 4 5

x 104

−1

−0.5

0

0.5

1

Blind Source Separation for options : − Artificial case − normalisation = sound − decorrolation = sym − negentropy function = tanh −

0 1 2 3 4 5

x 104

−1

−0.5

0

0.5

1

Figure 13 – Exemple d’application de l’algorithme ICA à deux mxitures sonores.

3.5 Echantillonnage des signauxLa taille des vecteurs soumis à l’algorithme ICA peut devenir handicappant au niveau du tempsde calcul, bien que des images de 4 à 5 Mb puissent être traitées sans problème en une minuteou moins. C’est pourquoi, il peut s’avérer intéressant d’effectuer l’algorithme sur un échantillon-nage des mixtures pour ensuite appliquer la transformation obtenue aux mixtures complètes.

Dans le cas des images, ceci est possible pour tous les traitements, à l’exception du traitement“RGB component-by-component”. L’échantillonnage consiste tout simplement à prendre unélément sur deux des vecteurs représentant les mixtures. Pour ce faire, les matrices ont étéaplaties en vecteurs.Dans le cas des sons, puisque la représentation numérique est déjà une forme vectorisée, il suffitde sélectionner un élément sur deux.

L’implémentation appliquant ce traitement supplémentaire est mise en évidence dans le listingen annexe C.7.

24. soit log(cosh(u)), soit − exp(−u2

2 ) (cf. point 3.1.2)25. soit par symétrie, soit par déflation (cf. point 3.2.2)

41

Page 42: Blind Sources Separation - Séparation de Sources à l'Aveugle

On notera que l’échantillonnage altère peu les résultats obtenus sur les cas synthétiques traités.Les résultats sont similaires à ceux des figures du point 3.3.1 et 3.4. Evidemment, la qualitédiminue quelque peu dans ce cas.

3.6 RésultatsNous venons de voir l’implémentation pratique mettant en oeuvre le processus de séparationde sources à l’aveugle, en utilisant comme outil de séparation principal l’algorithme ICA. Cetalgorithme peut être appliqué et s’appliquer de multiples manières étant donné toutes les op-tions d’implémentation, comme cela est illustré sur la figure 14.

Figure 14 – Petit aperçu de quelques possibilités de résultats obtenus à partir de deux mêmesmixtures, traitées selon différentes options d’application de l’algorithme ICA.

Les résultats obtenus pour des mixages conformes à la modélisation du point 1.1 ont été présen-tés de manière assez complète au point précédent, Implémentation pratique 26, c’est pourquoinous concentrons notre intérêt ici à présenter les résultats pour les cas limites 27, tendant à serapprocher d’une situation réelle. On aborde aussi l’un ou l’autre cas réel.

Les cas présentés sont principalement des images. Nous justifions cette limitation de cas audiopar la difficulté à se procurer des échantillons ainsi qu’à en produire, faute de moyens logistiquesadaptés. Il est de toutes façons clair que ceux-ci peuvent être difficilement appréciés dans unrapport écrit, étant donné qu’il est plutôt délicat de juger la qualité d’un son à partir de songraphe temporel.

26. Voir point 3.3.27. Selon les hypothèses du modèle mathématique

42

Page 43: Blind Sources Separation - Séparation de Sources à l'Aveugle

Pour rappel, notre modélisation mathématique reposait sur plusieurs hypothèses : mixage li-néaire, homogène et constant, sources indépendantes, pas de décalage temporel ou spatial entreles sources. Nous nous sommes également rendu compte que les sources gaussiennes ne pou-vaient pas être séparées. Le modèle théorique de l’ICA par maximisation de la non-gaussianitéa introduit l’hypothèse supplémentaire que les sources doivent idéalement être identiquementdistribuées. Nous allons donc revenir sur les hypothèses les plus critiques qui ne se vérifientqu’approximativement, voire pas du tout, et verrons ainsi en quoi elles influencent le traite-ment de sons ou d’images.

3.6.1 Mixage linéaire, homogène et constant

Cette hypothèse a certainement peu de chance d’être vérifiée dans la réalité. Nous avons no-tamment pu nous en rendre compte en remarquant qu’avec des photos réelles c’était en générall’algorithme traitant chaque couleur séparément qui donnait les meilleurs résultats. Des ma-trices de mixage parfois étonnamment différentes sont produites d’une couleur à l’autre, ce quisuggérerait un mélange non homogène et dépendant de la longueur d’onde des ondes réfléchies,par exemple.

On peut observer aux figures 15 et 16 les résultats obtenus dans le cas de mixages non uni-formes d’images. On constate que le premier est meilleur que le second. Ceci est dû au fait quedans la première situation la non-uniformité du reflet est localisée identiquement sur les deuxmixages 28, ce qui n’est pas le cas pour la seconde situation. A vrai dire, les résultats n’ont riende surprenants par rapport au fonctionnement de l’algorithme ICA : l’algorithme détermineune transformation “moyenne” qu’il applique aux mixages afin de séparer les sources. Il estdonc logique de trouver des résidus dans les sources séparées, résidus localisés aux endroitsd’opacité hétérogène. Une amélioration de l’implémentation à cet égard consisterait en un trai-tement segmenté : on diviserait les mixages en plusieurs sous-images selon certains critères 29

qui seraient traitées successivement par l’algorithme ICA.

Quant à la variation temporelle de notre mixage, une piste d’amélioration pourrait être deséparer les signaux audio en plusieurs parties et d’appliquer successivement la séparation descomposantes à chaque tronçon temporel, afin d’observer l’évolution temporelle éventuelle de lamatrice de mixage.

Enfin, au lieu d’un simple mixage linéaire, d’autres modèles auraient aussi pu être étudiés :celui d’une convolution dans un système LTI, par exemple ("blind deconvolution").

28. Causé par un défaut du vitrage en certaines zones - par exemple - altérant le phénomène de réflexion.29. eg. : nombre de contours, luminance, saturation, ...

43

Page 44: Blind Sources Separation - Séparation de Sources à l'Aveugle

Mixed images Recovered images

Blind Source Separation for options : − normalisation = mean − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 15 – Résultat obtenu pour des mixages non uniformes : l’opacité du reflet n’est pasconstante sur la surface. Toutefois, les zones hétérogènes sont localisées identiquement sur lesdeux mixages.

Mixed images Recovered images

Blind Source Separation for options : − normalisation = mean − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 16 – Résultat obtenu pour des mixages non uniformes : l’opacité du reflet n’est pasconstante sur la surface. Ici, les zones hétérogènes ne sont pas localisées identiquement sur lesdeux mixages.

44

Page 45: Blind Sources Separation - Séparation de Sources à l'Aveugle

3.6.2 Signaux sources indépendants

Etant donné que l’algorithme ICA se base entre autre sur le fait que les sources sont indépen-dantes, il est pertinent d’observer le comportement de l’algorithme lorsque celles-ci présententcertaines similitudes. Ceci pourrait se produire dans certaines situations réelles, où par exempleune partie du reflet serait repris dans le document comme une image. Un exemple de cette situa-tion avec résultat de l’algorithme est illustré à la figure 17. On peut constater que l’algorithmene s’en sort pas trop mal, parvenant à mettre en évidence le texte et restituant correctementle reflet.

Mixed imagesRecovered images

(quality: 2.403 & 2.563) Sources

Blind Source Separation for options : − Artificial case − normalisation = normA − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 17 – Résultat obtenu dans le cas où les sources présentent une certaine similitude. Ici,une partie du reflet est présent sur la gauche du texte.

3.6.3 Absence de décalage spatial ou temporel

L’algorithme fast-ICA est particulièrement sensible au décalage spatial pour les images : lesrésultats sont nettement moins bons sur des photos réelles dès que le cadrage est légèrementmodifié. La figure 25 illustre ce phénomène. Un des deux mixages est simplement l’image defond (ce qui peut s’interpréter comme un coefficient associé au reflet de valeur nulle dans lamatrice de mixage). On voit que l’algorithme a relativement bien réussi à séparer l’image defond de l’image de reflet, mais il reste dans la deuxième sortie des restes atténués de l’image defond, qui pourraient être dus au léger décalage des deux photos de base.

Au niveau des sons, cela pourrait également être une des causes des mauvais résultats observéssur les cas réels, bien que l’algorithme échoue également sur des échantillons sonores semblantbien synchronisés 30.

30. The Computational Neurobiology Laboratory, Blind Source Separation of recorded speech andmusic signals., enregistrements disponibles sur l’url http://cnl.salk.edu/~tewon/Blind/blind_audio.html.

45

Page 46: Blind Sources Separation - Séparation de Sources à l'Aveugle

Mixed Images

(a) Les deux images de base sont légèrementdécalées de droite à gauche.

Recovered images

(b) La 2ème source récupérée (en bas à droite)contient principalement le reflet du photographe, dela table, du chauffage et de la fenêtre mais il resteégalement de l’ombre de l’image de fond (bougies etvase orange).

Figure 18 – Dégradation de la qualité des sources récupérées possiblement due au décalagespatial entre les deux photos de départ.

3.6.4 Sources identiquement distribuées et non-gaussiennes

La distribution identique des sources, qui justifie l’utilisation du théorème central limite etmotive l’entièreté de l’algorithme, se vérifie en général mieux pour les signaux audio que image.

Les signaux sons présentent typiquement une distribution super-gaussienne (type distributionde Laplace à kurtosis positif), comme on peut le voir sur la figure 19, où les fonctions de densitéde probabilité de 3 échantillons sonores ont été approchées numériquement par estimation denoyau, à l’aide de la fonction ksdensity de Matlab (après retrait de la moyenne et normalisa-tion à une variance unité). Il s’agit à nouveau d’une voix ("I got a bad feeling about this"), d’unepersonne chantant sans musique (début de "I feel good") et de musique sans parole (début de"Rock the House", de Afrojack). Un QQ-plot de l’échantillon de la voix, ’badfeeling’, comparéaux quantiles de la distribution normale standardisée montre la déviation des signaux audiopar rapport à la loi normale.

Dans le cas d’images, il est généralement intéressant d’afficher les histogrammes de la lumi-nance 31 et de chaque couleur séparément dans le cas RGB. Notre image ’text’, qui se rapprochede notre problématique de départ où on cherche à déchiffrer un document écrit, présente unedistribution assez particulière (voir figure 20) : elle est bimodale avec un léger pic autour de 0(écriture grise-noire) et un pic important en 255 (valeur maximale dans l’échelle uint8, corres-pondant à tout le fond blanc de la page) et est donc loin d’être gaussienne. Pour des photos

31. Information "noir et blanc"

46

Page 47: Blind Sources Separation - Séparation de Sources à l'Aveugle

−20 −15 −10 −5 0 5 10 15 200

0.05

0.1

0.15

0.2

0.25Estimation de la densité de probabilité de ’Feelgood’

(a)

−15 −10 −5 0 5 10 150

0.05

0.1

0.15

0.2

0.25Estimation de la densité de probabilité de ’Badfeeling’

(b)

−20 −15 −10 −5 0 5 10 15 20 250

0.05

0.1

0.15

0.2

0.25Estimation de la densité de probabilité de ’Rock the House’

(c)

−5 0 5−4

−3

−2

−1

0

1

2

3

4

Standard Normal Quantiles

Qua

ntile

s of

Inpu

t Sam

ple

QQ Plot of Sample Data (’Feelgood.wav’) versus Standard Normal

(d)

Figure 19 – Estimation par noyau des densités de probabilité de 3 échantillons audio. Onobserve des distributions du type Laplace. En 19(d), QQ-plot de l’échantillon ’badfeeling’ nor-malisé par rapport à la distribution gaussienne N (0, 1).

plus ordinaires (portraits, paysages, etc.), nous pouvons observer sur les figures des distribu-tions plus en cloche, donc a priori plus gaussiennes, aussi bien pour les images converties ennoir et blanc que pour les composantes couleur. Cependant un QQ-plot des échantillons del’image ’turbulence’ convertie en noir et blanc, centrée et normalisée à une variance unité, encomparaison avec la distribution normale N (0, 1) semble indiquer un certain écartement parrapport à la gaussianité.

La non-gaussianité semble donc à peu près garantie. On n’a par contre pas toujours des sourcesidentiquement distribuées pour les images, mais on a pu voir dans la section précédente quel’algorithme s’en sortait bien malgré tout, du moins pour les cas artificiels linéaires.

47

Page 48: Blind Sources Separation - Séparation de Sources à l'Aveugle

−100 −50 0 50 100 150 200 250 300 3500

0.002

0.004

0.006

0.008

0.01

0.012

0.014

0.016

0.018Estimation de la densité de probabilité de ’text.jpg’ (n&b)

(a)

−50 0 50 100 150 200 250 3000

1

2

3

4

5

6

7

8

9x 10

−3Estimation de la densité de probabilité de ’turbulence.jpg’ (n&b)

(b)

−100 −50 0 50 100 150 200 250 300 3500

0.002

0.004

0.006

0.008

0.01

0.012

0.014

0.016

0.018Estimation de la densité de probabilité de ’text.jpg’ (vert)

(c)

−50 0 50 100 150 200 250 3000

0.001

0.002

0.003

0.004

0.005

0.006

0.007

0.008

0.009

0.01Estimation de la densité de probabilité de ’turbulence.jpg’ (vert)

(d)

Figure 20 – Estimation par noyau des densités de probabilités de deux images assez différentesau niveau du contenu, pour les niveaux de gris et pour une des 3 couleurs.

3.6.5 Mixages bruités

Il va sans dire que nous supposons que les mixages sont enregistrés sans être altérés par unbruit quelconque. Toutefois, il est évident que dans la pratique il y aura toujours du bruit quialtèrera l’enregistrement.

Nous pouvons observer sur la figure 21 que l’algorithme ICA parvient à séparer une imagedu bruit qui l’a altérée, si on dispose de cette image enregistrée avec deux niveaux de bruitdistincts. Ce comportement de l’algorithme est sensé 32, puisque le bruit et le signal sont indé-pendants et que le bruit altère généralement le signal uniformément.

Dans notre cas, on s’intéresse au comportement algorithme lorsque les mixages sont bruités.Cette situation est visible sur la figure 22. On peut voir que l’algorithme va concentrer le bruitsur une des deux sources séparées. A nouveau, le comportement algorithmique est cohérentpuisqu’il s’agit en quelque sorte de trois sources mixées. Or, lors de l’appel de l’algorithme,nous lui suggérons qu’il n’y a que deux sources. Le bruit va donc être concentré sur la sourcequi lui est moins indépendante. Une amélioration possible serait de traiter dans le cas général lemixage de multisources. Ceci pourrait s’appliquer au traitement du bruit. Aussi, si on disposaitde données sur le support d’enregistrement, nous pourrions traiter le bruit via un filtrage.

32. Pour autant que le bruit et le signal ne soient pas gaussiens tous les deux, comme vu au point 3.1.1

48

Page 49: Blind Sources Separation - Séparation de Sources à l'Aveugle

Mixed images Recovered images

Blind Source Separation for options : − normalisation = mean − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 21 – Application de l’algorithme ICA à une même image altérée de deux niveaux debruit distincts.

Mixed imagesRecovered images

(quality: 1.8888 & 2.4713) Sources

Blind Source Separation for options : − Artificial case − normalisation = normA − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 22 – Application de l’algorithme ICA à deux mixages bruités.

3.6.6 Situation réelle

A défaut de moyen logistique pour créer des situations sonores, nous présentons ici un résultatobtenu dans le cas de photographies prises d’un document altéré d’un reflet. La situation estreprise à la figure 23. On constate que la source du reflet est bien séparée. Celle du documentaussi, mais de moinre qualité. On observe un halo résiduel du reflet. On peut supposer une

49

Page 50: Blind Sources Separation - Séparation de Sources à l'Aveugle

non-uniformité du reflet sur les mixages 33 à l’origine de cette légère imperfection du résultat.

Mixed images Recovered images

Blind Source Separation for options : − normalisation = mean − decorrolation = sym − negentropy function = tanh − Default process for RGB images −

Figure 23 – Application de l’algorithme ICA à deux photographies d’un document altéré d’unreflet.

33. On peut le constater sur le mixage supérieur, dans le reflet de la lampe.

50

Page 51: Blind Sources Separation - Séparation de Sources à l'Aveugle

4 Interface utilisateur BSS.m

Dans cette section, nous présentons la fonction Matlab BSS.m 34 servant d’interface utilisateur.Cette fonction a été implémentée par nos soins, suivant un cahier des charges 35 précis quant àson emploi. C’est ce que nous détaillerons dans un premier temps. Ensuite, notre fonction per-met d’appliquer au choix deux types de séparation de sources à l’aveugle : soit selon l’algorithmede détection de contours, soit selon l’algorithme ICA. Nous comparerons donc qualitativementles résultats obtenus par ces deux algorithmes distincts à partir de situations communes. Enfin,nous suggèrerons des pistes d’amélioration de BSS.m.

4.1 Critères de l’interfaceDès le départ, nous nous sommes efforcés d’implémenter une fonction simple à utiliser afind’appliquer un procédé de séparation de sources à l’aveugle. Nous souhaitions que l’utilisateurintervienne le moins possible quant à son emploi. C’est pourquoi, BSS.m se charge elle-mêmede l’importation des fichiers et de leur traitement.

Le traitement peut être aisément nuancé par l’utilisateur, via un panel d’options détaillés dansle "help" de la fonction. Cela permet à l’utilisateur d’obtenir un meilleur résultat selon la situa-tion qu’il soumet, en spécifiant l’une ou l’autre option disponible. Aussi, les explications de lehelp sont illustrées par divers exemples d’appel de BSS.m.

L’interface renvoie à l’utilisateur les tenseurs en adéquation à ses entrées et options, tout enaffichant la situation soumise et le résultat de l’algorithme de séparation, avec un résumé desoptions utilisées. Aussi, le help donne quelques lignes d’exemple de code à écrire dans un scriptpour enregistrer facilement les résultats obtenus.

Enfin, la fonction a été conçue de manière robuste, en déclenchant une erreur descriptive en casd’anomalie compromettant le bon fonctionnement de l’interface ou/et de l’algorithme. Sinon,la fonction ignore les erreurs bénignes dues à la distraction de l’utilisateur, en exécutant lesparamètres définis par défaut.

4.2 Comparaison Edge Detection et ICAIci, nous allons faire une brève comparaison entre les résultats obtenus avec chacunes desméthodes. Nous ne reprenons dans le tableau 13 que les éléments pertinents à comparer.Par faute de moyens logistiques, nous ne sommes pas à même de présenter des résulats pourles sons pour les Cas bruités et Cas Non-Uniformes.

Détection de contour ICA

1. Cas linéaires

34. BSS est l’acronyme de Blind Source Separation35. Voir annexe A

51

Page 52: Blind Sources Separation - Séparation de Sources à l'Aveugle

Détection de contour ICA• Images Les méthodes EdgeDetection et

EdgeDetectionTir nécessitent quel’écart entre les deux coefficients demixages soient supérieurs à 0.05.

Plus de difficultés avec la normalisationdes couleurs.

→ Qualité moyenne 36 selon le critère :3.7859

→ Qualité moyenne selon le critère :3.5582

• Sons Les sorties sont de meilleure qualité. Temps d’exécution plus rapide.

→ Qualité moyenne 37 selon le critère :environ 14

→ Qualité moyenne selon le critère :environ 4

2. Cas Non-Uniformes

• Images Ne gère pas du tout les cas qui nesont pas une combinaison linéaire dessources.

La non uniformité n’est pas un obs-tacle notable pour fastica, bien quela qualité des images en soit quelquepeu compromise : on observe un résidudes zones hétérogènes dû au fait que lamatrice de démixage est calculée pourune opacité moyenne du reflet.

• Sons / /

3. Cas Bruités

• Images N’est pas capable d’enlever le bruit desimages mixées.

fastica est capable de traiter cette si-tuations. Soit :– Deux sources qui représentent unemême image avec un taux de bruitdifférent. Alors, fastica renvoie uneimage avec une composée du bruit etl’image débruitée.

– Deux sources qui représentent desmixages d’images différentes, alorsfastica a besoin d’une troisièmesource pour pouvoir éliminer le bruitdes sorties et renvoyer les photos re-cherchées.

• Sons / /

4. Généralités

36. Basée sur 3 mixages à partir de 6 images sources prises 2 par 237. Basée sur 8 mixages à partir de 4 fichiers sources combinés de diverses manières.

52

Page 53: Blind Sources Separation - Séparation de Sources à l'Aveugle

Détection de contour ICA• Images Meilleure qualité globale des sorties se-

lon le critère de qualitéTemps d’exécution notablement plusrapide.

Table 13: Tableau comparatif de nos méthodes pour iso-ler deux signaux sources.

4.3 Perspectives d’améliorationBien que BSS.m présente les qualités essentielles à toute interface utilisateur, il est tout à faitpossible de l’améliorer. Les améliorations suggérées sont entre autres dues à des méconnais-sances de toutes les opportunités fonctionnelles offertes par Matlab.

L’interface ne supporte que trois types de fichiers : .wav, .jpg et .png. Même si ces formatssont assez courants et qu’en plus il n’est pas difficile de convertir un son ou une image en l’unde ces formats, il serait intéressant d’étendre le nombre de formats supportables.

Les images sont importées en format uint8 38, ce qui limite la granularité du résultat. Il fau-drait tenter d’importer les images avec une granularité plus fine 39. Cette possibilité pourraitêtre conditionnelle, demeurant un choix de l’utilisateur.

Les sons soumis doivent être monophoniques 40. Bien que cela soit cohérent selon notre problé-matique, l’interface devrait être capable de supporter des fichiers sons stéréo 41. Dans un telcas, l’interface convertirait le fichier son stéréo en mono.

La gestion des options est très simpliste (beaucoup de if et de else). Il est certainement possibled’améliorer la vérification des options au moyen de variables booléennes qui seraient définies audébut de l’implémentation de l’interface. Cela diminuerait significativement le nombre d’opé-rations, puisque pour l’instant - il faut se l’avouer - bon nombre sont récurrentes en ce quiconcerne la gestion des options. Par ailleurs, nous n’avons pas exploré les possibilités offertespar varargin de Matlab.

Certaines opérations sont toujours réalisées alors qu’elles ne sont pas toujours nécessaires, ty-piquement l’aplatissement d’une matrice en vecteur et vice-versa. Cette situation demeure carl’alternative serait de poser une conditionnelle qui elle-même consiste en une opération. Parailleurs, les conditionnelles sont généralement traitées par des if. Or, il est possible de lestraiter avec switch-case, par exemple. Il faudrait établir les avantages et inconvénients desdifférents traitements conditionnels possibles avec Matlab. Enfin, l’espace mémoire n’est pastoujours des mieux utilisé. Ceci est également dû au fait que certaines opérations sont effec-tuées alors qu’elles ne sont pas nécessaires, comme la mise en mémoire d’un vecteur d’originenécessaire à certaines options mais pas toutes.

Ultimement, on pourrait remettre en question le choix du langage Matlab et envisager l’utili-sation du langage C par exemple. Aussi, l’interface pourrait être implémentée graphiquement,avec des facilités telles que le “presser-glisser” des fichiers, avec des menus déroulant pour lepanel d’options.

38. 8 bits39. eg. uint16, 16 bits40. Son enregistré via un unique canal.41. Son enregistré via deux canaux

53

Page 54: Blind Sources Separation - Séparation de Sources à l'Aveugle

Conclusion

Nous avons développé deux algorithmes pour séparer deux fichiers audio ou image, en nousbasant sur un modèle de mélange linéaire, homogène et constant, incapable de déterminerl’amplitude exacte et l’ordre des signaux de sortie.

La première méthode est basée sur la notion de gradient calculé à l’aide de filtres spécifiques etpermettant de détecter des contours. On a cherché à minimiser le nombre de contours communsentre des combinaisons linéaires bien choisies des signaux d’entrée. Si cela semble intuitif pourdes images, c’est un peu plus surprenant pour le son et bien que nous ayons trouvé des élémentsde justification, il faut reconnaître que la détection de contour sur les sons reste une heuristiqueefficace. Plusieurs seuils - comme celui de la détection de contour - ont été déterminés relative-ment arbitrairement par essais-erreurs.

La deuxième méthode développée est l’algorithme fast-ICA, qui repose sur une théorie mathé-matique plus étoffée et pour lequel nous nous sommes à quelques reprises laissé guider par lalittérature sur le sujet. Celui-ci garantit une robustesse statistique aux outliers, offre une conver-gence rapide de type Newton-Raphson et garantit la convergence vers les sources si elles ne sontpas gaussiennes. L’indétermination d’amplitude intrinsèque au modèle a mené à plusieurs mé-thodes de normalisation post-ICA avec chacune sa spécificité. Le traitement d’images couleurspeut aussi se faire de plusieurs manières différentes, s’ajoutant au nombre de possibilités totales.

Au final les méthodes de détection de contours se révèlent les plus précises dans les cas audiorespectant notre modèle de mixage et aussi bonnes que les algorithmes de type fast-ICA pourles images. Elles sont par contre rapidement mises en défaut quand les hypothèses du modèlesont bafouées et leur temps de calcul peut devenir dérangeant quand la taille des entrées aug-mente, particulièrement pour la méthode analytique sur les sons. Fast-ICA peut par contrerelativement bien s’en sortir sur des cas non-linéaires ou non homogènes, ainsi que sur unepanoplie de cas limites que nous avons pu tester.

La fonction BSS.m respecte la majorité des engagements du cahier des charges et permet à unutilisateur de soumettre deux fichiers audio ou image sans importation préalable et d’obtenir lesrésultats de la séparation. On regrettera cependant que notre algorithme ne soit pas capable dedétecter lui-même la meilleure combinaison d’options et de méthodes à utiliser, bien que nousayons émis plusieurs recommandations en fonction des cas traités. L’oreille et l’oeil humainsrestent les ultimes juges de la qualité de nos sorties.

54

Page 55: Blind Sources Separation - Séparation de Sources à l'Aveugle

Références

Ouvrage de référence[1] Bellaïche, Philippe, Les secrets de l’image vidéo, 7e édition, Eyrolles, Paris, 2009.[2] Watkins, C., Sadun, A., Marenka, S.,Modern Image Processing : warping, morphing,

and classical techniques, Academic Press Professional, London, 1993.[3] Hyvärinen, A., Karhunen, J., Oja, E., Independent Component Analysis, John Wiley

& Sons Inc, New York, 2001.

Sources Internet

[4] Hyvärinen, A., Erkki, O., Independent Component Analysis : Algorithms and Appli-cations, disponible sur l’url : http://mlsp.cs.cmu.edu/courses/fall2012/lectures/ICA_Hyvarinen.pdf, consulté le 3/03/2013.

[5] Anonyme, Morphologie Mathématique, disponible sur l’url : http://fr.wikipedia.org/wiki/Morphologie_math%C3%A9matique, consulté le 3/03/2013.

[6] Anonyme, traitement d’images, disponible sur l’url : http://fr.wikipedia.org/wiki/Traitement_d%27images, consulté le 3/03/2013.

[7] Stone, J. V., Independent Component Analysis : A Tutorial Introduction, disponiblesur l’url : http://books.google.be/books?id=P0rROE-WFCwC&pg=PA129&dq=ICA0+ans+pca&hl=fr&sa=X&ei=mQshUb6WGoeF4gT_tICIDQ&ved=0CC0Q6AEwAA#v=onepage&q=ICA%20ans%20pca&f=false, consulté le 3/03/2013.

[8] Davies, M., James, C., Abdallah, S., Plumbley, M., Independent Component Ana-lysis and Signal Separation, disponible sur l’url : http://books.google.be/books?id=yaBiwMMLpE8C&pg=PA105&dq=iterative+method+ICA+component+analysis&hl=fr&sa=X&ei=fBEhUdafKYLStQbi-YD4Cg&ved=0CC0Q6AEwAA#v=onepage&q&f=false, consulté le3/03/2013.

[9] Davies, M., James, C., Abdallah, S., Plumbley, M., Independent Component Ana-lysis (ICA) and Blind Source Separation (BSS : package Matlab, disponible sur l’url :http://research.ics.aalto.fi/ica/fastica/, consulté le 3/03/2013.

[10] Ritz, E., Marszal,T., Epaisseur et localisation des contours des detecteurspar derivation (Sobel, Prewitt, Roberts) ou par gradient morphologique., disponiblesur l’url : http://www.tsi.telecom-paristech.fr/pages/enseignement/ressources/beti/localisation_et_epaisseur/index.html, consulté le 15/04/2013.

[11] Quinton, M., Lefranc, M., Comparaison des filtres de débruitage, disponiblesur l’url : http://www.tsi.telecom-paristech.fr/pages/enseignement/ressources/beti/debruitage/debruitage.html consulté le 16/04/2013.

[12] Anonyme, Détection de contour, disponible sur l’url : http://bnazarian.free.fr/MyUploads/IN_GBM_04_CONTOURS.PDF consulté le 14/04/2013.

[13] Ouidja, D., Principe du maximum et méthode de tir, disponible sur l’url : http://www.ummto.dz/IMG/pdf/memoire_final.pdf consulté le 23/04/2013.

[14] University of Helsinki, Faculty of Science, Aapo Hyvärinen : Publications -The FastICA algorithm, disponible sur l’url : http://www.cs.helsinki.fi/u/ahyvarin/papers/fastica.shtml, consulté le 30/004/2013.

55

Page 56: Blind Sources Separation - Séparation de Sources à l'Aveugle

AnnexesA Cahier des charges

Contexte

Deux situations sont à traiter :– La photographie d’un document illisible à cause d’un reflet dû à une vitre située entre ledocument et le téléobjectif. Deux photographies sont effectuées au même endroit selon lemême angle à des instants différents.

– L’écoute d’une conversation téléphonique incompréhensible à cause de la musique régnante.Deux microphones sont placés dans la pièce où la musique et un interlocuteur sont présentsphysiquement.

Les signaux observés à traiter sont discrets et représentés par les vecteurs x1 = [x11x12 . . . x1n],x2 = [x21x22 . . . x2n] dont on veut extraire deux signaux sources x1 et x2 de longueur n égale-

ment. Les matrices S et X sont définies par S =

s1

s2

et X =

x1

x2

. On suppose un mixage

linéaire constant : X = AS, A ∈ R2×2. Dans le cas audio on suppose un déphasage temporelnul entre x1 et x2. On cherche donc une matrice W ∈ R2×2 ≈ A−1 telle que S ≈ WX.

Version

5/02/2012 1. Objectifs

Image : On souhaite pouvoir lire le document.

Audio : On souhaite comprendre la conversation téléphonique.

10/03/2013 2. Comportement de la solution algorithmique

Notre programme se hiérarchisera en deux parties.

La première sera l’algorithme de travail qui effectuera la séparation des signauxde sources à partir d’entrées vectorielles (sons) ou matricielles (images).

La deuxième consiste en une fonction de plus haut niveau qui permettra à l’uti-lisateur de fournir directement les fichiers audio ou visuels de format spécifiquecorrespondant aux mélanges de données.

A. UtilisateurLe programme est capable de détecter si l’entrée est un fichier image ou audio.

Image :

56

Page 57: Blind Sources Separation - Séparation de Sources à l'Aveugle

Version

Entrées : 2 fichiers JPG couleur ou noir et blanc.

Sorties : 2 fichiers JPG couleur ou noir et blanc selon l’entrée et correspondant àl’image de fond et au reflet.

Audio :

Entrées : 2 fichiers audio en format WAV-mono dont l’origine des temps coïncide.Les durées temporelles et fréquences d’échantillonnage peuvent par contre être dif-férentes.

Sorties : 2 fichiers audio en format WAV-mono, audibles, de durées correspondantà la durée du signal d’entrée le plus court. La fréquence d’échantillonnage sera laplus élevée des deux entrées. Les deux fichiers correspondront au bruit de fond et àla conversation d’intérêt.

B. Algorithme principalImage :

Entrée : Noir et blanc : 2 matrices m× n. Couleur : 2 matrices m× n× 3. Dans lesdeux cas les entrées sont des matrices dont les éléments ∈ [0, 255].

Sortie : Noir et blanc : 2 matrices m×n correspondant aux signaux sources séparés.Couleur : 2 matrices m× n× 3 correspondant aux signaux source séparés.

Dans les deux cas les sorties sont des matrices d’éléments ∈ [0, 255], dont lesmoyennes des pixels seront soit fixées à la moyenne de l’ensemble des matrices d’en-trées ou simplement calculées en prenant en compte que la somme des élémentsd’une ligne de A vaut 1. L’ordre des signaux extraits renvoyés en sortie ne peut pasêtre fixé a priori (reflet ↔ image de fond).

On renvoie également la matrice de mixage approchée A ∈ R2×2 et une estimationde son inverse W .

Audio :

Entrée : 2 vecteurs de même longueur n correspondant aux signaux mixés.

Sortie : 2 vecteurs s1 et s2 de longueur n correspondant aux signaux sources séparés.

On renvoie également la matrice de mixage approchée A ∈ R2×2 et une estimationde son inverse W .

14/04/2013 3. Evaluation de la méthode

Image :

- Produire des exemples par superposition d’images avec somme d’opacités unitaire.

57

Page 58: Blind Sources Separation - Séparation de Sources à l'Aveugle

Version

- Observer le comportement de l’algorithme si l’opacité du reflet n’est pas homogène.

- Observer le comportement de l’algorithme si les images sources présentent certainessimilitudes.

Audio 42 :

- Observer le comportement de l’algorithme si l’intensité de la musique varie aucours de l’enregistrement.

- Observer le comportement de l’algorithme si un bruit supplémentaire s’ajoute à asituation (bruit court [eg : un bic qui tombe] ou long [eg : des travaux dans la rueproche]).

Audio et Visuel 43 :

- Evaluation du lien entre la norme de la différence de 2 signaux (sources ou/etrenvoyés) et leur niveau de similitude [évaluation qualitative], dans le but d’établirun critère supplémentaire d’évaluation de la solution renvoyée.

- Evaluer au moyen de diverses opérations mathématiques l’écart entre les signauxrenvoyés et les signaux-sources (par rapport aux couleurs, à l’amplitude, à la cova-riance, à la moyenne, etc) et établir une inférence sur le comportement de l’algo-rithme.

- A partir des différentes expériences, identifier des critères qui permettraient depeaufiner le résultat renvoyé par l’algorithme.

- Exécuter l’algorithme itérativement (prendre son résultat comme entrée) afin d’ob-server l’évolution du résultat.

- Evaluer le comportement de l’algorithme lorsqu’il y a plus de deux signaux sources.

5/02/2013 4. Performance de la solution

Complexité temporelle :

On définit la taille totale d’une entrée comme étant la somme des nombres d’élé-ments dans chaque vecteur ou matrice représentant respectivement le son ou l’imagedonné en argument. Nous espérons une complexité O(n2) et surtout un temps d’exé-cution de l’ordre de la minute sur une machine normale (type ordinateur portabled’étudiant).

Robustesse :

42. Non réalisés, faute de moyen logistique.43. Non réalisés, car jugés peu utiles par rapport aux notions théoriques employées pour élaborer les solutions.

58

Page 59: Blind Sources Separation - Séparation de Sources à l'Aveugle

Version

Retourne une erreur descriptive qui stoppe l’exécution de l’algorithme si l’utilisateurne respecte pas les spécifications de l’implémentation. Si l’algorithme au cours deson exécution ne converge pas vers une solution, il se stoppera en affichant une erreurdescriptive.

3 Utilisation :

Utilisation simple, ne nécessitant aucune connaissance de l’algorithme employé.L‘utilisateur doit uniquement soumettre à l’implémentation des fichiers en adéqua-tion avec les spécifications d’utilisation.

59

Page 60: Blind Sources Separation - Séparation de Sources à l'Aveugle

B Maximisation du kurtosis

On revient ici sur une autre mesure possible de la non-gaussianité, abordée au point 3.1.2. Lekurtosis d’une variable aléatoire x se définit généralement par :

k(x) = E[x4]− 3(E[x2])2. (37)

Cette grandeur est une mesure de l’aplatissement d’une distribution, du poids relatif des queuespar rapport au centre de masse. Un kurtosis positif indique une distribution pointue ("sur-gaussienne") alors qu’un kurtosis négatif est typique des distributions plus plates et uniformes("sous-gaussiennes"), comme on peut le voir sur la figure 24.

Figure 24 – Exemples de kurtosis pour quelques distributions symétriques.

La caractéristique la plus intéressante de cette grandeur est qu’elle vaut zéro pour une variablealéatoire gaussienne et est différente de zéro pour toutes les autres distributions, à de raresexceptions près. On vérifie aisément les propriétés suivantes, pour α ∈ R, x et y deux v.a.indépendantes :

k(αx) = α4k(x)k(x+ y) = k(x) + k(y)

(38)

où la deuxième égalité n’est valable que si les deux v.a. ont une moyenne nulle. Le kurtosispouvant être positif ou négatif, on pourrait se fixer comme critère de non-gaussianité pournos sorties yi = wT

i x = zTi s (où comme dans (7) on a posé zi = ATwi) la maximisation de|k(yi)| = |∑n

j=1 z4ijk(sj)|, sous la contrainte que V ar(yi) = 1, pour i = 1, . . . , n. En utilisant

les propriétés énoncées dans (38), les relations similaires pour la variance d’une somme dev.a. indépendantes et le fait que les sources ont une variance unité, on obtient le problèmed’optimisation suivant pour chaque signal de sortie yi, en omettant l’indice i :

maxz

∣∣∣z41k(s1) + z4

2k(s2) + · · ·+ z4nk(sn)

∣∣∣ (39)

t.q. V ar(y) = z21 + z2

2 + · · ·+ z2n = 1. (40)

Ce critère présente des avantages et des inconvénients :

60

Page 61: Blind Sources Separation - Séparation de Sources à l'Aveugle

– simplicité numérique : le kurtosis est facile à calculer par les estimateurs classiques des2ème et 4ème moment d’échantillon

– convergence assurée : on peut montrer (voir [3]), sur base de la théorie de l’optimisationconvexe, que le problème (40) admet 2n maxima locaux atteints pour des vecteur zi de laforme zi = [0, · · · , 0,±1, 0, · · · , 0], c’est-à-dire si et seulement si yi est égal à une des sourcesde départ, au signe près et normalisée à variance unité. On fait seulement l’hypothèse que∀i, k(si) 6= 0, ce qui est presque toujours le cas si les sources ne sont pas gaussiennes. Cerésultat s’interprète géométriquement(voir figures 25) dans R2, où on voit bien que les maximaseront obtenus aux points de tangence entre le cercle unité et les courbes de niveau de lafonction objectif. On a donc par cette méthode l’assurance théorique de tomber sur les bonnessources, au signe près.

– manque de robustesse : le calcul du kurtosis est très sensible aux données aberrantes("outliers"). Supposons par exemple disposer de n observations d’une v.a. x : [x1, . . . , xn], devariance unité, comprenant un outlier xout. L’estimateur du kurtosis basé sur cet échantillonest borné inférieurement par une valeur qui peut n’être absolument pas représentative de ladistribution de x : k(x) = 1

n

∑ni=1 x

4i−3 ≥ x4

out

n−3. Si n = 500, x ∼ N (0, 1) et xout = 7, on peut

dire de l’estimateur ˆk(x), qui devrait être proche de 0, que ˆk(x) ≥ 1.802. Par comparaison,le kurtosis calculé par Matlab d’un échantillon de taille identique issu d’une distributionuniforme (rand),et donc fortement sous-gaussienne, donne typiquement une valeur d’à peine−1.2.

61

Page 62: Blind Sources Separation - Séparation de Sources à l'Aveugle

Espace d’optimisation du kurtosis d’un vecteur aléatoire de variance unité

z1

z 2−1 −0.5 0 0.5 1

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

(a) Fonction objectif |z41 + 2z2

2 | correspondant à k(s1) = 1, k(s2) = 2.

Espace d’optimisation du kurtosis d’un vecteur aléatoire de variance unité

z1

z 2

−2.5 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 2.5−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

(b) Fonction objectif |z41 − 2z2

2 | correspondant à k(s1) = 1, k(s2) = −2.

Figure 25 – Optimisation de |k(yi)| sous la contrainte V ar(yi) = ‖z‖ = 1 dans l’espace (z1, z2),pour des kurtosis des sources de signes égaux ou opposés. Les maxima locaux sont atteints en(±1, 0) et (0,±1).

Nous fiant à la littérature sur le sujet (principalement [3], [4]), nous n’avons pas cherché à dé-velopper d’algorithmes utilisant le kurtosis, réputés trop peu robustes aux outliers. Nous noussommes donc concentrés sur une deuxième manière de calculer la gaussianité : l’entropie et lanéguentropie.

62

Page 63: Blind Sources Separation - Séparation de Sources à l'Aveugle

C Options implémentées pour l’algorithme ICA

C.1 RGB component-by-componentDétails au point 3.3.1

1 f u n c t i o n [Y1 Y2 fscom ] = BSS(File1 ,File2 ,options ,A)2 [...]3 % process4 f o r i = 1 : s i z e (X1 ,2)56 [Y,A,W] = fastica ([ X1(:,i) ’;X2(:,i) ’],decorrOpt , negentfunction );78 i f i == 19

10 Y1 (: ,1) = Y(1 ,:) ’;11 Y2 (: ,1) = Y(2 ,:) ’;12 tempR1 = Y1 (: ,1);1314 % Sorting15 e l s e1617 corr1 = abs (corr(Y(1 ,:) ’,tempR1 )) ;18 corr2 = abs (corr(Y(2 ,:) ’,tempR1 )) ;19 % color vector of highest correlation with R1 assigned to first20 % image . That of minimum correlation assigned to second image .21 [~,I] = min([ corr1 , corr2 ]) ;2223 Y1(:,i) = Y(mod(I ,2) +1 ,:);24 Y2(:,i) = Y(I ,:);25 [...]26 end27 [...]28 end29 [...]

Listing 4 – Application de l’algorithme ICA aux composantes RGB des mixtures à la ligne6. Ceci se fait itérativement puisque size(X1 2) vaut 3 dans le cas d’un RGB component-by-component. Le tri des composantes séparées est effectué de la ligne 1 à 24 : tempR1 enregistrela première composante rouge ; corrj est la valeur de corrélation entre tempR1 et la j-ièmecomposante verte ou bleue suivant que j vaille 2 ou 3. Le tri est effectué aux lignes 23 et 24selon le minimum de corrélation calculé à la ligne 21.

C.2 Noir et blanc vers RGB

1 f u n c t i o n [Y1 Y2 fscom ] = BSS(File1 ,File2 ,options ,A)2 [...]3 X1orig = X1;4 X2orig = X2;5 [...]6 i f narg in > 2 && sum( strcmpi (options ,’bw2rgb ’)) && strcmp (kind ,’img ’)7 [...]8 X1 = X1 (:);9 X2 = X2 (:);

1011 X1 = reshape (X1 , sizeImg );12 X2 = reshape (X2 , sizeImg );1314 X1 = rgb2gray ( uint8 (X1)) ;15 X2 = rgb2gray ( uint8 (X2)) ;1617 X1 = X1 (:);18 X2 = X2 (:);

63

Page 64: Blind Sources Separation - Séparation de Sources à l'Aveugle

19 end20 [...]21 % process22 f o r i = 1 : s i z e (X1 ,2)23 [Y,A,W] = fastica ([ X1(:,i) ’;X2(:,i) ’],decorrOpt , negentfunction );24 [...]25 end26 [ Y1out Y2out ] = normalisation (X1orig ,X2orig ,A,W, normOpt );27 % output28 X1 = X1orig ;29 X2 = X2orig ;30 Y1 = Y1out ;31 Y2 = Y2out ;32 end33 [...]

Listing 5 – L’option ’bw2rgb’ applique le traitement “Noir et blanc vers RGB” (cf. point 3.3.1).Les mixtures RGB sont conservées par X1orig et X2orig. Les mixtures X1 et X2 sont modifiéesde la ligne 8 à 18 afin de pouvoir appliquer le traitement “Noir et blanc” à la ligne 23 où size(X12) vaut 1 dans ce cas. C’est lors de la normalisation à la ligne 26 que la transformation A estappliquée à X1orig et X2orig. Afin de bien avoir toutes les images en couleurs les outputs sontbien assignés de la ligne 28 à 31.

C.3 RGB all-in-one

1 f u n c t i o n [Y1 Y2 fscom ] = BSS(File1 ,File2 ,options ,A)2 [...]3 i f narg in > 2 && sum( strcmpi (options ,’flattening ’) + strcmpi (options ,’sample ’))4 [...]5 X1 = X1 (:);6 X2 = X2 (:);7 end8 [...]9 % process

10 f o r i = 1 : s i z e (X1 ,2)1112 [Y,A,W] = fastica ([ X1(:,i) ’;X2(:,i) ’],decorrOpt , negentfunction );13 [...]14 end15 [...]16 Y1 = reshape (Y1 (:) ,sizeImg );17 Y2 = reshape (Y2 (:) ,sizeImg );18 [...]

Listing 6 – L’option ’flattening’ applique le traitement “RGB all-in-one” (cf. point 3.3.1).Aplatissement des mixtures RGB aux lignes 5 et 6. L’algorithme ICA est appliqué une foispuisque size(X1 2) vaut 1. Les sources séparées sont sous forme vectorielle ; elles sont reforméesselon des matrices RGB aux dimensions appropriées aux lignes 16 et 17.

C.4 Normalisation de la matrice A

1 f u n c t i o n [Y1 Y2] = normalisation (X1 ,X2 ,A,W,KIND)2 [...]3 case {’normA ’}45 Anorm = abs (A) ;6 Anorm = Anorm ./( sum(Anorm ,2)*ones (1 ,2) ) ;7 W = inv ( Anorm ) ;89 Y1 = W(1 ,1)*X1 + W(1 ,2)*X2 ;

64

Page 65: Blind Sources Separation - Séparation de Sources à l'Aveugle

10 Y2 = W(2 ,1)*X1 + W(2 ,2)*X2 ;11 [...]

Listing 7 – L’option ’normA’ retourne des sources séparées et normalisées selon la normalisationde la matrice A issue du traitemen (voir point 3.3.3).

C.5 Moyenne des mixtures

1 f u n c t i o n [Y1 Y2] = normalisation (X1 ,X2 ,A,W,KIND)2 [...]3 case {’mean ’}45 lim = s i z e (X1);67 Y1 = z e r o s (lim);8 Y2 = z e r o s (lim);9

10 f o r i = 1 : s i z e (X1 ,2)1112 Y1(:,i) = W(1 ,1)*X1(:,i) + W(1 ,2)*X2(:,i) ;13 Y2(:,i) = W(2 ,1)*X1(:,i) + W(2 ,2)*X2(:,i) ;1415 meanX = mean([mean(X1(:,i)), mean(X2(:,i)) ]);16 m1 = mean(Y1(:,i));17 m2 = mean(Y2(:,i));18 Y1(:,i) = Y1(:,i)* meanX /m1 ;19 Y2(:,i) = Y2(:,i)* meanX /m2 ;2021 end22 [...]

Listing 8 – L’option ’mean’ exécute la normalisation des résultats du traitement d’images parla moyenne des mixtures (voir point 3.3.3). La boucle for applique la normalisation composantepar composante. De fait size(X1 2) vaut 1 pour les images converties en niveaux de gris et 3pour celles en RGB. Par exemple dans le cas RGB : le rouge des résultats est normalisé auxlignes 18 et 19 selon la moyenne de rouge présente dans les deux mixtures calculée à la ligne15.

C.6 Normalisation des résultats son

1 f u n c t i o n [Y1 Y2] = normalisation (X1 ,X2 ,A,W,KIND)2 [...]3 case {’sound ’}45 Y1 = W(1 ,1)*X1 + W(1 ,2)*X2 ;6 Y2 = W(2 ,1)*X1 + W(2 ,2)*X2 ;78 b = 1;9 a = -b;

1011 M1 = max(Y1) ;12 m1 = min(Y1) ;13 Y1 = (Y1 -M1)*(b-a)/(M1 -m1) +b ;1415 M2 = max(Y2) ;16 m2 = min(Y2) ;17 Y2 = (Y2 -M2)*(b-a)/(M2 -m2) +b ;18 [...]

Listing 9 – Normalisation du traitement des sons entre (−1; 1) aux lignes 13 et 17.

65

Page 66: Blind Sources Separation - Séparation de Sources à l'Aveugle

C.7 Echantillonnage des signaux

1 f u n c t i o n [Y1 Y2 fscom ] = BSS(File1 ,File2 ,options ,A)2 [...]3 [X1 ,X2 , sizeImg ] = importImage (File1 , File2 ); % class of outputs is uint8 . See importImage

for details .45 % ( optional )6 i f narg in > 2 && sum( strcmpi (options ,’flattening ’) + strcmpi (options ,’sample ’))7 [...]8 X1 = X1 (:);9 X2 = X2 (:);

10 end11 [...]12 X1orig = X1;13 X2orig = X2;14 [...]15 i f narg in > 2 && sum( strcmpi (options ,’sample ’))16 [...]17 X1 = X1 (1:+2: end);18 X2 = X2 (1:+2: end);19 end20 [...]21 % process22 f o r i = 1 : s i z e (X1 ,2)23 [Y,A,W] = fastica ([ X1(:,i) ’;X2(:,i) ’],decorrOpt , negentfunction );24 [...]25 end26 [...]27 [ Y1out Y2out ] = normalisation (X1orig ,X2orig ,A,W, normOpt );28 [...]

Listing 10 – L’option ’sample’ exécute l’échantillonnage. Dans le cas des images il faut toutd’abord aplatir les matrices RGB (si nécessaire) ce qui est fait aux lignes 8 et 9. Les mixturesoriginales sont copiées aux lignes 12 et 13. L’échantillonnage est effectué aux lignes 17 et 18.L’algorithme ICA est appliqué à la ligne 23 aux mixtures échantillonnées. La transformationobtenue est appliquées à la ligne 27 aux mixtures originales.

66

Page 67: Blind Sources Separation - Séparation de Sources à l'Aveugle

D Implémentations Matlab

D.1 Interface utilisateur et utilitairesD.1.1 BSS.m

1 %%%%2 % [Y1 ,Y2 , fscom ]= BSS(File1 ,File2 , options ) attempts to retrieve two hidden3 % sources signals [s1 s2] from two mixed signals [x1 x2] ( corresponding to4 % files File1 and File2 ) assuming the linear model X = A * S, where A is a5 % constant 2-by -2 mixing matrix . The " signals " can either be image files6 % (.png , .jpg), or sound files (. wav). The recovered outputs Y1 and Y2 will7 % then be uint8 matrices or double vectors accordingly . fscom is the common8 % sample frequency in case sounds were submitted . BSS will also plot the9 % results . See options detail below .

10 %11 % [Y1 ,Y2 , fscom ]= BSS(File1 ,File2 ,options ,A) mixes two sources signals [s1 s2]12 % ( corresponding to File1 and File2 ) with the given 2-by -2 mixing matrix A13 % : X = A * S. Then the function attempts to retrieve the two hidden14 % sources signals [s1 s2] from the two artificially mixed signals [x1 x2 ].15 % This requires ’test ’ to be contained in the options cell array (see detail below ).16 %17 % Example 1 ( sounds ):18 % % listen to recovered sources from two mixtures and plot graphs of results19 % [y1 ,y2 ,fs] = BSS(’ sound1 .wav ’,’ sound2 .wav ’) ;20 % sound (y1 ,fs) ;21 % sound (y2 ,fs) ;22 %23 % Example 2 ( pictures ) :24 % % separate color images ( outputs are not very useful since all the results25 % are plotted )26 % [Y1 ,Y2] = BSS(’mix1.jpg ’,’mix2.jpg ’) ;27 %28 % Example 3 ( pictures - artificial test)29 % [Y1 ,Y2] = BSS(’ source1 .jpg ’,’ source2 .jpg ’,{’test ’}, rand (2)) ;30 %31 % Example 4 ( record pictures result )32 % [Y1 Y2] = BSS(’mix1.jpg ’,’mix2.jpg ’);33 % imwrite (Y1 ,’ filename1 .jpg ’);34 % imwrite (Y2 ,’ filename2 .jpg ’);35 %36 % Example 5 ( record sounds result )37 % [Y1 Y2] = BSS(’mix1.wav ’,’mix2.wav ’);38 % wavwrite ( uint8 (Y1),fs ,’ filename1 .wav ’);39 % wavwrite ( uint8 (Y2),fs ,’ filename2 .wav ’);40 %41 % ------------------------------------------------------------------------42 %@PRE :43 % * File1 [ string ] is the name of the first file , an image (. wav) or a sound (. jpg or .

png).44 % * File2 [ string ] is the name of the second file , an image (. wav) or a sound (. jpg or .

png).45 % NB :46 % - File1 and File2 must both be an image or a sound , else error47 % occurs .48 % - If they do not have the same dimensions , the function uses the49 % minimum dimensions or the shortest duration for sound files .50 %51 % * ( optional ) options is a cell array containing a varying number of52 % string options in quotation marks (the order does not matter ) :53 %54 % { ARTIFICIAL MIXING AND SOURCE SEPARATION }55 % - ’test ’ means that the two files [ File1 File2 ] are the sources56 % [s1 s2 ]. BSS will produce two standard mixtures57 % [x1 x2] using mixing matrix A before executing the blind signal58 % seperation with [x1 x2 ].59 % NB : a matrix A must be given as input .60 %61 %

67

Page 68: Blind Sources Separation - Séparation de Sources à l'Aveugle

62 % { PROCESSING }63 %64 % I N D E P E N D A N T C O M P O S A N T A N A L Y S I S65 % ___________________________________________________________66 % => default process of separation67 %68 % _process_69 % - ’R-G-B’ (DEFAULT , images only) : ICA is applied component by70 % component : Red , Green and then Blue separately , assuming71 % different mixings for each color .72 % - ’sample ’ : the ICA process treats every other73 % element of the vector and then applies the result to the whole vector .74 % - ’flattening ’ ( images only) : ICA is applied to a long75 % vector resulting from the flattening of the RGB matrix (use of76 % ’sample ’ should be preferred for large data)77 % - ’bw ’ ( images only) : the images will be converted to78 % gray levels . Only black & white images will be produced .79 % - ’bw2rgb ’ ( images only) : temporarily converts the images to80 % grayscale to execute the ICA process . Results are then applied81 % to RGB images and RGB images are produced .82 % NB :83 % () only ONE choice of process for images (but it is possible84 % to combine ’sample ’ with ’bw2rgb ’ or with ’bw ’ ;85 % eg. : {’sample ’,’bw2rgb ’} OR {’sample ’,’bw ’}).86 %87 % _Negentropy function & decorrelation_88 % - ’tanh ’ OR ’exp ’ means that ICA will either use tanh () or89 % exp () in its approximation of negentropy .90 % - ’sym ’ OR ’def ’ means that the ICA process decorrelates the91 % demixing vectors using either symmetry or deflation .92 % NB :93 % () only ONE choice for the process of seperation94 % () DEFAULT execution uses {’tanh ’,’sym ’}95 %96 % { NORMALISATION }97 % - ( images only) ’mean ’ : results of ICA process are98 % normalized with respect to the mean pixel value of the mixed images .99 % - ( images only) ’normA ’ : results of ICA process are

100 % normalized according to the constraint that the sum of the101 % elements of each line of A is one102 % NB :103 % () only ONE choice for the normalisation of image results104 % () default execution for images is {’mean ’}105 % () sound result is normalized to [ -1 ,1] as usual .106 %107 %108 % E D G E D E T E C T I O N109 % ___________________________110 % - ’edge ’ uses edge detection as process of111 % separation , with rough force as default process of minimisation .112 % - ( images only) ’shoot ’ uses edge detection as process of113 % separation , with shooting method as process of minimisation .114 % - ( sounds only) ’as ’ uses edge detection as process of115 % separation , with analycal separation as process .116 %117 % * ( optional ) A is a 2-by -2 matrix as Xi = Aij * Sj118 %119 % @POST :120 % * Y1 is respectively a vector [ double ], a matrix [ uint8 ] if File1121 % is respectively a sound , an image .122 % * Y2 is respectively a vector [ double ], a matrix [ uint8 ] if File2123 % is respectively a sound , an image .124 % * ( sounds only) fscom is the sampling frequency used for reading125 % sounds .126 % ------------------------------------------------------------------------127 % Example 6 ( sounds - different options )128 % [y1 ,y2 ,fs] = BSS(’ sound1 .wav ’,’ sound2 .wav ’,{’exp ’,’sample ’}) ;129 % sound (y1 ,fs) ;130 % sound (y2 ,fs) ;131 %132 % Example 7 ( pictures - different options )133 % [Y1 ,Y2] = BSS(’mix1 ’,’mix2 ’,{’normA ’,’bw2rgb ’,’def ’}) ;134 %

68

Page 69: Blind Sources Separation - Séparation de Sources à l'Aveugle

135 % Version 12.07052013136 %%%%137 f u n c t i o n [Y1 Y2 fscom ] = BSS(File1 ,File2 ,options ,A)138 %disp139 f p r i n t f (’BSS << HELLO !\n’)140141 % #### IMPORTATION ####142143 % Extensions of File_144 [~,~, EXT1] = fileparts ( File1 );145 [~,~, EXT2] = fileparts ( File2 );146 % Possible kinds of extensions147 audio = {’.wav ’};148 image = {’.png ’,’.jpg ’};149150 optionUsed = ’’;151152 fscom = 0; % default value for images153154 % Sound or Images155 i f sum( strcmpi (EXT1 , audio )) && sum( strcmpi (EXT2 , audio ))156157 %disp158 f p r i n t f (’BSS << Files represent sounds . \n’)159160 [X1 ,X2 , fscom ] = importaudio (File1 , File2 );161 kind = ’’;162163 e l s e i f sum( strcmpi (EXT1 , image)) && sum( strcmpi (EXT2 , image))164165 %disp166 f p r i n t f (’BSS << Files represent images . \n’)167168 % black and white169 i f narg in > 2 && sum( strcmpi (options ,’bw ’)) && ...170 ~sum( strcmpi (options ,’bw2rgb ’) + strcmpi (options ,’edge ’) + strcmpi (options ,’

shoot ’) + strcmpi (options ,’as ’))171172 %disp173 f p r i n t f (’BSS << Images are converted to gray levels by the option ’’bw ’’ .\n’)174 optionUsed = strcat ( optionUsed ,’ - Images in gray levels ’);175176 [X1 ,X2 , sizeImg ] = importImage (File1 ,File2 ,’bw ’); % class of outputs is uint8 . See

importImage for details .177178 % RGB179 e l s e180181 [X1 ,X2 , sizeImg ] = importImage (File1 , File2 ); % class of outputs is uint8 . See

importImage for details .182183 % ( optional )184 i f narg in > 2 && sum( strcmpi (options ,’flattening ’) + ...185 strcmpi (options ,’sample ’)) && ...186 ~sum( strcmpi (options ,’edge ’) + strcmpi (options ,’shoot ’) + strcmpi (options ,’as ’))187188 %disp189 i f sum( strcmpi (options ,’flattening ’))190 f p r i n t f (’BSS << You requested ’’flattening ’’ as processing option for color

images . \n’);191 optionUsed = strcat ( optionUsed ,’ - processing < flattening ’);192 end193194 X1 = X1 (:);195 X2 = X2 (:);196197 end198199 end200201 kind = ’img ’;202203 e l s e

69

Page 70: Blind Sources Separation - Séparation de Sources à l'Aveugle

204 e r r o r (’BSS << Files ’’%s’’ and/or ’’%s’’ do not have allowed format (. wav OR .png/ .jpg)’,File1 , File2 );

205 end206207208 % ( optional ) Mixing sources for artificial test209 i f narg in == 4 && sum( strcmpi (options ,’test ’))210211 %disp212 f p r i n t f (’BSS << Submitted files are signal sources . Mixing done with mixing matrix A. \n’)213 optionUsed = strcat ( optionUsed ,’ - Artificial case ’);214215216 S1 = double (X1);217 S2 = double (X2);218219 % Xi = Aij * Sj220 f o r i = 1 : s i z e (X1 ,2) % counter i goes up to 1 if ’bw ’, to 3 if ’rgb ’221222 X1(:,i) = A(1 ,1) * S1(:,i) + A(1 ,2) * S2(:,i);223 X2(:,i) = A(2 ,1) * S1(:,i) + A(2 ,2) * S2(:,i);224225 end226227 end228229230231 X1 = double (X1); % conversion of mixed data for later calculation232 X2 = double (X2);233 X1orig = X1; % X1 and X2 might be modified for specific processing option ( flattening ,

bw2rgb , sample ). Originals stored in memory for later use.234 X2orig = X2;235236 %%237 %% # # # # E D G E D E T E C T I O N # # # #238 %% # # # # F A S T I C A # # # #239 %%240 %%-------------------------------------------------------------------------241 % edge242 i f narg in > 2 && ...243 sum( strcmpi (options ,’edge ’) + strcmpi (options ,’shoot ’) + strcmpi (options ,’as ’))244245 %disp246 f p r i n t f (’BSS << Processing of edges detection launched . \n’)247248 optionUsed = strcat ( optionUsed ,’ - Edge Detection ’);249 i f strcmp (kind ,’img ’)250251 X1 = uint8 (X1);252 X2 = uint8 (X2);253 X1 = reshape (X1 (:) ,sizeImg );254 X2 = reshape (X2 (:) ,sizeImg );255256 i f sum( strcmpi (options ,’shoot ’))257 %disp258 f p r i n t f (’BSS << You requested shooting method as edge detection process for color

images .\n’)259 optionUsed = strcat ( optionUsed ,’ - processing < shooting method ’);260 [Y1 ,Y2] = EdgeSeparationTir (X1 ,X2);261 e l s e262 optionUsed = strcat ( optionUsed ,’ - standard process ’);263 [Y1 ,Y2] = EdgeSeparation (X1 ,X2);264 end265266 X1 = X1orig ;267 X2 = X2orig ;268 Y1 = reshape (Y1 (:) ,[ numel (Y1 (: ,: ,1)) 3]);269 Y2 = reshape (Y2 (:) ,[ numel (Y2 (: ,: ,1)) 3]);270271 e l s e272 i f sum( strcmpi (options ,’as ’))273 %disp

70

Page 71: Blind Sources Separation - Séparation de Sources à l'Aveugle

274 f p r i n t f (’BSS << You requested analycal separation as edge detection process forsounds .\n’)

275 optionUsed = strcat ( optionUsed ,’ - processing < analycal separation ’);276 [Y1 ,Y2] = AnalyticalSeparation (X1 ,X2);277 e l s e278 optionUsed = strcat ( optionUsed ,’ - standard process ’);279 [Y1 ,Y2] = EdgeSeparationAudio (X1 ,X2);280 end281 end282 %disp283 f p r i n t f (’BSS << Processing finished . \n’);284 %%-------------------------------------------------------------------------285 % fastica286 e l s e287 optionUsed = strcat ( optionUsed ,’ - ICA ’);288 % #### OPTIONS FOR NORMALISATION ####289 i f strcmpi (kind ,’img ’)290 % potential normalisation options for images291 i f narg in > 2 && sum( strcmpi (options ,’normA ’))292 f p r i n t f (’BSS << Selected normalisation for images is ’’normA ’’. \n’);293 normOpt = ’normA ’;294 e l s e i f narg in > 2 && sum( strcmpi (options ,’normW ’))295 f p r i n t f (’BSS << Selected normalisation for images is ’’normW ’’. \n’);296 normOpt = ’normW ’;297 e l s e298 f p r i n t f (’BSS << Default normalisation for images : ’’mean ’’. \n’);299 normOpt = ’mean ’; % default300 end301302 e l s e normOpt = ’sound ’;303 end304 optionUsed = strcat ( optionUsed ,’ - normalisation = ’);305 optionUsed = strcat ( optionUsed ,[ ’ ’ normOpt ’ ’]);306307 % #### OPTIONS FOR PROCESSING ####308 % decorrelation options309 i f narg in > 2 && sum( strcmpi (options ,’def ’))310 %disp311 f p r i n t f (’BSS << Decorrelation option is deflation : ’’def ’’ \n’)312 decorrOpt = ’def ’;313 e l s e314 %disp315 f p r i n t f (’BSS << Default decorrelation option : ’’sym ’’ for symmetric \n’)316 decorrOpt = ’sym ’;317 end318 optionUsed = strcat ( optionUsed ,’ - decorrolation = ’);319 optionUsed = strcat ( optionUsed ,[ ’ ’ decorrOpt ’ ’]);320321322 % choice of approximation function for negentropy323 i f narg in > 2 && sum( strcmpi (options ,’exp ’))324 %disp325 f p r i n t f (’BSS << Selected negentropy function is exponential : ’’exp ’’\n’)326 negentfunction = ’exp ’;327 e l s e328 %disp329 f p r i n t f (’BSS << Default negentropy function : ’’tanh ’’\n’)330 negentfunction = ’tanh ’;331 end332 optionUsed = strcat ( optionUsed ,’ - negentropy function = ’);333 optionUsed = strcat ( optionUsed ,[ ’ ’ negentfunction ’ ’]);334335336 % ( optional )337 i f narg in > 2 && sum( strcmpi (options ,’bw2rgb ’)) && strcmp (kind ,’img ’)338339 %disp340 f p r i n t f (’BSS << You requested ’’bw2rgb ’’ as processing option for color images . \n’)341 optionUsed = strcat ( optionUsed ,’ - processing < bw2rgb ’);342343 X1 = X1 (:);344 X2 = X2 (:);345

71

Page 72: Blind Sources Separation - Séparation de Sources à l'Aveugle

346 X1 = reshape (X1 , sizeImg );347 X2 = reshape (X2 , sizeImg );348349 X1 = rgb2gray ( uint8 (X1)) ;350 X2 = rgb2gray ( uint8 (X2)) ;351352 X1 = X1 (:);353 X2 = X2 (:);354 end355356 i f narg in > 2 && sum( strcmpi (options ,’sample ’))357358 %disp359 f p r i n t f (’BSS << You requested ’’sample ’’ as processing option . \n’)360 optionUsed = strcat ( optionUsed ,’ - processing < sample ’);361362 X1 = X1 (1:+2: end);363 X2 = X2 (1:+2: end);364365 end366367368369370371 % #### PROCESSING ####372373 %disp374 f p r i n t f (’BSS << Processing of ICA launched . \n’)375376 % pre - allocation377 Y1 = z e r o s ( s i z e (X1));378 Y2 = z e r o s ( s i z e (X2));379 Y1out = z e r o s ( s i z e ( X1orig ));380 Y2out = z e r o s ( s i z e ( X2orig ));381382 % process383 f o r i = 1 : s i z e (X1 ,2)384385 [Y,A,W] = fastica ([ X1(:,i) ’;X2(:,i) ’],decorrOpt , negentfunction );386387 i f i == 1388389 Y1 (: ,1) = Y(1 ,:) ’;390 Y2 (: ,1) = Y(2 ,:) ’;391 tempR1 = Y1 (: ,1);392393 % Sorting394 e l s e395396 corr1 = abs (corr(Y(1 ,:) ’,tempR1 )) ;397 corr2 = abs (corr(Y(2 ,:) ’,tempR1 )) ;398 % color vector of highest correlation with R1 assigned to first399 % image . That of minimum correlation assigned to second image .400 [~,I] = min([ corr1 , corr2 ]) ;401402 Y1(:,i) = Y(mod(I ,2) +1 ,:);403 Y2(:,i) = Y(I ,:);404405406 % Permute colums of A, lines of W :407 i f I == 1408 P = [0 1; 1 0] ; % permutation matrix409 A = A * P ;410 W = P * W ;411 end412413414 end415416 % #### NORMALISATION #### prim417418

72

Page 73: Blind Sources Separation - Séparation de Sources à l'Aveugle

419420 i f s i z e (X1 ,2) > 1421422 %disp423 f p r i n t f (’BSS << processing ... results are normalised according to option ’’%s’’. \n’,

normOpt );424 [ Y1out (:,i) Y2out (:,i)] = normalisation ( X1orig (:,i),X2orig (:,i),A,W, normOpt );425426 end427428429 end430 %disp431 f p r i n t f (’BSS << Processing finished . \n’);432433 % #### NORMALISATION #### bis434 i f s i z e (X1 ,2) == 1435436437 f p r i n t f (’BSS << Results are normalised according to option ’’%s’’. \n’,normOpt );438439 [ Y1out Y2out ] = normalisation (X1orig ,X2orig ,A,W, normOpt );440441 e l s e442 optionUsed = strcat ( optionUsed ,’ - Default process for RGB images ’);443 end444445446 % output447 X1 = X1orig ;448 X2 = X2orig ;449 Y1 = Y1out ;450 Y2 = Y2out ;451 end % end choixe between edge/ica452 %%-------------------------------------------------------------------------453454455456 % #### PLOTTING ####457458 %disp459 f p r i n t f (’BSS << Plotting results . \n’);460461 Title = { ’Blind Source Separation for options :’ ; [ optionUsed ’ -’]};462463 % % ( optional ) Plot and Evaluation464 i f narg in > 2 && sum( strcmpi (options ,’test ’))465466 i f strcmp (kind ,’img ’) ,[Y1 ,Y2 ,~] = feedbackResults (S1 ,S2 ,X1 ,X2 ,Y1 ,Y2 ,Title , sizeImg );467 e l s e [Y1 ,Y2 ,~] = feedbackResults (S1 ,S2 ,X1 ,X2 ,Y1 ,Y2 , Title ); end468469470 % only plots if no artificial test was created471 e l s e472473 i f strcmp (kind ,’img ’)474475 Y1 = uint8 ( reshape (Y1 (:) ,sizeImg ));476 Y2 = uint8 ( reshape (Y2 (:) ,sizeImg ));477478 X1 = reshape (X1 (:) ,sizeImg ) ;479 X2 = reshape (X2 (:) ,sizeImg ) ;480481 f i g u r e (); % uint8 format used for display482 subp lot (2 ,2 ,1) ; imshow ( uint8 (X1) ,[]) ; t i t l e (’Mixed images ’,’Fontsize ’ ,15);483 subp lot (2 ,2 ,2) ; imshow (Y1 ,[]) ; t i t l e (’Recovered images ’,’Fontsize ’ ,15) ;484 subp lot (2 ,2 ,3) ; imshow ( uint8 (X2) ,[]) ;485 subp lot (2 ,2 ,4) ; imshow (Y2 ,[]) ;486 suptitle ( Title )487488489 e l s e490

73

Page 74: Blind Sources Separation - Séparation de Sources à l'Aveugle

491 f i g u r e ();492 subplot (2 ,2 ,1) ; p l o t (X1) ; t i t l e (’Mixed sounds ’,’Fontsize ’ ,15);493 subplot (2 ,2 ,2) ; p l o t (Y1) ; t i t l e (’Recovered sounds ’,’Fontsize ’ ,15) ;494 subplot (2 ,2 ,3) ; p l o t (X2) ;495 subplot (2 ,2 ,4) ; p l o t (Y2) ;496 suptitle ( Title )497498 end499500 end501502503 f p r i n t f (’BSS << GOODBYE !\n’)504 end

D.1.2 importImage.m

1 %%%%2 %[vim1 ,vim2 , sizeImg ] = importImage (file1 ,file2 , option ) is a function3 % converts two image files in two ( reshaped ) matrix [ uint8 ]. If the images4 %do not have the same size , the minimum size is the referenced size.5 %6 %@PRE :7 % * file1 [char] is the adress of an image file.8 % * file2 [char] is the adress of an image file.9 % * ( optional ) option [char] :

10 % - ’bw ’ means that the image must be converted to grayscale .11 %12 % @POST :13 % * vim1 is a m*1 ( reshaped ) vector [ uint8 ] OR a m*1*3 matrix [ uint8 ]14 % represents the image file [ file1 ], in respect in gray or RGB levels .15 % * vim2 is a m*1 ( reshaped ) vector [ uint8 ] OR a m*1*3 matrix [ uint8 ]16 % represents the image file [ file2 ], in respect in gray or RGB levels .17 % NB :18 % - vim_ = [R G B], where R, G and B are column - vectors in respect19 % for level of red , green and blue of the image , if option != ’bw ’.20 % - vim_ is a column vector , if option == ’bw ’.21 % * sizeImg is the common size ( dimension ) of the images .22 %23 %%%%24 f u n c t i o n [vim1 ,vim2 , sizeImg ] = importImage (file1 ,file2 , option )252627 im_1 = importdata ( file1 );28 im_2 = importdata ( file2 );2930 sizeImg = min( s i z e (im_1), s i z e (im_2));3132 mim1 = im_1 (1: sizeImg (1) ,1: sizeImg (2) ,:);33 mim2 = im_2 (1: sizeImg (1) ,1: sizeImg (2) ,:);3435 sizeImg = s i z e (mim1);3637 i f narg in == 23839 m = numel (mim1 (: ,: ,1));4041 vim1 = z e r o s (m ,3);42 vim2 = vim1;4344 % return data45 f o r i = 1 : 346 vim1 (:,i) = reshape (mim1 (:,:,i),m ,1);47 vim2 (:,i) = reshape (mim2 (:,:,i),m ,1);48 end4950 e l s e i f narg in == 3 && strcmp (option ,’bw ’)5152 mim1 = rgb2gray (mim1);53 mim2 = rgb2gray (mim2);

74

Page 75: Blind Sources Separation - Séparation de Sources à l'Aveugle

5455 sizeImg = s i z e (mim1);5657 vim1 = mim1 (:);58 vim2 = mim2 (:);5960 e l s e61 e r r o r (’importImage : Invalid arguments :%s.’,option );62 end636465 end

D.1.3 importaudio.m

1 % [Y1 ,Y2 , FScom ]= IMPORTAUDIO (SFILE1 , SFILE2 ) returns vectors y1 and y22 % corresponding to the audio data contained in the monophonic WAVE files3 % SFILE1 and SFILE2 ( SFILE1 and SFILE2 are strings in single quotation4 % marks ). Y1 and Y2 contain double - precision samples normalized to [ -1 ,1].5 % FSCOM is the common sample rate to be used for later playback :6 % FSCOM =max(fs1 ,fs2) where fs1 and fs2 are the sample rates of the input7 % signals .8 % If one recording is longer than the other it will be truncated and its9 % beginning only will be kept so that both recordings have durations equal

10 % to that of the shortest signal . Linearly interpolated data is added to11 % the audio data of lowest original sample frequency to match the fastest12 % sample frequency of the two original signals .13 %14 % [Y1 , fscom ] = IMPORTAUDIO ( SFILE1 ) only returns the audio data contained15 % in the monophonic WAVE file SFILE1 and its sampling frequency .161718 f u n c t i o n [y1 ,y2 , fscom ] = importaudio (sfile1 , sfile2 )19 [y1 , fscom ] = wavread( sfile1 ) ;20 i f min( s i z e (y1))==221 warning (’Importaudio : argincheck : File %s seems to contain stereo data , which is not

supported by this function ’,sfile1 );22 end23 i f narg in ==1 && nargout ==324 warning (’Importaudio : argincheck : only one sound file provided . Second and third output

arguments will simply correspond to sampling frequency ’);25 end2627 y2 = fscom ;28 i f narg in ==229 [y2 ,fs2] = wavread( sfile2 ) ;30 i f min( s i z e (y2))==231 warning (’Importaudio : argincheck : file %s seems to contain stereo data , which is not

supported by this function ’,sfile2 );32 end33 [y1 ,y2 , fscom ] = equalizesignals (y1 ,fscom ,y2 ,fs2) ;34 end

D.1.4 equalizesignals.m

1 %[YLONG ,YSHORT , FSCOMMON ] = EQUALIZESIGNALS (Y1 ,FS1 ,Y2 ,FS2)2 % returns vectors of the same length containing audio data to be read with3 % sample frequency FSCOMMON from audio data vectors Y1 and Y2 of possibly4 % different lengths and sampled at possibly different rates FS1 and FS2.5 % YLONG and YSHORD will correspond to the audio signals of respectively6 % longest and shortest original duration .78 f u n c t i o n [ylong ,yshort , fscommon ] = equalizesignals (y1 ,fs1 ,y2 ,fs2)9 % compare time durations

10 i f l ength (y1)/fs1 > l ength (y2)/fs2

75

Page 76: Blind Sources Separation - Séparation de Sources à l'Aveugle

11 ylong = y1 ; fslong = fs1 ;12 yshort = y2 ; fsshort = fs2 ;13 e l s e14 ylong = y2 ; fslong = fs2 ;15 yshort = y1 ; fsshort = fs1 ;16 end17 % number of samples and duration of signals18 nlong = l ength ( ylong ) ;19 dmax = nlong / fslong ;20 nshort = l ength ( yshort ) ;21 dmin = nshort / fsshort ;22 fscommon = max(fs1 ,fs2) ;2324 % In case of equal sample frequencies2526 i f fs1 == fs227 ylong = ylong (1: l ength ( yshort )) ;28 r e turn ;29 end3031 % Matching the faster sample rate:323334 % case 1: shorter signal had slower sample rate that longer signal :35 % long signal truncated and interpolation samples added to shortest signal36 i f fsshort < fslong37 retsamples = round( fslong *dmin) ; % retained samples for truncation of longer signal38 yshort = i n t e r p 1 ( l i n s p a c e (0,dmin , nshort ),yshort , l i n s p a c e (0,dmin , retsamples ),’linear ’)’ ;39 ylong = ylong (1: retsamples ) ;4041 % case 2: shorter signal with faster sample rate: short signal untouched ,42 % only beginning of long signal conserved with interpolated data added in43 % between existing samples44 e l s e45 ylong = i n t e r p 1 ( l i n s p a c e (0,dmax , nlong ),ylong , l i n s p a c e (0,dmin , nshort ),’linear ’)’ ;46 end

D.1.5 feedbackResults.m

1 %%%%2 %[ quality ] = feebackResults (S1 ,S2 ,X1 ,X2 ,Y1 ,Y2 ,sImg) is a function plots the3 %signals - source [S1 S2], mixed signals [X1 X2] and the results of process4 %[Y1 Y2 ]. Morever , this function return the quality of the process by5 % comparing the results with the source .6 %7 %@PRE :8 % * S1 is a n*1 vector represents the first signal - source .9 % * S2 is a n*1 vector represents the second signal - source .

10 % * X1 is a n*1 vector represents the first mixed signal .11 % * X2 is a n*1 vector represents the second mixed signal .12 % * Y1 is a n*1 vector represents the first result of process .13 % * Y2 is a n*1 vector represents the second result of process .14 % * Title is a cell of strings , used for suptitle ( Title ).15 % * ( optional ) sImg is a 1*n vector represents common size/ dimensions16 % of images .17 % @POST :18 % * Y1 is a n*1 vector represents the result of process nearest to S1.19 % * Y2 is a n*1 vector represents the result of process nearest to S2.20 % * quality is a 1*2 vector represents the quality of results of21 % process , in respect for the first and second sources .22 %23 %%%%24 f u n c t i o n [Y1 ,Y2 , quality ] = feedbackResults (S1 ,S2 ,X1 ,X2 ,Y1 ,Y2 ,Title ,sImg)252627 % Quality28 quality = [0 0];29 f o r i = 1 : s i z e (X1 ,2)3031 [Y,qual] = evaluateOutputs ([ S1(:,i) ’; S2(:,i) ’],[Y1(:,i) ’; Y2(:,i) ’]);

76

Page 77: Blind Sources Separation - Séparation de Sources à l'Aveugle

32 quality = quality + qual;33 Y1(:,i) = Y(1 ,:);34 Y2(:,i) = Y(2 ,:);3536 end37 quality = quality / s i z e (X1 ,2);383940 % Plot41 % <sounds42 i f narg in == 74344 f i g u r e ();45 subplot (2 ,3 ,1) ; p l o t (X1) ; t i t l e (’Mixed sounds ’,’Fontsize ’ ,15);46 subplot (2 ,3 ,2) ; p l o t (Y1) ; t i t l e ({ ’Recovered sounds ’ ; [’( quality : ’ num2str( quality (1))

’ & ’ num2str( quality (2)) ’)’] },’Fontsize ’ ,15) ;47 subplot (2 ,3 ,3) ; p l o t (S1) ; t i t l e (’Sources ’,’Fontsize ’ ,15)48 subplot (2 ,3 ,4) ; p l o t (X2) ;49 subplot (2 ,3 ,5) ; p l o t (Y2) ;50 subplot (2 ,3 ,6) ; p l o t (S2) ;51 suptitle ( Title )5253 % <images54 e l s e i f narg in == 85556 Y1 = uint8 (Y1 (:));57 Y2 = uint8 (Y2 (:));58 X1 = X1 (:);59 X2 = X2 (:);606162 Y1 = reshape (Y1 ,sImg) ;63 Y2 = reshape (Y2 ,sImg) ;64 X1 = reshape (X1 ,sImg) ;65 X2 = reshape (X2 ,sImg) ;66 S1 = reshape (S1 ,sImg) ;67 S2 = reshape (S2 ,sImg) ;6869 f i g u r e ();70 subplot (2 ,3 ,1) ; imshow ( uint8 (X1) ,[]) ; t i t l e (’Mixed images ’,’Fontsize ’ ,15);71 subplot (2 ,3 ,2) ; imshow (Y1 ,[]) ; t i t l e ({ ’Recovered images ’ ; [’( quality : ’ num2str( quality

(1)) ’ & ’ num2str( quality (2)) ’)’] },’Fontsize ’ ,15) ;72 subplot (2 ,3 ,3) ; imshow ( uint8 (S1) ,[]) ; t i t l e (’Sources ’,’Fontsize ’ ,15)73 subplot (2 ,3 ,4) ; imshow ( uint8 (X2) ,[]) ;74 subplot (2 ,3 ,5) ; imshow (Y2 ,[]) ;75 subplot (2 ,3 ,6) ; imshow ( uint8 (S2) ,[]) ;76 suptitle ( Title )7778 e l s e79 e r r o r (’feebackResults () : Number of inputs is not correct .’);80 end8182 end

D.1.6 evaluateOutputs.m

1 % [YSORTED , QUALITY ] = EVALUATEOUTPUTS (S,Y, SORTOPTION ) sorts output signals2 % in Y and evaluates their " goodness " with respect to the source signals in3 % S.4 % S is a k-by -n matrix containing k source signals of n samples each. Y5 % is a k-by -n matrix containing k recovered signals (in a possibly wrong6 % order ) YSORTED contains the rows of Y sorted so that they match the7 % source signals according to our quality criterion (see below ). QUALITY is8 % a 1-by -k row vector containing an evaluation of quality for each source9 % signal - recovered signal pair , according to the formula :

10 % quality = -log10 ( abs( cos( angle (S(i ,:) ,Ysorted (i ,:)) ) ) )11 % i = 1 ,... ,k1213 f u n c t i o n [Y, quality ] = evaluateOutputs (S,Y, sortOption )14 i f s i z e (S ,1) > s i z e (S ,2)

77

Page 78: Blind Sources Separation - Séparation de Sources à l'Aveugle

15 S = S’ ;16 end17 i f s i z e (Y ,1) > s i z e (Y ,2)18 Y = Y’ ;19 end2021 i f any( s i z e (S) ~= s i z e (Y))22 e r r o r (’ArginCheck : Number of signals and/or number of samples do not match ’);23 end24 i f narg in ==225 sortOption =’on ’;26 end2728 i f strcmpi ( sortOption ,’on ’)29 [numSigs , numSamples ] = s i z e (S) ;30 quality = z e r o s (1, numSigs ) ;31 f o r i=1: numSigs32 cand = z e r o s (1, numSigs -i+1) ;33 f o r j=i: numSigs34 cand(j-i+1) = - l og10 ( 1- cosineangle (S(i ,:) ’,Y(j ,:) ’) ) ;35 end36 [ quality (i),I] = max(cand) ; % the greater the better37 temp = Y(i ,:) ;38 Y(i ,:) = Y(I+i -1 ,:) ;39 Y(I+i -1 ,:) = temp ;40 end4142 e l s e43 quality = - l og10 (1- cosineangle (S’,Y ’)) ;44 end45464748 end4950 %Y = COSINEANGLE (V1 ,V2) returns the absolute value of the cosine of the angle51 % between V1 and V2 columnwise . V1 and V2 must have the same number j of52 % columns and A will be a 1xj row vector . V1 and V2 should not have any53 %zero - column ( angle would then be undefined , Nan returned )54 f u n c t i o n out = cosineangle (V1 ,V2)55 i f any( s i z e (V1)~= s i z e (V2))56 e r r o r (’ArginCheck : V1 and V2 must have identical sizes ’);57 end58 i f ~ strcmpi ( class (V1),class (V2))59 V1 = double (V1) ;60 V2 = double (V2) ;61 end6263 % In case vectors are very large , divide by their mean in order to avoid loss or64 % accuracy when computing the norms and dot product (s)65 i f s i z e (V1 ,1) > 1000066 V1 = V1 ./ ( ones( s i z e (V1 ,1) ,1)*mean(V1) ) ;67 V2 = V2 ./ ( ones( s i z e (V2 ,1) ,1)*mean(V2) ) ;68 end6970 norm1 = sum(V1 .^2) ;71 norm2 = sum(V2 .^2) ;72 % separate the norm products in the sqrt to avoid overflows and loss of accuracy73 out = dot (V1 ,V2)./ ( s q r t ( norm1 ).* s q r t ( norm2 )) ;74 out = min(ones( s i z e (V1 ,2) ,1)-eps , abs (out)) ;75 % min is to avoid numerical instability (cosine >1 for example ...)76 end

D.2 Détection de contoursD.2.1 EdgeSeparation.m

12 f u n c t i o n [ ImageFinale1 , ImageFinale2 ] = EdgeSeparation ( InputColor1 , InputColor2 )

78

Page 79: Blind Sources Separation - Séparation de Sources à l'Aveugle

3 % Entrees : InputColor1 et InputColor2 sont des tableaux de uint8 de taille4 % n*m*35 % Sorties : ImageFinale1 et ImageFinale2 sont des tableaux de uint8 de taille6 % n*m*37 % Affiche les mixtures (en couleur ) et les images de sortie (en8 % couleur ) pour l’ instant9

101112 AA= rgb2gray ( InputColor1 );13 BB= rgb2gray ( InputColor2 );14151617 Pas =0.005;18 MaxSoustraction =1;1920 AA= double (AA);21 BB= double (BB);22 InputColor1 = double ( InputColor1 );23 InputColor2 = double ( InputColor2 );242526 Ed1= edge1 (AA);27 Ed2= edge1 (BB);28 EdTot = double (( Ed1+Ed2) >0);293031 %ici on commence la soustraction des images mixees et le calcul des edges32 %pour estimer le moment ou il ne reste qu ’une seul image (donc les edges de33 %l’ autre image ont disparus totalement )3435 loopval = 0: Pas: MaxSoustraction ;3637 nIt= l ength ( loopval );3839 ComEdge1 = z e r o s (1, nIt) ;40 ComEdge2 = z e r o s (1, nIt) ;414243 f o r i=1: nIt44 [p]= detectedge2 (AA ,BB , loopval (i),EdTot );45 ComEdge1 (i) = p ;4647 [p2 ]= detectedge2 (BB ,AA , loopval (i),EdTot );48 ComEdge2 (i) = p2 ;49 end5051525354 % trouve le coefficient de soustraction qui separe les deux images a partir55 % de vecteur contenant les edges communs , le critere est de56 % prendre le premier point de remonte du graph57 y= d i f f ( ComEdge1 );58 Source1 =0; aa =0;59 f o r i=1: l ength (y)60 i f y(i) >1061 i f Source1 ==162 e l s e Source1 =1; aa=i;63 end64 end65 end6667 y2= d i f f ( ComEdge2 );68 a2 =0; aa2 =0;69 f o r i=1: l ength (y)70 i f y2(i) >1071 i f a2 ==172 e l s e a2 =1; aa2=i;73 end74 end75 end

79

Page 80: Blind Sources Separation - Séparation de Sources à l'Aveugle

76777879 % normalisation des sorties8081 rap1 =255/max(max(AA -(( aa)*Pas)*BB));82 imagefinal1 =(AA -(( aa)*Pas)*BB)*rap1;8384 rap2 =255/max(max((BB -(( aa2)*Pas)*AA)));85 imagefinal2 =(BB -(( aa2)*Pas)*AA)*rap2;86 % calcul des sorties en couleur87 ImageFinale1 = uint8 (( InputColor1 -(( aa)*Pas)* InputColor2 )*rap1);88 ImageFinale2 = uint8 (( InputColor2 -(( aa2)*Pas)* InputColor1 )*rap2);8990 end919293 f u n c t i o n [grad] = edge1 ( entree )94 % Calcul le gradient d’une matrice puis determine l’ existence d’edge95 % Entree : matrice n*m96 % Sortie : matrice des edges de la matrice d’entree , ne comptient que des 097 %et 19899 entree = double ( entree );

100 Mx = [ -1 0 1 ; -2 0 2 ; -1 0 1];101 My = [ 1 2 1 ; 0 0 0 ; -1 -2 -1];102103 Gx = conv2( double (Mx),entree );104 Gy = conv2( double (My),entree );105106 grad = double ( s q r t ( abs (Gx .^2) + abs (Gy .^2)));107108109 grad= double (grad >40);110111112 end113114 f u n c t i o n [ K] = detectedge2 ( A,B,c,Ed )115 % Calcul le nombre de pixel ou il y a un contour commun entre la matrice de116 % contour de A-c*B et Ed117 % Entree : A, matrices n*m, c scalaire , Ed matrice n*m118 % Sortie : K nombre de pixel ou il y a un edge commun , K scalaire119120 A= double (A);121 B= double (B);122 D=A-c*B;123 mean1 =mean(mean(A));124 mean2 =mean(mean(D));125 D=D* mean1 / mean2 ;126 % normalisation de la matrice issue de la soustraction127 D1= edge1 (D);128129 dsum= double (D1+Ed);130131 K=sum(sum(dsum >1));132133 end

D.2.2 EdgeSeparationTir.m

1 f u n c t i o n [ ImageFinale1 , ImageFinale2 ] = EdgeSeparationTir ( InputColor1 , InputColor2 )23 % Entrees : InputColor1 et InputColor2 sont des tableaux de uint8 de taille4 % n*m*35 % Sortie : ImageFinale1 et ImageFinale2 sont des tableaux de uint8 de taille6 % n*m*3789

80

Page 81: Blind Sources Separation - Séparation de Sources à l'Aveugle

10 %Les images d’ entree sont passees en noir et blanc afin d’ accelerer la11 % methode et de ne pas devoir faire une convolution en 3 dimensions . Ensuite12 %nous passons toutes nos donnees en double afin de diminuer les erreurs13 %d’ arrondis dus a un format en 8 bit14 AA= rgb2gray ( InputColor1 );15 BB= rgb2gray ( InputColor2 );16171819 Pas =0.005;20 MaxSoustraction =1;2122 AA= double (AA);23 BB= double (BB);24 InputColor1 = double ( InputColor1 );25 InputColor2 = double ( InputColor2 );262728 Ed1= edge1 (AA);29 Ed2= edge1 (BB);3031 Ed1= double (Ed1)+ double (Ed2);3233 loopval = 0: Pas: MaxSoustraction ;3435 nIt= l ength ( loopval );3637 ComEdge1 = z e r o s (1, nIt) ;38 ComEdge2 = z e r o s (1, nIt) ;3940 a=0;41 b =0.9;42 at =0;43 bt =0.9;4445 % Methode du tir pour accelerer grandement les calculs46 f o r i =1:114748 c=(a+b)/2;49 p1= detectedge2 (AA ,BB ,c+Pas , double (( Ed1+Ed2) >0));50 p2= detectedge2 (AA ,BB ,c, double (( Ed1+Ed2) >0));51 pc=p1 -p2;5253 i f pc >054 b=c;55 e l s e56 a=c;57 end5859 ct =( at+bt)/2;60 pt1= detectedge2 (BB ,AA ,ct+Pas , double (( Ed1+Ed2) >0));61 pt2= detectedge2 (BB ,AA ,ct , double (( Ed1+Ed2) >0));62 pct=pt1 -pt2;6364 i f pct >065 bt=ct;66 e l s e67 at=ct;68 end6970 end7172 % Calcul et normalisation des images de sorties73 rap1 =255/max(max(AA -((c))*BB));74 ImageFinale1Gray =(AA -((c))*BB)*rap1;7576 rap2 =255/max(max((BB -(( ct))*AA)));77 ImageFinale2Gray =(BB -(( ct))*AA)*rap2;787980 ImageFinale1 = uint8 (( InputColor1 -((c))* InputColor2 )*rap1);81 ImageFinale2 = uint8 (( InputColor2 -(( ct))* InputColor1 )*rap2);82

81

Page 82: Blind Sources Separation - Séparation de Sources à l'Aveugle

8384 end8586 f u n c t i o n [grad] = edge1 ( entree )87 % Calcul le gradient d’une matrice puis determine l’ existence de contour88 % Entree : matrice n*m89 % Sortie : matrice des contours de la matrice d’entree , ne contient que des 090 %et 19192 entree = double ( entree );93 Mx = [ -1 0 1 ; -2 0 2 ; -1 0 1];94 My = [ 1 2 1 ; 0 0 0 ; -1 -2 -1];9596 Gx = conv2( double (Mx),entree );97 Gy = conv2( double (My),entree );9899 grad = double ( s q r t ( abs (Gx .^2) + abs (Gy .^2)));

100101 grad= double (grad >40);102103104 end105106 f u n c t i o n [ K] = detectedge2 ( A,B,c,Ed )107 % Calcul le nombre de pixel ou il y a un contours commun entre la matrice de108 % contour de A-c*B et Ed109 % Entree : A et B matrices n*m, c scalaire , Ed matrice n*m booleenne110 % Sortie : K nombre de pixel ou il y a un contour commun , K scalaire111112 A= double (A);113 B= double (B);114 D=A-c*B;115 mean1 =mean(mean(A));116 mean2 =mean(mean(D));117 D=D* mean1 / mean2 ;118119 D1= edge1 (D);120121 dsum= double (D1+Ed);122123 K=sum(sum(dsum >1));124125 end

D.2.3 EdgeSeparationAudio.m

1 f u n c t i o n [ NormalisedOutput1 , NormalisedOutput2 ] = EdgeSeparationAudio ( mix1 ,mix2 )2 % entrees : audio1 et audio2 sont des vecteurs contenant du son de meme taille3 % Sorties : sort les deux vecteurs contenant le son des sons separes456 seuil =10^ -4;7 NOMBRE =6;8 n =100* NOMBRE ;9 pas =1/n;

1011 % Calcul du graphe des contours communs12 commonEdge1 = CommonEdgeCompute (mix1 ,mix2 ,seuil , NOMBRE ,n );13 commonEdge2 = CommonEdgeCompute (mix2 ,mix1 ,seuil , NOMBRE ,n );1415 commonEdgeTot =[ commonEdge1 commonEdge2 ];1617 % Choix des deux plus petits minimums locaux comme approximation de la18 % solution1920 [C2 ,I2 ]= findpeaks (- commonEdgeTot );21 CI2= sortrows ([C2 ’ I2 ’] , -1);2223 % Raffinement de l’ approximation trouvee24 [ sonfinalTot1 , sonfinalTot2 ] = RafiningDelta ( CI2 ,n,mix1 , mix2 , seuil ,NOMBRE , pas );

82

Page 83: Blind Sources Separation - Séparation de Sources à l'Aveugle

2526 % Normalisation des sorties27 NormalisedOutput1 = sonfinalTot1 /(2*max( sonfinalTot1 ));28 NormalisedOutput2 = sonfinalTot2 /(2*max( sonfinalTot2 ));2930 end3132 f u n c t i o n [ commonEdge1 ] = CommonEdgeCompute (mix1 ,mix2 ,seuil , NOMBRE ,n )33 % Calcul le nombre de contour commun du resultat de mix1 -a*mix2 pour n34 % valeurs de a reparties uniformement dans l’ intervalle [0 ,1]3536 commonEdge1 = z e r o s (1,n);37 EdgeEnv1 = edgedetection1D (mix1 , seuil );38 mean1 =mean(mix1);3940 f o r a=1:n41 soust =mix1 -(a/( NOMBRE *100) )*mix2;42 mean2 =mean( soust );43 soust = soust * mean1 / mean2 ;44 EdgeEnv2 = edgedetection1D (soust , seuil );45 commonEdge1 (a)= commonedge (EdgeEnv1 , EdgeEnv2 );46 end47 end4849 f u n c t i o n [ edge] = edgedetection1D (signal , seuil )50 % Calcul le vecteur gradient du signal puis calcul du vecteur contour51 % pour un certain seuil52 matrix =[ -1 0 1] ’;53 convo = abs (conv2(matrix , signal ));54 f o r i=1: l ength ( convo )55 i f convo (i)> seuil56 convo (i)=1;57 e l s e58 convo (i)=0;59 end60 end61 edge= convo ;62 end6364 f u n c t i o n [ number ] = commonedge ( S1 ,S2 )65 % Calcul le nombre de contours commun entre deux vecteurs contenants les66 % contours67 number =0;68 somme =S1+S2;69 f o r i=1: l ength (S1);70 i f somme (i)==271 number = number +1;72 end73 end74 end7576 f u n c t i o n [ NextCoef ] = Rafining ( mix1 , mix2 , seuil ,NOMBRE ,coef , order , pas)77 % Affine un resultat iterativement en diminuant localement le pas78 % et le seuil de la methode a chaque iteration7980 a=pas;81 i f order ==282 mix1b =mix1;83 mix1=mix2;84 mix2= mix1b ;85 end86 i=0;87 n=0;8889 % A chaque iteration deux points a cote de l’ approximation du dernier90 % coefficient cherche sont testes et le meilleur des trois est garde . Si91 % aucun des deux points n’est meilleur , alors le pas et le seuil sont92 % diminues .93 whi le i <40 && n <4009495 edgeenv = edgedetection1D (mix1 , seuil );96 mean1 =mean(mix1);97

83

Page 84: Blind Sources Separation - Séparation de Sources à l'Aveugle

98 soust =mix1 -( coef /( NOMBRE *100) )*mix2;99 soust = soust * mean1 /mean( soust );

100 edgeenv2 = edgedetection1D (soust , seuil );101 commonEdge = commonedge (edgeenv , edgeenv2 );102103 soust1 =mix1 -(( coef+a)/( NOMBRE *100) )*mix2;104 soust = soust1 * mean1 /mean( soust1 );105 edgeenv2 = edgedetection1D (soust , seuil );106 CommonEdge1 = commonedge (edgeenv , edgeenv2 );107108 soust2 =mix1 -(( coef -a)/( NOMBRE *100) )*mix2;109110 soust = soust2 * mean1 /mean( soust2 );111 edgeenv2 = edgedetection1D (soust , seuil );112 CommonEdge2 = commonedge (edgeenv , edgeenv2 );113114 i f commonEdge <= CommonEdge1 && commonEdge <= CommonEdge2115 a=a /1.6;116 seuil = seuil /1.1;117 i=i+1;118 n=n+1;119 end120 i f CommonEdge1 <= commonEdge && CommonEdge1 <= CommonEdge2121 coef=coef+a;122 n=n+1;123124 end125 i f CommonEdge2 <= commonEdge && CommonEdge2 <= CommonEdge1126 coef=coef -a;127 n=n+1;128129 end130131 end132133 NextCoef =coef;134 end135136 f u n c t i o n [ sonfinalTot1 , sonfinalTot2 ] = RafiningDelta ( CI2 ,n,mix1 , mix2 , seuil ,NOMBRE , pas )137 % Choisit l’ ordre dans lequel doit etre soustrait les mixtures , appel la138 % fonction de raffinage et ensuite calcule les sources associees aux139 % coefficients de separation trouves .140 i f CI2 (1 ,2) > n141 number1 =( CI2 (1 ,2) -n);142 newCoef1 = Rafining ( mix1 , mix2 , seuil ,NOMBRE ,number1 , 2, pas);143 sonfinalTot1 =( mix2 -( newCoef1 /( NOMBRE *100) )*mix1);144145146 e l s e147 number1 =CI2 (1 ,2);148 newCoef1 = Rafining ( mix1 , mix2 , seuil ,NOMBRE ,number1 , 1, pas);149 sonfinalTot1 =( mix1 -( newCoef1 /( NOMBRE *100) )*mix2);150 end151152 i f CI2 (2 ,2) > n153 number2 =( CI2 (2 ,2) -n);154 newCoef2 = Rafining ( mix1 , mix2 , seuil ,NOMBRE , number2 , 2, pas);155 sonfinalTot2 =( mix2 -( newCoef2 /( NOMBRE *100) )*mix1);156 e l s e157 number2 =CI2 (2 ,2);158 newCoef2 = Rafining ( mix1 , mix2 , seuil ,NOMBRE , number2 ,1, pas);159 sonfinalTot2 =( mix1 -( newCoef2 /( NOMBRE *100) )*mix2);160 end161162 end

D.2.4 AnalyticalSeparation.m

1 f u n c t i o n [ NormalisedOutput1 , NormalisedOutput2 ] = AnalyticalSeparation ( mix1 ,mix2)2 % entrees : mix1 et mix2 sont des vecteurs contenant du son de meme taille

84

Page 85: Blind Sources Separation - Séparation de Sources à l'Aveugle

3 % Sorties : sort les deux vecteurs contenant le son des sons separes456 % Calcul du gradient des vecteurs d’ entre7 matrix =[ -1 0 1] ’;8 convo1 =conv2(matrix ,mix1);9 convo2 =conv2(matrix ,mix2);

1011 % Calcul du point d’ annulation theorique de chaque element du vecteurs , en12 % prenant en compte le cas ou il n’y en as pas et en travaillant avec une13 % precision de 10^ -14 pour eviter les erreurs de l’ ordre de l’ epsilon14 % machine15 list= z e r o s ( l ength ( convo1 ) ,1);16 list2 = z e r o s ( l ength ( convo1 ) ,1);17 listNumber =ones( l ength ( convo1 ) ,1);1819 f o r i=1: l ength ( convo1 )20 i f convo2 (i)==021 list(i)=0;22 e l s e23 sep= f l o o r (( convo1 (i)/ convo2 (i)) *10^15) /10^15;24 list(i)=sep;25 end26 end2728 % Calcul du coefficient de soustraction qui maximise le nombre de point ou29 % le gradient est nul3031 a=0;32 k=1;33 f o r i=1: l ength (list)34 a=list(i);35 i f sum( list2 ==a) >036 [c,b]=max( list2 ==a);37 listNumber (b)= listNumber (b)+1;38 e l s e39 list2 (k)= a;40 k=k+1;41 end42 end43444546 [ SortedList Index ]= sortrows ( listNumber , -1);47 sep1= list2 ( Index (1));48 i=2;49 sep2= list2 ( Index (2));5051 whi le abs ( list2 ( Index (i))-list2 ( Index (1))) <10^ -1552 i=i+1;53 sep2= list2 ( Index (i));54 end55565758 % Calcul et normalisation des sorties59 sonfinalTot1 =( mix1 -sep1*mix2);60 sonfinalTot2 =( mix1 -sep2*mix2);61 NormalisedOutput1 = sonfinalTot1 /(2*max( sonfinalTot1 ));62 NormalisedOutput2 = sonfinalTot2 /(2*max( sonfinalTot2 ));6364 end

D.3 ICALes codes fastica.m, fxptica.m et whiten.m sont inspirés de l’algorithme décrit dans [4]et par le package fastICA Matlab de Aapo Hyvärinen, disponible sur l’url http://www.cs.helsinki.fi/u/ahyvarin/papers/fastica.shtml.

85

Page 86: Blind Sources Separation - Séparation de Sources à l'Aveugle

D.3.1 fastica.m

1 % [Y,A,Ainv ,Whmat , Dwmat ] = fastica (X,decorrOpt , negentFunction )2 % Main function for blind source separations of mixed signals3 %4 % @pre :5 % - X is a k-by -n matrix containing k signals of n samples each (one6 % signal per row)7 % - decorrOpt : string specifying decorrelation approach : ’symmetric ’ or8 % ’deflation ’ ( default is symmetric in case unknown or no option specified )9 % - negentFunction : string specifying non linearity used to

10 % approximate negentropy : ’tanh ’ or ’exp ’ ( default is ’tanh ’ in case11 % unknown or no option specified ).12 % @post :13 % - Y : k-by -n matrix of the k vectors of length n corresponding to the14 % estimated independent sources15 % - A : estimation of the mixing matrix (k-by -k)16 % - Ainv : estimation of the unmixing matrix (k-by -k)17 % - Whmat : whitening matrix (k-by -k)18 % - Dwmat : dewhitening matrix (k-by -k)19 %20 %212223 f u n c t i o n [Y,A,Ainv ,Whmat , Dwmat ] = fastica (X,decorrOpt , negentFunction );24 %% 0. Identifying decorrelation approach25 i f nargin <326 negentFunction = ’tanh ’;27 end28 i f narg in <229 decorrOpt = ’sym ’ ;30 end3132 %% 1. preprocessing33 n = max( s i z e (X)) ;34 k = min( s i z e (X)) ;3536 i f s i z e (X ,1) > s i z e (X ,2)37 X = X’ ;38 end39 X = double (X);4041 % 1.1 Removing the mean42 meanX = mean(X ’) ’ ;43 X = X - meanX *ones (1,n) ;4445 % 1.2. Whitening4647 [Xw , Whmat , Dwmat ] = whiten (X) ;4849 %% 2. Fast ICA : getting A and inv(A)50 %fixed - point algorithm51 [A,Ainv] = fxptica (Xw ,Whmat ,Dwmat ,decorrOpt , negentFunction ) ;5253 %% 3. Returning source signals (+ adding the mean back)54 i f ~ isempty (A) && ~ isempty (Ainv)55 Y = Ainv *(X + meanX *ones (1,n) ) ; % after dewhitening56 e l s e57 f p r i n t f (’FastICA was not able to recover the source signals : empty matrix returned \n’);58 Y = [];59 end6061 i f ~ i s r e a l (Y)62 warning (’FastICA : output signals contain imaginary parts ’);63 end646566 end

86

Page 87: Blind Sources Separation - Séparation de Sources à l'Aveugle

D.3.2 fxptica.m

1 % [A,Ainv] = fxptica (X,Wmat ,Dwmat , decorrOpt )2 % Sub - function called by fastica that performs the Newton - Raphson3 % fixed - point iteration .4 %5 % @pre :6 % - X : k-by -n matrix containing the k whitened signals of length n7 % - Wmat : k-by -k whitening matrix8 % - Dwmat : k-by -k dewhitening matrix9 % - decorrOpt : string specifying decorrelation approach : ’symmetric ’ or

10 % ’deflation ’ ( default is symmetric in case unknown or no option specified )11 % - negentFunction : string specifying non linearity used to12 % approximate negentropy : ’tanh ’ or ’exp ’ ( default is ’tanh ’ in case13 % unknown or no option specified )14 % @post :15 % - A : approximation of the mixing matrix (k-by -k)16 % - Ainv = approximation of the unmixing matrix (k-by -k)17 %181920 f u n c t i o n [A,Ainv] = fxptica (X,Wmat ,Dwmat ,decorrOpt , negentFunction )21 %% Identifying decorrelation approach and non linearity used22 decorrApproach = 1 ; % default values23 nonlinearity = 1 ;24 i f nargin >=525 i f any( strcmpi ( negentFunction ,{ ’exp ’,’expo ’,’expon ’,’expu ’,’ex ’}))26 nonlinearity = 2 ;27 end28 end29 i f narg in >=430 i f any( strcmpi (decorrOpt ,{ ’deflation ’,’defl ’,’def ’}))31 decorrApproach = 2 ;32 end33 end34 i f narg in <335 e r r o r (’fxptica : arginCheck : at least 3 input arguments needed ’);36 end3738 i f nonlinearity ==139 f p r i n t f (’Non - linearity used: tanh(x) \n’)40 e l s e41 f p r i n t f (’Non - linearity used: exp(x) \n’ )42 end43 %% Parameters44 maxIt = 40;45 tol = 1e -4 ;46 a1 = 1 ; % parameter for log(cosh(ax))47 [numSigs , numSamples ] = s i z e (X); % ! numsignals is already a Matlab function ...4849 %% fixed point iteration50 switch decorrApproach51 case 1 % SYMMETRIC52 f p r i n t f (’Fxptica : symmetric approach for decorrelation \n’);53 W = orth ( randn ( numSigs ));54 WOld = z e r o s ( s i z e (W));5556 % Loop for Symmetric orthogonalization .57 f o r round = 1: maxIt + 158 i f round == maxIt + 1,59 f p r i n t f (’No convergence after %d steps \n’, maxIt );60 i f ~ isempty (W)61 W = W * r e a l ( inv (W’ * W) ^(1/2) );62 A = Dwmat * W ’;63 Ainv = W*Wmat ;64 e l s e65 W = [];66 A = [];67 end68 r e turn ;69 end70

87

Page 88: Blind Sources Separation - Séparation de Sources à l'Aveugle

7172 W = r e a l ( inv (W * W ’) ^(1/2) ) * W ;7374 minAbsCos = min( abs ( diag (W * WOld ’)));7576 i f (1 - minAbsCos < tol)77 A = Dwmat * W ’; % final Afica78 break ;79 end80 WOld = W;8182 % Getting next W with a N-R iteration using tanh or exp non83 % linearity84 i f nonlinearity ==185 hypTan = tanh(a1 * W * X);86 W = hypTan * X’ / numSamples - ...87 W.*( sum( (1 - hypTan .^ 2) ’ ) ’*ones (1, s i z e (W ,2)) )/ numSamples * a1;88 e l s e i f nonlinearity ==289 % formula (47) page 1590 Y = W*X ;91 expon = exp(- (Y .^ 2) / 2);92 gY = Y.* expon ; % =g(Y = W*X)93 Beta = sum((Y.* gY) ’) ; % E{yi*g(yi)}94 Alpha = 1./( Beta - sum( expon .*(1 -Y.^2) ,2) ’) ; % horizontal sum (! returns a

column vector )95 W = W + diag ( Alpha )*( - diag (Beta) + gY*Y’ )*W ;9697 end9899 end

100101 % after loop ( symmetric approach )102 W = r e a l ( inv (W * W ’) ^(1/2) ) * W ;103 A = Dwmat * W ’;104 Ainv = W*Wmat ;105 f p r i n t f (’End of fixed - point ICA with symmetric decorrelation \n’);106 % DEFLATION107 case 2108 f p r i n t f (’Fxptica : deflation approach for decorrelation \n’);109 W = z e r o s ( numSigs ); % matrix W ( approximately inv (\ tilde {A}) )110 Ainv = z e r o s ( numSigs ) ;111 A = z e r o s ( numSigs ) ;112113 numFailures = 0;114 failureLimit = 2* numSigs ;115116 round = 1 ;117 whi le round <= numSigs118 w = ones(numSigs , 1); % affects convergence ! rand , randn , ones ,..119 w = w - W’ * W * w;120 w = w / norm(w);121122 wOld = z e r o s ( s i z e (w));123124 % computing a line of W (w ’)125 i = 1;126 f o r i =1: maxIt127128 w = w - W’ * W * w; % equations (44) page 15129 w = w / norm(w);130131 % convergence test132 i f norm( abs (w - wOld)) < tol133 f p r i n t f (’component %i computed ( %d steps after %i attempt (s) ) \n’, round ,

i, numFailures +1)134 numFailures = 0; % no failures for next component yet135 W(round ,:) = w’ ;136 Ainv = W*Wmat ; % back to dewhitened vectors ( W = inv(Wmat*A) )137 A = Dwmat * W ’;138139 break ;140 end141

88

Page 89: Blind Sources Separation - Séparation de Sources à l'Aveugle

142 wOld = w;143144 % N-R iteration using tanh or exp non - linearity145 i f nonlinearity == 1146 hypTan = tanh(a1 * X’ * w);147 Beta = w’ * X * hypTan ;148 w = w - ((X * hypTan - Beta * w) / ...149 (a1 * sum((1 - hypTan .^2) ’) - Beta) ); % divisions by

numSamples cancel out!150151 w = w / norm(w);152 e l s e i f nonlinearity == 2153 %%%%% formula (43) page 14154 u = X’ * w; % n-by -1 vec used several times155 usq=u.^2; % used for g and dg/du156 expon =exp(- usq /2); % used for g and dg/du157 gu = u.* expon ;158 dgu = (1 - usq) .* expon ;159 Xu = X*gu ; % used for beta and final iteration160 Beta = w’ * Xu; % scalar number . No division by numel because they

cancel out afterwards161 w = w - (( Xu - Beta * w) / (sum(dgu)’ - Beta));162163 end164 end165166 % check convergence after getting out of the iteration loop167 i f i == maxIt168 f p r i n t f (’\n Component number %d did not converge in %d iterations .\n’, round ,

maxIt );169 round = round - 1;170 numFailures = numFailures + 1;171 i f numFailures > failureLimit172 f p r i n t f (’Giving up fixed - point ICA after %i failures to converge .\n’,

numFailures );173 i f round == 0174 A=[];175 W=[];176 Ainv = [] ;177 end178 r e turn ;179 end180 end181182 % one component computed or aborted (in which case round was183 % reduced by 1). On to next component .184 round = round +1 ;185 end186187 Ainv = W*Wmat ; % back to dewhitened vectors (W was the inverse of \ tilde {A}= Wmat*

A )188 A = Dwmat * W ’;189 f p r i n t f (’End of fixed - point ICA with deflation \n’);190 end %end of switch decorraproach191192 %% Final check193 i f ~ i s r e a l (A)194 f p r i n t f (’Warning : fxptica deflation : removing the imaginary part from the result .\n’);195 A = r e a l (A);196 Ainv = r e a l (Ainv);197 end198199200201202 end % end of function fxptica203204 % More efficient than Matlab tanh function according to A. Hyvarinen205 f u n c t i o n y= tanh(x)206 y = 1 - 2 ./ (exp (2 * x) + 1);207 end

89

Page 90: Blind Sources Separation - Séparation de Sources à l'Aveugle

D.3.3 whiten.m

1 % [X, W, U] = whiten (X,dim)2 % Whitens signals contained in X and ( optionally ) projects them onto a3 % subspace of lower dimension made of the principal axes.4 %5 % @pre:6 % - X : k-by -n matrix containing k observed signal of length n7 % - dim : the dimension to which data will be reduced (eg if k=15 and dim8 % = 5 only 5 signals will be returned , containing information about all 159 % signals after projection on the principal component axes). Default value

10 % is the number of signals k ( not used in ICA )11 %12 % @post :13 % - X: k-by -n or dim -by -n matrix containing dim whitened signals of length n14 % - W : k-by -k or dim -by -k whitening matrix15 % - U : k-by -k or k-by -dim dewhitening matrix16 %17 % Code inspired by Aapo Hyvarinen18 % ( University of Helsinki , Faculty of Science ).19 f u n c t i o n [X, W, U] = whiten (X,dim)2021 i f narg in ==122 dim = min( s i z e (X)) ;23 end2425 % reshaping X to a horizontal matrix26 i f s i z e (X ,1) > s i z e (X ,2)27 X = X’ ;28 end2930 covmat = cov (X ’) ; % best unbiased estimator for gaussian random variables ( better than cov(X

’ ,1) )3132 [V,D] = eigs(covmat ,dim ,’lm ’) ;3334 % Covariance matrices are semi - positive definite . Eigenvalues should be non35 % negative36 i f any( diag (D)) <037 e r r o r (’Covariance matrix of observations has %i negative eigenvalues ’,sum( diag (D) <0));38 end39 % Whitening and dewhitening matrices40 W = diag (1./ s q r t ( diag (D)))*V’ ;41 U = V* s q r t (D) ;4243 % whitened vectors44 X = W*X ;

D.3.4 normalisation.m

1 %%%%2 %[Y1 Y2] = normalisation (X1 ,X2 ,A,W,KIND) normalizes results given by3 % fastica .m4 %5 %@PRE :6 % * X1 is a n*1 double vector , represents first mixed signal .7 % * X2 is a n*1 double vector , represents second mixed signal .8 % * A is a 2-by -2 matrix , mixing matrix returned by fastica .m9 % * W is a 2-by -2 matrix , approximation of inv(A) given by fastica .m

10 % * KIND is a string means kind of normalisation (’mean ’ or ’normA ’)11 %12 % @POST :13 % * Y1 is the first normalized result , a n*1 double vector .14 % * Y2 is the second normalized result , a n*1 double vector .15 %16 %%%%17 f u n c t i o n [Y1 Y2] = normalisation (X1 ,X2 ,A,W,KIND)18

90

Page 91: Blind Sources Separation - Séparation de Sources à l'Aveugle

1920 switch KIND2122 case {’mean ’}2324 lim = s i z e (X1);2526 Y1 = z e r o s (lim);27 Y2 = z e r o s (lim);2829 f o r i = 1 : s i z e (X1 ,2)3031 Y1(:,i) = W(1 ,1)*X1(:,i) + W(1 ,2)*X2(:,i) ;32 Y2(:,i) = W(2 ,1)*X1(:,i) + W(2 ,2)*X2(:,i) ;3334 meanX = mean([mean(X1(:,i)), mean(X2(:,i)) ]);35 m1 = mean(Y1(:,i));36 m2 = mean(Y2(:,i));37 Y1(:,i) = Y1(:,i)* meanX /m1 ;38 Y2(:,i) = Y2(:,i)* meanX /m2 ;3940 end414243 case {’normA ’}4445 Anorm = abs (A) ;46 Anorm = Anorm ./( sum(Anorm ,2)*ones (1 ,2) ) ;47 W = inv ( Anorm ) ;4849 Y1 = W(1 ,1)*X1 + W(1 ,2)*X2 ;50 Y2 = W(2 ,1)*X1 + W(2 ,2)*X2 ;5152 case {’sound ’}5354 Y1 = W(1 ,1)*X1 + W(1 ,2)*X2 ;55 Y2 = W(2 ,1)*X1 + W(2 ,2)*X2 ;5657 b = 1;58 a = -b;5960 M1 = max(Y1) ;61 m1 = min(Y1) ;62 Y1 = (Y1 -M1)*(b-a)/(M1 -m1) +b ;6364 M2 = max(Y2) ;65 m2 = min(Y2) ;66 Y2 = (Y2 -M2)*(b-a)/(M2 -m2) +b ;6768 otherwise69 e r r o r (’Not possible to match a normalisation option with : %s’,KIND)7071 end72737475 end

91