You are on page 1of 91

UCL

Ecole Polytechnique de Louvain


FSAB1507
Mathmatiques appliques
RAPPORT - PROJET 4
Sparation de sources laveugle
Anne 2012-2013
Pierre-Alexandre BEAUFORT 22481000
Anouchka PLAS 60111000
Gatan RENSONNET 23461000
Wauthier SCHOONJANS 44531000
Professeurs
- Pierre-Antoine Absil - Franois Glineur - Julien Hendrickx - Yurii Nesterov -
Table des matires
Introduction 4
1 Modlisation 5
1.1 Modlisation mathmatique du problme . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Reprsentation numrique de nos donnes . . . . . . . . . . . . . . . . . . . . . 6
1.3 Critre de qualit de nos signaux de sortie . . . . . . . . . . . . . . . . . . . . . 7
2 Dtection de contours 8
2.1 Traitement dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 Evaluation du gradient dune image . . . . . . . . . . . . . . . . . . . . . 9
2.1.3 Matrice des contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.4 Contours communs comme critre de sparation . . . . . . . . . . . . . . 12
2.1.5 Dirents algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Mthode de la force brute . . . . . . . . . . . . . . . . . . . . . . 13
Mthode du tir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.6 Rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Cas rel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Forte similarit des images mlanges . . . . . . . . . . . . . . . . 15
Gradients "faibles" . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Mlanges non uniformes . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.7 Pistes damlioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Traitement de bandes sonores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 Adaptation du modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.2 Adaptation du gradient et construction du vecteur de contours . . . . . . 19
2.2.3 Dirents algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Mthode de la force brute avec ranement . . . . . . . . . . . . . 20
Mthode du calcul direct . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.4 Gnralisation plusieurs Sources . . . . . . . . . . . . . . . . . . . . . . 22
Cas 3 sources et 2 micros . . . . . . . . . . . . . . . . . . . . . . . 22
Cas 3 sources et 3 micros . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.5 Cas pathologiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.6 Pistes damliorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Independent Component Analysis 24
3.1 Justication thorique de lalgorithme fast-ICA . . . . . . . . . . . . . . . . . . 24
3.1.1 Mesure de lindpendance statistique de deux variables alatoires . . . . 24
3.1.2 Mesure de la gaussianit dune variable alatoire . . . . . . . . . . . . . . 25
Maximisation du kurtosis . . . . . . . . . . . . . . . . . . . . . . . 25
Maximisation de la nguentropie . . . . . . . . . . . . . . . . . . . 26
Approximation de la nguentropie . . . . . . . . . . . . . . . . . . 27
Choix de G(y) pour lapproximation de la nguentropie . . . . . . 28
3.1.3 Pre-processing : PCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Lalgorithme fast-ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1 Estimation dun vecteur w
i
. . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Estimation de plusieurs vecteurs . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.3 Complexit calculatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 Implmentation pratique pour les images . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1 Traitement des images pr-ICA . . . . . . . . . . . . . . . . . . . . . . . 32
2
Noir et blanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
RGB component-by-component . . . . . . . . . . . . . . . . . . . 33
Noir et blanc vers RGB . . . . . . . . . . . . . . . . . . . . . . . . 35
RGB all-in-one . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.2 Appel de lalgorithme ICA . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.3 Normalisations post-ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Normalisation de la matrice A . . . . . . . . . . . . . . . . . . . . 37
Moyenne des mixtures . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Implmentation pratique pour les sons . . . . . . . . . . . . . . . . . . . . . . . 38
3.5 Echantillonnage des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.6 Rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.6.1 Mixage linaire, homogne et constant . . . . . . . . . . . . . . . . . . . 41
3.6.2 Signaux sources indpendants . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6.3 Absence de dcalage spatial ou temporel . . . . . . . . . . . . . . . . . . 43
3.6.4 Sources identiquement distribues et non-gaussiennes . . . . . . . . . . . 44
3.6.5 Mixages bruits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.6.6 Situation relle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4 Interface utilisateur BSS.m 49
4.1 Critres de linterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2 Comparaison Edge Detection et ICA . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3 Perspectives damlioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Conclusion 52
Annexes 54
A Cahier des charges 54
B Maximisation du kurtosis 58
C Options implmentes pour lalgorithme ICA 61
C.1 RGB component-by-component . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
C.2 Noir et blanc vers RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
C.3 RGB all-in-one . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
C.4 Normalisation de la matrice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
C.5 Moyenne des mixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
C.6 Normalisation des rsultats son . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
C.7 Echantillonnage des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
D Implmentations Matlab 65
D.1 Interface utilisateur et utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
D.1.1 BSS.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
D.1.2 importImage.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
D.1.3 importaudio.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
D.1.4 equalizesignals.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
D.1.5 feedbackResults.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
D.1.6 evaluateOutputs.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
D.2 Dtection de contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
D.2.1 EdgeSeparation.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
D.2.2 EdgeSeparationTir.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
D.2.3 EdgeSeparationAudio.m . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3
D.2.4 AnalyticalSeparation.m . . . . . . . . . . . . . . . . . . . . . . . . . . 82
D.3 ICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
D.3.1 fastica.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
D.3.2 fxptica.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
D.3.3 whiten.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
D.3.4 normalisation.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4
Abstract
La sparation de signaux laveugle (blind source separation) consiste sparer des signaux
mixs en ne disposant daucune information a priori sur ces signaux. Dans le cadre de ce pro-
jet, nous nous sommes vu jouer le rle dagents de la Sret dEtat, chargs de rcuprer une
conversation dimportance couverte par une musique intempestive et de rcuprer la photogra-
phie dun document condentiel gche par un reet indsirable.
Sous les hypothses dun mixage linaire, homogne et constant de sources mutuellement ind-
pendantes, nous avons pu dvelopper un algorithme bas sur la dtection de contours se rvlant
relativement prcis dans la sparation de sons et dimages respectant le modle linaire. En sup-
posant en plus la non-gaussianit des sources nous, avons pu implmenter lalgorithme fast-ICA
bas sur la thorie de lIndependent Component Analysis, alliant robustesse statistique, rapidit
et garantie de convergence vers les sources.
Notre modle est par dnition incapable de renvoyer des sources damplitude exacte. Diverses
techniques de normalisation ont donc t mises en place, en particulier dans le cadre de la
rcupration de photographies couleur. Enn nous avons crit une fonction Matlab prenant
en entre deux chiers audio ou images, ralisant leur sparation et achant les rsultats.
Blind source separation consists in trying to recover mixed signals with no prior information
on these signals. In this project, we played the role of Homeland Security Agents in charge
of retrieving an important conversation covered by loud music and getting a photograph of a
condential document blurred by unwanted reections.
Under the assumption of a linear, homogeneous and constant mixing of mutually independent
sources, 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 in
addition 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 denition unable to return sources of exact amplitude. Various normalization
techniques 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 les as inputs, making
their separation and displaying the results.
5
Introduction
La sparation de sources laveugle consiste sparer un ensemble de signaux sources qui - par
leur superposition - produisent un unique signal. Ce signal peut tre enregistr soit par plusieurs
canaux, soit en des instants dirents. Ces enregistrements forment eux-mmes des signaux dis-
tincts les uns des autres. A partir de ceux-ci, on souhaite isoler les sources qui en sont lorigine.
Ce procd de sparation a de nombreuses applications en gnie biomdical telles que pour
les encphalogrammes, les lectrocardiogrammes ou encore les rsonances magntiques. Cette
technique est galement utilise dans les domaines de la tlcommunication, de linstrumenta-
tion multi-capteurs et du traitement de signal.
Dans ce rapport, nous mettons nos rexions et solutions quant deux problmes. Le premier
consiste rcuprer un document dont les deux photographies ont t altres par un reet
indsirable. Le second a pour objectif disoler une conversation tlphonique enregistre par
deux microphones avec une musique parasite.
Tout dabord, nous procdons la modlisation de notre problmatique. Nous nonons les
hypothses poses, tout en prcisant le critre mathmatique de la solution. Par ailleurs, nous
prcisons la reprsentations numriques des donnes traites.
Ensuite, nous prsentons une premire solution base sur la dtection de contours. Cette m-
thode semble pertinente selon lintuition pour le traitement dimages, mais nous sommes parve-
nus dvelopper une mthode base sur le mme concept pour le traitement de bandes sonores.
Toujours dans le cas audio, nous nous intressons aux situations multi-sources. videmment,
divers rsultats sont prsents et critiqus.
Par aprs, nous dveloppons une seconde solution base sur lindependent component analysis.
Dans un premiers temps, nous passons en revue les grandes lignes de la thorie ICA. Nous pour-
suivons avec lalgorithme mettant en oeuvre ces notions. Limplmentation de cet algorithme
est explique, en prsentant ses nombreuses options de traitement. Nous terminons en incluant
des rsultats particuliers.
Enn, nous terminons notre rapport par linterface utilisateur. Nous rappelons ses critres que
nous nous sommes xs dans notre cahier des charges. Aussi, une comparaison entre les deux
solutions est mise en vidence. Finalement, des perspectives damlioration de linterface sont
proposes.
Tout au long du rapport, des illustrations des rsultats sont prsentes et souvent formes
partir des mmes chiers sources. Outre le corps du rapport, des annexes reprennent certains
concepts et dtails de nos implmentations Matlab.
6
1 Modlisation
Nous abordons ici la modlisation mathmatique de la situation-problme puis la manire dont
nous avons reprsent et stock nos signaux numriquement, ncessaire la bonne comprhen-
sion de nos algorithmes sur les signaux.
1.1 Modlisation mathmatique du problme
Dans les deux problmes qui nous ont t donns, nous devons dissocier deux signaux sources
discrets reprsents par les vecteurs s
1
= [s
11
s
12
. . . s
1n
], s
2
= [s
21
s
22
. . . s
2n
] (dont la nature est
discute dans le tableau 1) partir de deux signaux observs x
1
et x
2
, galement des vecteurs
lignes de n entres. Les matrices S et X sont dnies par S =
_
s
1
s
2
_
et X =
_
x
1
x
2
_
. Notons quune
image peut facilement tre reprsente par un vecteur de dimension 1 en allongeant cte cte
les lments de la matrice de pixels qui lui est associe.
Signal Image Son
(valeurs spatiales) (valeurs temporelles)
s
1
image de fond conversation dintrt
s
2
image rchie musique
x
1
premire photo enregistrement du premier microphone
x
2
deuxime photo enregistrement du deuxime microphone
Table 1 Nature des signaux
Les hypothses sont :
1. Les signaux perus par les capteurs (camera ou microphones) peuvent tre obtenus par
combinaisons linaires des signaux inconnus.
2. Les coecients de la transformation linaire sont constants dans le temps (identiques
entre le dbut et la n de lenregistrement audio) et homognes dans lespace (gaux pour
chaque pixel de limage).
3. les signaux sources sont indpendants (par exemple : la musique na aucun impact sur
lintensit, le ton et le rythme de la conversation).
4. Il ny a pas de dlai de phase dans le problme des sons : les signaux mis par les sources
un certain temps sont simultanment enregistrs par les deux microphones. De mme, il
ny a pas de dcalage spatial entre les deux images, les cadres sont parfaitement identiques.
Nos hypothses 1 et 2 nous permettent dcrire :
X = AS,
_
x
11
x
12
x
1n
x
21
x
22
x
2n
_
=
_
a
11
a
12
a
21
a
22
_ _
s
11
s
12
s
1n
s
21
s
22
s
2n
_
, (1)
o nous appelons A R
22
la matrice de mixage.
Notre problme consiste donc trouver la matrice de "dmixage" W A
1
R
22
telle que

S = WX est une bonne approximation de S (voir gure


1
1).
Lhypothse 3 nous apporte un critre de maximisation : nous allons imposer la solution du
systme ci-dessus de maximiser lindpendance des sources approches s
1
et s
2
. Nous dvelop-
perons deux manires de mesurer lindpendance entre dirents signaux : minimisation des
1. Tire de http://iopscience.iop.org/0964-1726/21/4/045019/article
7
contours communs dans le cadre dune mthode de dtection de contours et minimisation de
la gaussianit dans lIndependent Component Analysis. Notons que dans le cas de limage, la
somme des lments dune ligne de la matrice A devra en plus valoir lunit.
Figure 1 Sparation des sources par dmixage linaire
Pour terminer, notons deux ambiguts intrinsques ce modle : les signaux rcuprs sont
dnis une constante prs (ce qui posera surtout problme pour la sparation dimages) et
lordre dans lequel ils sont renvoys est impossible prdire. Mathmatiquement on crit que
R, le modle X = (
1

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


matrice de mixage
1

A et des sources S. De manire similaire, si P R


22
est une matrice de
permutation, la modle X = (AP
1
) (PS) est quivalent (1).
1.2 Reprsentation numrique de nos donnes
Signaux audio Conformment aux spcications du cahier des charges
2
, les signaux sonores
sont imports partir de chiers WAVE (.wav). Matlab les stocke par dfaut sous forme de
vecteurs de classe double normaliss lintervalle [1, 1]. On sait que la prcision en virgule
ottante dun calculateur est dautant plus leve que lon est proche de zro, cest pourquoi
nous avons conserv ces paramtres par dfaut. Une autre donne importante conserver est
videmment la frquence dchantillonnage du signal, pour pouvoir rcouter les clips audio au
bon rythme par aprs. Prcisons que nous nous sommes limits durant ce projet des chiers
monophoniques
3
.
Lors du mlange articiel de signaux audio, deux paramtres sont prendre en compte :
- la dure des mlanges est limite par la dure minimum des signaux mlangs
- les longueurs des vecteurs son doivent tre identiques pour nos algorithmes
Nous avons fait le choix de xer le nombre dchantillons, pour une dure temporelle don-
ne, selon la frquence dchantillonnage la plus leve des signaux mlanger. Il a donc
parfois fallu sur-chantillonner un des vecteurs (par simple interpolation linaire, voir fonc-
tion importaudio.m and equalizesignals.m), ce qui loreille se remarque peine et qui
ne semble pas trop aecter le contenu frquentiel du signal. La gure 2 montre cette (faible)
variation spectrale pour notre chier audio "badfeeling.wav" (voix humaine).
Signaux images Nous nous sommes limits, comme spci dans le cahier des charges, lim-
portation de chier images JPEG et PNG, par dfaut stocks sous forme de matrices m n
dans le cas noir et blanc (m, n R), m n 3 dans le cas couleur RGB (un "tage" par
couleur), dont les entres sont de type entiers 8 bits "uint8" allant de 0 255. Nous aurions pu
2. voir annexe A
3. Son enregistr via un unique canal.
8
6000 4000 2000 0 2000 4000 6000
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
Amplitude Spectrum of y(t) (f
s
: 11.025 kHz)
Frequency (Hz)
|
Y
(
f
)
|
(a) Spectre original du signal chantillonn 11.025
kHz
6000 4000 2000 0 2000 4000 6000
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
Amplitude Spectrum of y(t) (f
s
: 22 kHz)
Frequency (Hz)
|
Y
(
f
)
|
(b) Spectre du mme signal avec 22000 chantillons par
seconde calculs par interpolation linaire.
Figure 2 Eet du sur-chantillonnage par interpolation linaire sur le contenu frquentiel
dun signal audio.
tout aussi bien stocker les donnes avec 16 bits pour obtenir une meilleure granularit, mais
uint8 est loption de loin la plus courante et certaines routines Matlab telle que la conversion
couleur vers noir et blanc requirent spciquement des entiers 8 bits. Cela naecte de toutes
faons pas lutilisateur et ne sert que pour nos calculs internes.
1.3 Critre de qualit de nos signaux de sortie
Nous avons tabli un critre permettant de mesurer la similitude entre deux signaux reprsents
sous forme vectorielle. Pour comparer des matrices dimages il faut donc dabord les aplatir en
vecteurs ligne ou colonne. Supposons deux vecteurs reprsentant typiquement une source, s, et
un output, y. Notre critre snonce :
qual(s, y) = log {1 |cos ((s, y))|} , (2)
o on a utilis :
cos((s, y)) =
s
T
y
sy
. (3)
Ce critre possde les caractristiques suivantes :
le cosinus de deux vecteurs similaires se rapproche vite de 1 en valeur absolue et le log(1
| cos(. . . )|) peut donc sinterprter comme le nombre de "9" aprs la virgule quand on value
|cos ((s, y))|. Deux images paraissent similaires loeil nu quand le critre renvoie des
valeurs de 2 ou 3 et deux sons semblent identiques loreille pour environ 3-4. Un inconvnient
du critre est quil augmente ensuite rapidement pour des incrments de qualit parfois
relativement peu perceptibles.
indpendant de lchelle. Pour , R :
qual(s, y) = qual(s, y),
ce qui est pratique tant donn lambiguit damplitude de notre modle. Cependant on
verra que cela ne permet pas bien de mesurer la qualit visuelle dune image couleur, car les
amplitudes relatives de chaque composante (R, G et B) inuencent beaucoup le rendu nal.
ne dpend pas de la taille des vecteurs, si ce nest que pour des vecteurs approchant le million
dentres, des problmes darrondis apparaissent. On a parfois |cos ((s, y))| > 1, ce quil a
fallu traiter dans la sous-fonction cosineangle de notre fonction evaluateOutputs.m.
nest videmment utilisable en pratique que lorsque les sources sont connues et ne pourra
servir qu caractriser la qualit de nos algorithmes sur des cas synthtiques. Nous tenterons
de trouver des critres plus absolus de qualit dans la section 3 mais verrons quil reste
intrinsquement dicile dvaluer la qualit ex nihilo de nos outputs.
9
2 Dtection de contours
Dans cette section, nous tenterons disoler les sources par soustraction itrative des observa-
tions ou mixages. Nous montrerons quil existe un coecient de soustraction qui permet disoler
chacune des sources initiales.
Lidentication de ce point de sparation ne peut tre possible que par lvaluation dun cri-
tre bien prcis. Nous avons ici fait le choix dutiliser la dtection des points de contours des
mlanges.
Nous aborderons dabord les images puis nous tenterons dappliquer ces mthodes aux sons.
2.1 Traitement dimages
Nous allons montrer que nous pouvons obtenir les deux sources initiales s
1
et s
2
recherches
par soustraction de deux combinaisons linaires de celles-ci : x
1
et x
2
.
2.1.1 Modle
Soit deux images x
1
et x
2
, combinaisons linaires de deux images sources s
1
et s
2
telles que
pour a, b [0, 1] :
_
x
1
= a s
1
+ (1 a) s
2
x
2
= b s
1
+ (1 b) s
2
X = AS
o a et b reprsentent donc le pourcentage de la source s
1
dans la mixture, A =
_
a (1 a)
b (1 b)
_
et o S et X correspondent aux notations prsentes dans notre modlisation, section 1.1.
La sommes des lments de chaque ligne de A vaut bien lunit. La gure 3 montre un exemple
dun tel mlange, ralis par nos soins.
(a) Source s
1
(b) Source s
2
(c) Mlange x
1
(d) Mlange x
2
Figure 3 Sources originales et mixages avec a = 0.6 et b = 0.3
10
Nous allons montrer que les sources peuvent tre obtenues par soustraction des mixtures pour
un certain coecient R tel que :
F() = x
1
x
2
= a s
1
+ (1 a) s
2
b s
1
(1 b) s
2
= (a b
. .
L
) s
1
+ (1 a + b
. .
M
) s
2
o F() reprsente limage rsultant de la soustraction de x
2
partir de x
1
(respectivement
de x
1
partir de x
2
) pondre par le paramtre . Nous isolons s
1
quand M = 0 et s
2
quand
cest L qui sannule. Les valeurs de correspondantes sont alors, dans le cas o lon a soustrait
x
2
de x
1
:
s
1
rcupre si M = 0
s
2
rcupre si L = 0

_
0 = 1 a + b
0 = a b

_

1
=
1 a
1 b

2
=
a
b
(4)
Rciproquement si nous eectuons la soustraction x
2
x
1
, nous trouvons les deux sources
pour des valant exactement linverse de ceux trouvs prcdemment :
_

2
=
1 b
1 a
rcupration de s
2

1
=
b
a
rcupration de s
1
(5)
Si a = b (avec toujours a, b [0, 1]) on voit partir des quations 4 et 5 quune des deux valeurs
particulires de appartient toujours lintervalle [0, 1], et que lautre est > 1. On isole donc
une premire source pour un certain R. Lordre de soustraction des images inverse ces
coecients, il existe donc un autre [0, 1] ralisant lisolation de la deuxime source. Dor-
navant nous noterons indiremment par F() limage rsultant de la soustraction x
1
x
2
ou x
2
x
1
. Dans la suite de ce rapport, tous les calculs seront eectus deux fois, une fois
pour x
1
x
2
et une fois pour x
2
x
1
.
Notons que si a = b, on supprime les deux images en mme temps. Il est donc impossible de
faire un programme de sparation bas sur la soustraction de deux mixtures identiques, ce
quoi on sattendait.
Nous venons dtablir lexistence dun point de sparation dans un intervalle prcis. Il faut
encore trouver un critre pour reconnaitre ce point et identier la disparition subite dune des
deux sources. Pour cela, nous avons dcid dutiliser les contours de nos images x
1
et x
2
.
La dtection numrique de contours consiste dterminer les points (ou pixels) dune image
numrique qui correspondent un brusque changement de lintensit lumineuse. Dans cette
approche, on suppose que les images sont constitues de rgions quasi homognes spares par
des crneaux plus ou moins larges, caractriss par une variation signicative de la luminance.
2.1.2 Evaluation du gradient dune image
Nos images sont reprsentes par des matrices M R
mn
dont chaque entre est une valeur
dintensit lumineuse (nous considrons ici le cas noir et blanc et donc la valeur de luminance)
11
correspondant un pixel de la discrtisation spatiale eectue par lappareil. On peut donc
dnir un "gradient dimage", par analogie au gradient dune fonction continue, associ lentre
M
i,j
de notre matrice de pixel, comme suit :

G
ij
=
_
_
_
_
_
_
M
(i+1,j)
M
(i1,j)
2
M
(i,j+1)
M
(i,j1)
2
_
_
_
_
_
_
, (6)
avec 2 i m1 et 2 j n1. On peut interprter ces formules comme des approximations
des "drives partielles" horizontale et verticale par dirences centres dordre 2.
Chaque composante de

G peut tre obtenue en faisant la convolution de notre image M par
des ltres drivateurs associs chacune des directions et prsents dans la table 2. On appelle
aussi ces ltres "masques" de convolution, et la convolution est dnie de faon assez intuitive
en remplaant chaque pixel de la matrice par la somme des valeurs des pixels voisins et de
lui-mme, aects par les coecients du masque correspondants.
4
(a)
0 0 0
-1 0 -1
0 0 0
(b)
0 -1 0
0 0 0
0 -1 0
Table 2 Masques de convolution horizontale (a) et verticale (b) pour lestimation des com-
posantes du gradient dimage.
Pour saranchir des bruits causs par lopration de drivation, de nombreux ltres ont t
mis sur pieds partir des critres de slection en frquences (voir [11] et [12]). Nous trouvons
parmi ceux-ci les ltres de Roberts, Prewitt, Sobel et Kirsch (voir table 3).
(a)
1 0
0 -1
(b)
1 0 -1
1 0 -1
1 0 -1
(c)
1 0 -1
2 0 -2
1 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 implmentation, nous avons choisi dutiliser le masque de Sobel pour les deux di-
rections, comme vous pouvez lobserver sur le listing 1 reprenant le code de notre dtection de
contours edge1.m.
Le gros avantage de ce ltre rside dans le fait que celui-ci combine linformation de 9 pixels
pour se comporter la fois comme ltre passe-bas et oprateur drivateur [10]. Le ltre passe-
bas engendre un lissage des contours qui a pour eet de rendre le ltre plus robuste au bruit
tout en lui imposant malgr tout une diminution de la prcision. Notons quun ltre 3 3 a
tendance augmenter lpaisseur des contours par rapport un ltre 2 2 comme celui de
Roberts.
Vous pouvez observer ces assertions sur la gure 4, quoi que la dirence entre le ltre de
Prewitt et celui de Sobel ne soit pas frappante.
4. La convolution nest videmment pas dnie sur les bords de la matrice. Pour un masque de dimension
3 3 par exemple, on ne peut la calculer que pour 2 i m et 2 j n
12
(a) Filtre de Sobel (b) Filtre de Prewitt
(c) Filtre de Kirsch (d) Filtre de Roberts
Figure 4 Rsultats de la dtection de contours sur limage 3(a) avec 4 ltres couramment
utiliss pour lestimation du gradient dune image. Le seuil de dtection de contour est de 40
(voir section 2.1.3).
2.1.3 Matrice des contours
Nous dnissons les contours comme les points en lesquels le gradient est de "grande norme",
cest--dire de norme suprieure un seuil quil nous faut xer. Par essais-erreurs nous sommes
arrivs un seuil satisfaisant de 40 pour un format dimage standard entier 8 bits : ni trop
petit, ce qui considrerait comme contours des pixels qui loeil nu nappartiennent clairement
pas une ligne de contour, ni trop grand, ce qui nous ferait manquer des contours intressants.
La matrice de contours est une matrice boolenne tablie par notre fonction edge1.m, dont on
peut voir le code dans le listing 1. Un pixel dont la norme du gradient est suprieure au seuil
x sera traduit par un 1 et considr comme appartenant une ligne de contour, tandis que
les autres seront xs 0.
1 f unc t i on [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 qr t (abs (Gx.^2)+abs (Gy.^2)));
7 grad=(grad >40);
8 end
Listing 1 Calcul des contours. Lalgorithme approxime chaque composante du vecteur gradient
par convolution de la matrice image avec le ltre de Sobel (horizontal puis vertical) et attribue
la valeur boolenne 1 aux points en lesquels la norme du gradient est suprieure un seuil x.
13
2.1.4 Contours communs comme critre de sparation
An de sparer les images sources des images mlanges, nous allons partir dune hypothse
simple : les contours dune image mixe proviennent en grande partie des contours des deux
images qui la constituent, ou, formul autrement, un pixel appartenant un contour dans une
des deux sources appartiendra certainement un contour dans limage mixe, et vice-versa. La
gure 5 illustre cette observation.
En pratique nous allons valuer le nombre de points de contours communs entre F() et une
image B qui reprend lensemble des contours deux images mixes x
1
et x
2
. Cette image B est
ce dont nous disposons de plus proche dune image mixes parfaites, reprenant lensemble des
contours des deux sources.
Nous noterons le nombre de contours communs N(), encore une fois indiremment pour la
soustraction x
1
x
2
ou x
2
x
1
.
(a) Contours de la source s
1
(b) Contours de la source s
2
(c) Contours du mlange x
1
Figure 5 Comparaison des points de contours entre les sources et un mixage de celles-ci. Les
points de contours dans le mlange appartiennent gnralement un contour dans leur image
de dpart.
Une image source et une image mlange possdent moins de contours communs que deux
images mlanges, car dans le 1
er
cas ce nombre est limit par le nombre de contours de
lunique source, alors que les images mlanges ont en commun grosso modo lentiret des
contours des deux sources. Le minimisant le nombre de contours communs devrait donc aussi
tre le permettant disoler une source. Ainsi, notre problme consiste minimiser N() pour
un [0, 1].
2.1.5 Dirents algorithmes
Pour identier le minimisant N(), nous avons mis au point deux techniques direntes. La
premire est une mthode dite de "force brute", tandis que la suivante utilise la mthode du tir.
14
Mthode de la force brute
On cherche ici le optimal en testant de nombreuses valeurs dans lintervalle [0, 1] prdit par
le modle. Nous avons choisi une valeur de 0.005 pour le pas, valeur qui sest avre tre un
bon compromis entre prcision et rapidit de la mthode. Notons que cela impose un nombre
xe de 200 itrations, une pour chaque valeur de .
Pour ce faire, lalgorithme convertit les images dentre en images noir et blanc an dacclrer
les calculs et de rduire la taille du tableau contenant les images. Lvaluation du gradient nest
de toutes faons possible quavec une valeur associe chaque pixel.
Ensuite, nous calculons F() et N() pour chaque valeur de , en normalisant bien chaque
nouvelle image obtenue an que la moyenne de lintensit des pixels en noir et blanc soit la
mme avant et aprs la soustraction. Cela permet de ne pas fausser le calcul des contours en
changeant arbitrairement lintensit de limage.
La dernire tape consiste garder la valeur de qui minimise N(). Cette valeur est ensuite
utilise pour sparer les sources des images en couleur. La gure 6 reprend lvolution typique
du nombre de points de contours communs entre une mixture originale et les images obtenues
par soustractions successives. Elle illustre bien le fait que la fonction N() ne possde quun
seul minimum dans lintervalle prdit (du moins dans le cas de mlange bien linaire et homo-
gne), ce qui nous permet de sparer de manire trs ecace des images mlanges.
On peut estimer une complexit calculatoire pour une itration correspondant une valeur
particulire de en O(N), o N est le nombre dentres total dune matrice image. En eet,
pour la rcupration dune source, pour chaque valeur de , on eectue un nombre x a
priori de convolutions, soustraction, comparaison et somme dlments, qui sont toutes des
oprations proportionnelles N. Le code Matlab correspondant cette mthode est le chier
EdgeSeparation.m.
0 20 40 60 80 100
4
4.2
4.4
4.6
4.8
5
5.2
5.4
5.6
5.8
6
x 10
4

N
o
m
b
r
e

d
e

p
o
i
n
t
s

d
e

c
o
n
t
o
u
r
s

[%]
Figure 6 Graphe des points de contours communs N()
Mthode du tir
An damliorer le temps de rsolution de notre algorithme, nous avons utilis la mthode du
tir. Puisquil nexiste quun seul minimum la fonction des contours communs en fonction de
dans lintervalle considr, nous pouvons utiliser une estimation de la drive de N() comme
critre pour dterminer si le point de sparation dune des sources correspond un coecient
infrieur ou suprieur au coecient courant : si elle est ngative, le point de sparation est
15
plus grand que litr courant, sinon il est infrieur.
Par un raisonnement similaire celui eectu sur lalgorithme de "force brute", la complexit
de cet algorithme pour une valeur donne de est O(n). Cependant on sait que la convergence
dune mthode de tir est linaire (divisant lerreur maximale sur par 2 chaque tape) et on
peut donc esprer un nombre ditrations infrieurs la valeur prcdente de 200. En eet, 10
itrations susent au programme EdgeSeparationTir.m pour approcher la vritable valeur de
mieux que ne le fait la mthode brute.
2.1.6 Rsultats
Appelons y
1
et y
2
les deux images de sortie obtenues avec lalgorithme. On constate que la
mthode fonctionne trs bien lorsquil sagit de traiter des combinaisons linaires x
1
et x
2
de
deux sources s
1
et s
2
. Sur le schma 4, vous pouvez observer :
gauche : les mixtures traiter.
au centre : en bleu, les graphes du nombre de contours communs
en fonction du coecient de sparation de deux mixtures.
en rouge, la valeur exacte de correspondant la sparation.
droite : les sorties produites par lalgorithme.
(a) x
1
(b) N()
0 20 40 60 80 100
1.6
1.8
2
2.2
2.4
2.6
2.8
x 10
5

C
o
n
to
u
r
s
C
o
m
m
u
n
s
(c) y
1


(d) x
2
(e) N()
0 20 40 60 80 100
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
x 10
5

C
o
n
to
u
r
s
C
o
m
m
u
n
s
(f) y
2
Table 4 Rsultat de lalgorithme sur deux combinaisons linaires de deux photos initiales
avec a = 0.7 et b = 0.3 selon le modle prsent et volution du nombre de points de contours
communs pour chaque source rcupre.
Voyons maintenant comment lalgorithme ragit face des cas pathologiques ou des situations
qui ne respectent plus forcment le modle tabli dans la section 1.1.
Cas rel
Vous pouvez observer le rsultat obtenu par la mthode de dtection de contours avec la m-
thode du tir sur une photo qui a t prise par le groupe 1 la gure 5. Le rsultat est relativement
16
concluant quoi quil reste des traces de chacune des images sources. Ceci est d au fait que lef-
cacit de la mthode nest garantie que si les hypothses de linarit du modle sont vries,
or les cas rels ne respectent que rarement parfaitement le modle. On peut galement mettre
en doute lhomognit du mlange dans la ralit.
(a) x
1
(b) N()
0 20 40 60 80 100
5200
5250
5300
5350
5400
5450
5500
5550
5600
5650

C
o
n
to
u
r
s
C
o
m
m
u
n
s
(c) y
1
(d) x
2
(e) N()
0 20 40 60 80 100
2000
2500
3000
3500
4000
4500
5000
5500
6000

C
o
n
to
u
r
s
C
o
m
m
u
n
s
(f) y
2


Table 5 Rsultat de lalgorithme sur deux photo relles prises par le groupe 1.
Forte similarit des images mlanges
Nous avons pu relever linecacit de la mthode dans le cas o les deux images dentre sont
exactement les mmes, ce qui avait t prdit par notre thorie. Dans ce cas les images de sortie
sont les mmes que les images dentre.
Dans le mme ordre dide, si les deux mixtures sont trs proches mais pas identiques, une
petite erreur du coecient trouv engendrera une forte dgradation des rsultats, qui seront
la plupart du temps inutilisables. La dtection de contours ncessite donc une direntiation
minimum des images mixes pour marcher ecacement. Exprimentalement on a pu voir que
les deux images mixes sont susamment direncies si | a b |> 0.05, avec a et b tels que
dnis dans la section 2.1.1.
Gradients "faibles"
Les gradients jouent un rle primordial dans notre implmentation et le seuil qui nous permet
de dterminer lexistence dun contour est un paramtre choisir avec prcaution. Un seuil trs
bas permet hypothtiquement de percevoir de plus faibles variations et donc de trouver un
plus proche de celui de la sparation relle des sources, mais, en pratique, un tel seuil rend
lalgorithme trop sensible de faibles gradients, ou gradients "parasites", qui sont trs variables
en fonction des deux sources, ce qui rduit grandement la abilit de la mthode.
La gure 6 illustre ce phnomne, on remarque en eet que le minimum de N() ne correspond
17
plus au point de sparation exact des sources lorsque le seuil de dtermination de contours
devient trop petit.
Dans le but de pouvoir utiliser un seuil trs faible (et donc thoriquement plus prcis) sans ses
dsavantages, nous avons cr des images en noir et blanc uniquement, donc sans aucun niveau
de gris et sans gradient "faible". Ce type dimages peut paratre articiel mais il est courant
dans les documents imprims, ce qui est - rappelons-le - un des objectifs de ce projet.
(a) seuil de 40
0 20 40 60 80 100
4.4
4.6
4.8
5
5.2
5.4
5.6
5.8
6
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(b) seuil de 20
0 20 40 60 80 100
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9
9.1
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(c) seuil de 5
0 20 40 60 80 100
1.365
1.37
1.375
1.38
1.385
1.39
1.395
1.4
1.405
1.41
1.415
x 10
5
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
Table 6 Graphe des contours communs en fonction du seuil dterminant lexistence dun
contour. En a), nous avons un seuil de 40, en b) 20 et en c) 5
Lalgorithme appliqu de telles images avec un seuil de 1, bien infrieur donc au seuil de 5
qui posait dj problme avec limage de la gure 6, nous a donn des rsultats surprenants,
savoir que le graphe de N() possde un pic de diminution du nombre de contours communs
au point prcis de sparation des sources. On peut lobserver sur la gure 7.
Ce rsultat nous conforte dans lide que cest lexistence de ces faibles gradients dans les
images sources qui nous empche de baisser arbitrairement le seuil de dtection de contours
an dobtenir des rsultats plus prcis. Nous reviendrons dans le traitement de signaux sonores
sur dautres mthodes capables de tirer prot de ce type de comportement.
18
(a) x
1
(b) N()
0 20 40 60 80 100
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(c) y
1
(d) x
2
(e) N()
0 20 40 60 80 100
5.12
5.14
5.16
5.18
5.2
5.22
5.24
5.26
5.28
5.3
5.32
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(f) y
2
Table 7 Rsultat de lalgorithme sur deux combinaisons linaires de deux photos sans nuances
de gris avec a = 0.7 et b = 0.3 selon le modle de la section 2.1.1.
Mlanges non uniformes
Nous avons cr des mlanges non uniformes en modiant localement les coecients de mixage,
comme vous pouvez lobserver sur la table 8. Les rsultats obtenus avec EdgeSeparationTir.m
ne sont pas optimaux, comme on pouvait sy attendre puisque le mlange ne respecte pas les
hypothses de notre modle. Si lon complique encore les choses, les rsultats commencent
srieusement se dgrader, comme vous pouvez le voir sur la table 9.
19
(a) x
1
(b) y
1


(c) x
2
(d) y
2
Table 8 Rsultat de lalgorithme sur deux mixages non-homognes.
(a) x
1
(b) y
1
image final couleur 2
(c) x
2
(d) y
2
image final couleur 1
Table 9 Rsultat de lalgorithme sur deux combinaisons fortement non-homognes.
2.1.7 Pistes damlioration
Notre code, quoique fonctionnel, peut encore tre optimis comme en attestent les rsultats sur
les photos relles.
Certaines pistes damlioration pourraient tre :
20
- adaptation du seuil sur les contours en fonction des images reues an darriver au seuil
optimal. On pourrait par exemple dtecter si une image possde ou non de "faibles" gradients
et se permettre un seuil trs bas, le cas chant.
- adaptation du ltre de convolution : des ltre autres que le ltre de Sobel sont peut-tre
mieux adapts certaines situations.
- amlioration de la mthode de recherche minimisant N() : intrinsquement dicile
puisque N() ne possde pas dexpression analytique.
2.2 Traitement de bandes sonores
Nous allons prsent nous pencher sur le problme de la sparation de deux sources sonores s
1
et s
2
. Dans un premier temps, nous allons regarder si nous pouvons appliquer la mthode de
dtection de contours. Pour ce faire, notre modle ncessite dtre quelque peu modi.
2.2.1 Adaptation du modle
Soit deux bandes sonores x
1
et x
2
de mme dimension, combinaisons linaires de deux sources
s
1
et s
2
telles que pour a, b R :
x
1
= a s
1
+ c s
2
x
2
= b s
1
+ d s
2
o on pose A =
_
a c
b d
_
. Cette fois, les coecients a, b, c et d ne sont plus soumis des
contraintes particulires.
En eectuant x
1
x
2
nous obtenons comme point de sparation
1
= a/b et
2
= c/d tandis
quen faisant x
2
x
1
nous obtenons linverse, cest dire
1
= b/a et
2
= d/c.
On remarque que parmi les 4 valeurs de correspondant la sparation des sources, deux obli-
gatoirement sont comprises dans lintervalle [0, 1]. Cependant, ici, pour un ordre de soustraction
donn, on peut tomber sur 0, 1, ou 2 minima de N() dans lintervalle [0, 1] correspondant la
sparation des sources. La soustraction inverse donnera alors respectivement 2, 1 ou 0 valeurs
de [0, 1] correspondant la rcupration dune source.
Pour voir si la mthode de dtection de contour peut tre adapte au vecteurs sonores, tentons
de procder dans la mme ordre que pour les images.
2.2.2 Adaptation du gradient et construction du vecteur de contours
Nous ne sommes plus en prsence dune matrice, mais bien dun vecteur. Ceci implique que le
ltre 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 mme ligne que pour les images, construisons le vecteur des points contours en d-
nissant celui-ci comme tant le vecteur pour lequel seul les points dont la valeur absolue du
gradient est suprieure un seuil x sont remplacs 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 ltre se dnit de la mme manire intuitive que dans la section
2.1.2
21
1 f unc t i on [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 lments
dont la valeur absolue du gradient est suprieure "seuil".
2.2.3 Dirents algorithmes
A prsent, grce nos vecteurs des points de contours, nous allons tenter de procder de ma-
nire similaire aux images an disoler les deux sources s
1
et s
2
. Ceci consiste donc minimiser
le nombre de contours communs, N() ou de manire quivalente, maximiser le nombre dl-
ments sans contours.
Pour cela, nous avons mis au point deux mthodes direntes : une mthode similaire celle
des images mais amliore, et une mthode analytique.
Mthode de la force brute avec ranement
Cette mthode est trs similaire celle utilise pour les images. Nous testons plusieurs valeurs
de et choisissons celle qui minimise N(). Vous pouvez observer son implmentation dans la
fonction EdgeSeparationAudio.m.
Lors de tests pour choisir le seuil optimal, nous avons not quen diminuant le seuil de dtection
de contours, le graphe de N() tendait de plus en plus vers une fonction constante possdant 0,
1 ou 2 "deltas de Dirac" inverses aux points prcis de sparation des sources. Cest le cas idal
que lon obtenait pour les images sans gradients "faibles" la section 2.1.6. Le phnomne est
visible sur la gure 11, o 2 minima apparaissent dans lintervalle [0, 1].
(a) seuil de 10
1
0 20 40 60 80 100
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(b) seuil de 10
4
0 20 40 60 80 100
3.75
3.8
3.85
3.9
3.95
4
4.05
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
(c) seuil de 0
0 20 40 60 80 100
3.95
3.96
3.97
3.98
3.99
4
4.01
x 10
4
N
o
m
b
r
e
d
e
p
o
in
ts
d
e
c
o
n
to
u
r
s

[%]
Table 11 Ranage du seuil an de trouver le seuil optimal. En a), nous avons un seuil de
10
1
, en b) 10
4
et en c) 0
Ce rsultat provient du fait que chaque vecteur source s possde un certain nombre dlments
pour lesquels le gradient (tel que calcul ci-dessus) sannule.
Lors de la combinaison linaire de deux sources, seuls les lments dont le gradient des deux
sources est nul en ce point possderont un gradient nul. On peut donc armer que le nombre
22
dlments dont la norme du gradient est nulle dans une image mixe x est beaucoup plus faible
que celui dans une image source s. Lorsque lon fait tendre le seuil vers 0, on se rapproche de
ce rsultat, ce qui explique les grandes variations observes lors de la sparation des sources.
Ce rsultat trs fort nous a permis de faire un algorithme plus prcis que celui pour les images.
En eet, notre algorithme commence par chercher une premire approximation des points de
sparation des sources et les localise dans un intervalle prcis. Nous concentrons ensuite nos
recherches 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 trouver
des rsultats extrmement prcis pour un nombre doprations relativement rduit. 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 prdit par le modle adapt sur les sons - il est possible de trouver 0,1
ou 2 points de sparation des sources dans lintervalle [0, 1] en fonction de lordre de soustraction,
chaque cas tant pris en compte dans notre code an de pouvoir sparer les 2 sources.
La mthode de dtection de contours peut donc tre adapte pour les sons, bien que cela semble
contre-intuitif a priori. Ceci vient du fait que notre mthode de sparation de deux sources est
base initialement sur la soustraction de deux mixtures et la dtection de contours nest que le
critre choisi pour dtecter la sparation des sources (voir section 2.1.1).
Mthode du calcul direct
Cette mthode utilise la linarit du gradient. Celui-ci est calcul par convolution an de dter-
miner le point exact de sparation des sources. Si lon note par (f) le vecteur gradient dun
vecteur f, on peut crire :
(x
1
x
2
) = (x
1
) (x
2
)
Ainsi, nous pouvons construire le vecteur (i) contenant les valeurs de qui, pour chaque
lment i du vecteur son, annulent son gradient :
(i) =
(x
1
(i))
(x
2
(i))
Une fois tous les coecients calculs, il sut de prendre les deux valeurs apparaissant le plus
souvent dans le vecteur (i). Ceci nous permet de trouver les deux points de sparation avec
une prcision de lordre de lepsilon machine.
Pour toute situation respectant les hypothses de la modlisation, cette mthode donne la
rponse exacte, lexception du cas o les deux entres sont identiques. Par ailleurs, elle
est de loin la meilleure de nos mthodes si le modle est respect. La complexit de lal-
gorithme est en O(n
2
) et vous pouvez consulter le code de lalgorithme dans la fonction
AnalyticalSeparation.m.
Remarquons quil est possible de crer des sources ne possdant aucun point o le gradient
sannule, mettant donc cette mthode en chec, mais quil nous a t absolument impossible de
trouver de telles sources sans les construire nous-mme.
Nous avons essay dutiliser cette mthode sur des images "aplaties", cest--dire crite sous
forme de vecteurs et cette algorithme nous a encore une fois donn des rsultats exacts. Ce code
est consultable dans la fonction AnalyticalSeparationImage.m mais faute de susamment
de tests, nous nen parlerons pas plus dans ce document.
23
2.2.4 Gnralisation plusieurs Sources
Nous nous sommes ensuite intresss des situations impliquant un nombre suprieur de sources
et de micros.
Cas 3 sources et 2 micros
Le problme se rcrit ainsi :
x
1
= a s
1
+ c s
2
+ e s
3
x
2
= b s
1
+ d s
2
+ c s
3
On peut observer sur le graphe 7 des contours communs obtenu, quil est possible de trouver
les trois valeurs de sparant une des sources, en laissant donc deux autres. Il est possible en
rptant plusieurs fois la premire mthode disoler chaque source.
0 20 40 60 80 100
3.99
3.995
4
4.005
4.01
4.015
x 10
4

N
o
m
b
r
e

d
e

p
o
i
n
t
s

d
e

c
o
n
t
o
u
r
s

[%]
Figure 7 Contours communs N() pour 3 sources et deux micros
La mthode du calcul direct peut aussi tre directement applique, puisquil sut de calculer
les trois valeurs de
n
les plus courantes (et non plus les deux). La prcision extrmement
plus leve de cette mthode diminue la propagation des erreurs lors de chaque itration, per-
mettant ainsi dobtenir de trs bons rsultats.
Dans un cas plus gnral avec N sources et toujours deux micros, il faudrait eectuer N fois
lalgorithme avant de pouvoir isoler une source.
Cas 3 sources et 3 micros
Dans ce cas le problme scrit :
x
1
= a s
1
+ d s
2
+ i s
3
x
2
= b s
1
+ e s
2
+ j s
3
x
3
= c s
1
+ f s
2
+ k s
3
La soustraction de la mthode se rsume donc par : x
1
x
2
x
3
Ladaptation de la mthode de la force brute dans ce cas permet davoir le graphe de la gure
12. On peut facilement observer les droites en blanc qui permettent dannuler une seule des
trois sources, avec leur intersection les valeurs de et qui permettent disoler une des sources.
Dans un cas plus gnral avec N sources et M micros, il est possible de rduire de M 1 le
nombre de sources encore prsentes dans les sons mixs par itration dun algorithme tel que
celui de la force brute, ce qui donne une nombre maximal ditrations gal
N1
M1
arrondi
lentier suprieur. Bien entendu les erreurs engendres chaque itration risquent de rendre les
sorties inutilisables si le nombre ditrations ncessaires est trop lev.
24
(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.98
x 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(, ) est
fort. Par contre, plus elle est bleue, plus nous tendons vers un minimum. Les lignes blanches
indiquent les valeurs de et qui permettent disoler deux des trois sources.
2.2.5 Cas pathologiques
A lheure actuelle, nous navons identi que deux situations respectant les hypothses du
modle pour lesquelles lalgorithme chouait dans la sparation des deux sources :
Les deux sons mlangs sont identiques.
Les mixtures sont trop proches. Ceci implique que les deux deltas sont galement trs proches
et on sait de moins en moins les direncier lun de lautre. Malgr tout, une bonne sparation
est toujours possible en augmentant le nombre de points localement an davoir la rsolution
ncessaire pour les distinguer. Ce cas nexiste pas pour la mthode du calcul direct.
2.2.6 Pistes damliorations
Notre algorithme quoique relativement ecace, pourrait encore tre amlior en suivant di-
rentes pistes :
trouver des mthodes toujours plus ecaces pour trouver le point de sparation exact, ou de
manire quivalente, pour trouver la position des deltas.
adaptation intelligente et automatique du seuil an de remarquer si nous sommes en prsence
du bon nombre de deltas signicatifs (dans le cas avec deux sources mlanges il y a deux
deltas signicatifs). Dans le cas contraire, il faudrait augmenter le nombre de points de
discrtisation de manire globale ou locale si lon ne trouve pas de delta ou si les mixages
sont trop proches les uns des autres.
utilisation du seuil pour dtecter si la rponse trouve est correcte un epsilon prs. En eet,
avec un seuil de 0, si nous navons pas trouv le point prcis de sparation, le nombre de
contours est plus ou moins constant, tandis que si on se trouve au point de sparation alors
le nombre de contours diminue drastiquement.
25
3 Independent Component Analysis
Nous nous intressons maintenant une mthode de sparation de signaux sources qui repose
sur de lintuition plus mathmatique et moins graphique que la dtection de contour prsen-
te dans la section prcdente. Nous continuons travailler sur le modle linaire de mixage
X = A S prsent la section 1.1 mais portons plus spciquement notre attention sur lhy-
pothse 3 de notre modlisation : lindpendance statistique des signaux sources s
1
, s
2
, . . . , s
n
.
Nous nous rfrons ici nos sources et nos observations plutt en terme de vecteurs alatoires :
s = [s
1
, . . . , s
n
]
T
et x = [x
1
, . . . , x
n
]
T
Le but principal de lIndependent Component Analysis (ICA) est de gnrer, par combinaison
linaire des signaux mlangs x
1
, x
2
, . . . , x
n
, des sorties y
1
, y
2
, . . . , y
n
aussi indpendantes les
unes des autres que possible. Cest ce que ralise lalgorithme fast-ICA, d principalement
A. Hyvrinen, J. Karhunen et E. Oja ([3]). Dans un premier temps nous aborderons les bases
thoriques qui justient le fonctionnement de cet algorithme, puis nous parlerons des dtails
dimplmentation (particuliers au son et limage) et prsenterons nos rsultats.
3.1 Justication thorique de lalgorithme fast-ICA
Lobjet de cette section est de proposer un critre mathmatique qui rete le mieux pos-
sible lindpendance statistique de signaux alatoires. Cest ce critre que pourra alors, sous la
contrainte supplmentaire de variance unit des sorties, maximiser notre algorithme. A partir
de maintenant nous considrons que nos signaux sources S (et donc nos mlanges X) ont une
moyenne nulle. Si ce nest pas le cas il sut de lenlever et de la rajouter adquatement la n
de lalgorithme. Nous avions vu la section 1.1 que les estimations des sources taient dnies
une constante prs, cest pourquoi nous prendrons la libert dimposer la variance de chaque
source et donc de chaque signal de sortie y
i
lunit.
3.1.1 Mesure de lindpendance statistique de deux variables alatoires
Dans un premier temps nous avions pens minimiser la corrlation entre nos signaux de sortie.
Cependant nous allons voir que dcorrler des signaux alatoires se fait trs facilement par une
transformation linaire (voir section 3.1.3 sur le PCA) et que cest une mesure bien trop faible
dindpendance statistique.
Trois grandes manires de maximiser lindpendance ont t dveloppes dans le cadre de
lICA : la maximisation de la non-gaussianit, lestimation par maximum de vraisemblance et
la minimisation de linformation mutuelle ([3]). Nous ne nous sommes intresss dans ce projet
qu la 1
re
mthode. Il est noter que les deux autres sont souvent quivalentes dans la pratique.
La maximisation de la non-gaussianit se justie par le thorme central limite :
Thorme 1 (Thorme central limite)
Soit X
1
, X
2
, . . . , X
n
, une suite de variables alatoires indpendante et identiquement dis-
tribues (iid), de moyenne et variance
2
, alors la moyenne dchantillon dnie par

X
n
=
1
n

n
i=1
X
i
est une variable alatoire qui converge en distribution vers la loi normale
de moyenne et de variance

2
n
:

X
n
d

n
N(,

2
n
)
26
Avec lhypothse supplmentaire que nos sources s
1
, s
2
, . . . , s
n
sont non gaussiennes et identi-
quement distribues en plus dtre indpendantes, toute combinaison linaire x
1
=

n
i=1

i
s
i
(
i
R, i = 1, . . . , n) est dj un peu plus gaussienne que chaque source prise sparment.
Nous reviendrons sur la validit de ces hypothses en pratique dans la section 3.6 .
Nos vecteurs de sorties y
1
, . . . , y
n
tant obtenus par combinaison linaire des mlanges x
1
, . . . , x
n
,
ils sont en fait des combinaisons linaires "caches" des sources sous-jacentes :
y
i
= w
T
i
x = w
T
i
As = z
T
i
s, (7)
o on a pos z
i
= A
T
w
i
et o w
i
R
n
. La "gaussianit" de y
i
est minimise quand celui-
ci est le moins possible combinaison linaire de sources iid, donc quand z
i
est de la forme
[0, 0, . . . , 1, 0, . . . , 0], cest--dire quand y
i
est gal une des sources de dpart et que w
i
cor-
respond la i
me
ligne de la matrice de dmixage W = A
1
.
Avant de passer ltude de critres concrets de mesure du caractre gaussien dune variable
alatoire, remarquons que notre modle de mixage linaire est toujours indtermin lorsque
les sources sont gaussiennes : la matrice de mixage A et les sources potentielles sont en fait
dnies une matrice orthogonale prs. En eet supposons le vecteur source s R
n
de distri-
bution conjointe T
S
(s) gaussienne, de moyenne nulle et de matrice de covariance C
s
. Alors la
transformation orthogonale x = Ws possde clairement une moyenne nulle et une covariance
C
x
= E
_
Ws(Ws)
T
_
= WC
s
W
T
. De plus sa distribution est galement gaussienne, en eet :
T
X
(x) = T
S
(W
1
x)

s
x

=
T
S
(W
1
x)
det(W)
=
1
(2)
n/2
_
|det(C
s
)| det(W)
2
e

1
2
(
x
T
W
T
C
1
s
W
1
x
)
=
1
(2)
n/2
_
| det(W)|| det(C
s
)|| det(W
T
)|
e

1
2
(
x
T
W
T
C
1
s
W
1
x
)
=
1
(2)
n/2
_
|det(C
x
)|
e

1
2
(
x
T
C
1
x
x
)
.
Si W est orthonormale et que chaque source a une variance unitaire, on a det(W) = det(W
T
) =
1 et C
s
= I
n
et on observe que x suit alors exactement la mme distribution que s. Tous les
modles X = (AW) (W
1
S) avec W
T
W = I
n
seront donc quivalents, ce qui est plus pro-
blmatique quune simple indtermination damplitude. Si en pratique k sources dune certaine
distribution et n k sources gaussiennes ont t mlanges, on ne pourra maximiser la non-
gaussianit que de k sorties et seules les k sources non gaussiennes seront rcupres, les n k
autres resteront indistinguables.
3.1.2 Mesure de la gaussianit dune variable alatoire
Pour maximiser ou minimiser la gaussianit dune variable alatoire, il nous faudrait une gran-
deur statistique qui atteigne un extremum si et seulement si la variable alatoire est normale,
pour une moyenne et une variance xes. Nous allons ici nous intresser au kurtosis et surtout
la nguentropie, qui remplissent dans la majorit des cas ces objectifs.
Maximisation du kurtosis
On dnit classiquement le kurtosis dune variable alatoire x par :
k(x) = E[x
4
] 3(E[x
2
])
2
. (8)
27
Cette grandeur a la particularit de valoir 0 pour les distributions gaussiennes et dtre dirente
de 0 pour presque toutes les autres distributions. Maximiser la valeur absolue du kurtosis dune
sortie y
i
de notre algorithme pourrait donc tre intressant pour maximiser la non-gaussianit.
De plus un rsultat thorique assure que la maximisation de ce critre sous la contrainte de
variance unit des sorties garantit lobtention dune source originale.
Cependant nous nous sommes laisss guider par la littrature sur le sujet (principalement [3]
et [4]) dconseillant lutilisation de ce critre cause de son manque de robustesse aux donnes
aberrantes dchantillon. Nous nallons donc pas nous attarder ici sur le kurtosis mais nous
joignons des dveloppements plus dtaills en annexe B. De plus nous allons voir quun autre
critre bas sur lentropie ore galement des garanties de convergence thorique, bien que le
rsultat soit plus ardu dmontrer.
Maximisation de la nguentropie
On dnit dabord lentropie H(y) ou H(f(y)) dune variable alatoire y de densit de proba-
bilit f
Y
(y) (note plus simplement f(y) partir de maintenant) par :
H(y) =
_
R
f(y) log(f(y))dy. (9)
Cette dnition se gnralise aisment pour un vecteur alatoire y, il sut de remplacer y par
y dans (9). Contrairement aux v.a. discrtes, lentropie dune v.a. continue peut tre ngative
car on peut avoir f(y) > 1. Lentropie caractrise le caractre alatoire ou non prvisible dune
variable alatoire. Elle est dautant plus petite (et ventuellement ngative) que la densit
de probabilit est concentre autour de certaines valeurs particulires, cest--dire quand il est
plus "facile" de prdire la ralisation dune v.a. donne. Si on prend lexemple dune distribution
uniforme :
f(y) =
_
1

si 0 y
0 sinon
, (10)
on calcule H(y) = log(
1

), qui tend vers linni quand , ce qui correspond lintuition.


Lentropie comme mesure de gaussianit se justie par le rsultat suivant
6
:
6. tir de [3], section 5.3.1
28
Thorme 2 (Distribution dentropie maximale)
.
Soit un ensemble de fonctions {F
1
(y), F
2
(y), . . . , F
n
(y)} et des rels c
1
, c
2
, . . . , c
n
. Alors le
problme
max
f
H(f(y)) = max
f

_
f(y) log(f(y))dy
sous les contraintes
_
f(y)F
i
(y)dy = c
i
, i = 1, . . . , n
_
f(y)dy = 1,
(11)
est rsolu par une fonction de la forme :
f(y) = Aexp
_
n

i=1
a
i
F
i
(y)
_
, (12)
o les a
i
et A se calculent en injectant f dans les contraintes (11) et en rsolvant le systme
de (n + 1) quations non linaires (n + 1) inconnues. Toutes les intgrales sont prises sur
lentiret de la droite relle. y peut tre scalaire ou vectoriel.
Si on dispose dinformations sur une densit de probabilit f(y) uniquement sous forme de
moments de fonctions particulires, lestimateur optimal de f est donn par 12 car cest la
fonction la plus alatoire compatible avec les donnes, celle qui fait le moins dhypothses a
priori. En particulier si F
1
= y et F
2
= y
2
, on obtient f(y) = Aexp (a
1
y +a
2
y
2
), cest--dire
une gaussienne ! A moyenne et variance xes, la distribution ayant lentropie maximale est la
distribution normale.
Au lieu de minimiser lentropie de nos variables de sortie y
i
, on prfrera dans le cadre de lICA
maximiser la nguentropie J(y) ou J(f(y)), qui a elle lavantage dtre toujours positive et nulle
seulement si y est gausienne. La nguentropie pour un vecteur alatoire y est dnie par :
J(y) = H() H(y), (13)
o est un vecteur gaussien de mme moyenne et covariance que y. La nguentropie nest pas
utilisable telle quelle car elle requiert le calcul dintgration de la densit de probabilit des y
i
,
qui est dicile estimer. Il faut donc dvelopper des approximations de la nguentropie.
Approximation de la nguentropie
Supposons nouveau disposer des esprances dun ensemble de fonctions {F
1
, . . . , F
n
} par
rapport une variable alatoire y de distribution f, de moyenne nulle et de variance unit :
_

_
_
f(y)F
i
(y)dy = c
i
, i = 1, . . . , n,
_
f(y) y dy = c
n+1
= 0
_
f(y) y
2
dy = c
n+2
= 1
(14)
En pratique on choisira des F
i
et on estimera les c
i
via des moyennes dchantillon. On fait
de plus lhypothse (purement technique) que les F
i
forment une base orthogonale au sens du
produit scalaire suivant :
< F
i
, F
j
>:=
_
(y)F
i
(y)F
j
(y)dy =
ij
, (15)
o (y) =
1

2
e
y
2
/2
est la densit de probabilit dune gaussienne N(0, 1). On suppose enn,
nouveau pour simplier les calculs, que les F
i
sont orthogonales aux polynmes de degr
infrieur ou gal 2 :
29
_
(y)F
i
(y)y
k
dy = 0, k = 0, 1, 2. (16)
La distribution dentropie maximale satisfaisant les contraintes (14) peut alors tre approxime
par
7
:

f(y) = (y)
_
1 +
n

i=1
E[F
i
(y)] F
i
(y)
_
. (17)
En injectant cette fonction dans la dnition (13) et avec quelques manipulations et approxi-
mations algbriques, on peut montrer que la nguentropie dune variable alatoire y peut tre
approche par :
J(y)
1
2
n

i=1
E[F
i
(y)] . (18)
Comme lquation (17) nous donne peu prs la distribution f(y) dentropie maximale, nous
avons une borne suprieure sur lentropie de notre v.a. y, et il est donc probable quen mini-
misant cette quantit, on minimise la vritable entropie de y ou, de manire quivalente, on
maximise sa nguentropie J(y), donc quon "dgaussianise" y.
En pratique on a des fonctions {G
1
, . . . , G
n
}
8
ne respectant pas forcment (15). Cependant
on peut nouveau montrer
9
que pour autant que les G
i
soient linairement indpendantes et
ne soient pas des polynmes de degr 2 (on parlera de fonctions non-quadratiques), on peut
toujours extraire une base F
1
, . . . , F
n
respectant (15) et (16) par une orthogonalisation de type
Gram-Schmidt. La nguentropie de la v.a. y peut alors tre approxime par :
J(y)
n

i=1
k
i
[E[G
i
(y)] E[G
i
()]]
2
, (19)
o les k
i
R
+
et N(0, 1). Dans le cas dune seule fonction G(y), on obtient :
J(y) [E[G(y)] E[G()]]
2
, (20)
qui constituera notre fonction objectif nale maximiser. La seule inconnue ce stade est la
nature de la fonction G(y).
Choix de G(y) pour lapproximation de la nguentropie
Le choix de G se rvle assez vaste mais il faut tout de mme garder certaines contraintes
lesprit :
1. fonction non-quadratique : contrainte technique vue au point prcdent
2. simplicit numrique : E[G(y)] doit tre aise calculer par les estimateurs dchantillon
classiques
3. direntiabilit : sera ncessaire pour lalgorithme fast-ICA
4. croissance modre : G(y) ne devrait typiquement pas grandir plus vite que y
2
, asymp-
totiquement. Cela permet dviter des problmes dintgrabilit de la fonction dentropie
maximale f telle que dnie par (12) et de garantir donc son existence. Dautre part, une
croissance lente ore une plus grande robustesse aux donnes aberrantes dchantillon.
7. dmontr dans [3], section 5.6.1., en partant de lhypothse que f est proche dune distribution gaussienne
et que les constantes a
n+1
et a
n+2
lies aux contraintes de moyenne et de variance de f sont prpondrantes
dans lexpression (12).
8. Nous verrons au point 3.1.2 comment bien les choisir
9. Voir [3].
30
5. cohrence avec f
Y
(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))].
Idalement on a donc G(y) = log(f(y)), au signe prs.
A la lumire de ces considrations, deux fonctions se dmarquent :
G
1
(y) = log(cosh(y)) : peut tre vue comme une version lisse de la fonction valeur absolue
|y|, qui est elle proportionnelle au logarithme de la loi de distribution laplacienne de moyenne
nulle f(y) =
1
2b
e

|y|
b
(
2
= 2b
2
), relativement courante en pratique.
G
2
(y) = exp(y
2
/2) : plus heuristique, peut tre vue comme le logarithme dune fonction
de densit de probabilit f tendant vers 1 en linni, puisque lim
y
exp(y
2
/2) = 0 =
lim
y
log(f(y)) si lim
y
f(y) = 1. Elle prendrait donc bien en compte le poids des queues de dis-
tributions puisquassocie lentropie dune distribution f ayant une masse de queue innie.
Ces deux fonctions sont les plus couramment utilises en pratique dans le cadre de lICA et
cest donc avec celles-l que nous travaillerons dsormais.
Avant de dvelopper lalgorithme fast-ICA, nous passerons par une dernire tape dite de "pre-
processing" qui consiste retirer la moyenne des observations x = [x
1
, . . . , x
n
]
T
et surtout
les dcorrler par la technique de Principal Component Analysis (PCA). Cela permettra de
simplier lalgorithme.
3.1.3 Pre-processing : PCA
Aprs avoir impos la variance des sources s et des sorties y, nous allons nous arranger pour que
les observations x aient galement une matrice de covariance identit. Cela se fait par simple
transformation linaire x = V x, que lon appelle transforme de Karhunen-Love, Principal
Component Analysis, "whitening" ou encore "sphering".
Une matrice de covariance dune v.a. relle est toujours symtrique et peut donc tre diagona-
lise comme suit :
C
x
= E[xx
T
] = EDE
T
, (21)
avec E une matrice orthogonale de vecteurs propres et D la matrice diagonale contenant les va-
leurs propres positives {
1
, . . . ,
n
} de C
x
associes. La transformation associe V = D
1/2
E
T
permet bien de blanchir x, en eet :
E[ x x
T
] = E
_
D
1/2
E
T
xx
T
E(D
1/2
)
T
_
= D
1/2
E
T
C
x
E(D
1/2
)
T
= D
1/2
D(D
1/2
)
T
= I
n
,
o on utilise le fait que D
1/2
est aussi diagonale et gale sa transpose. Observons aussi que :
x = D
1/2
E
T
x = D
1/2
E
T
As =

As. (22)
Les observations dcorrles x sont associes une nouvelle matrice de mixage

A = V A =
D
1/2
E
T
A, qui a le grand avantage dtre orthogonale. En eet comme C
x
= I
n
= C
s
, on a :
I
n
= E[ x x
T
] =

AE[ss
T
]

A
T
=

A

A
T
. (23)
On interprte gnralement ce rsultat en considrant que lon a rduit le nombre dinconnues
de moiti. En eet la matrice de dmixage

W = WV
1
= WED
1/2
estimer, orthogonale
galement, ne contient plus que
n(n1)
2
degrs de libert. Dans la drivation de lalgorithme
fast-ICA, nous supposerons maintenant avoir aaire des donnes centres et blanchies et
tenterons dapprocher la matrice

W.
31
3.2 Lalgorithme fast-ICA
Commenons par estimer une ligne de la matrice de dmixage aprs PCA w
i
(les tildes sont
maintenant omis), maximisant la nguentropie dune sortie y
i
= w
T
i
x.
3.2.1 Estimation dun vecteur w
i
On remarque dabord que les maxima intressants de notre fonction objectif J(y
i
) [E[G(y
i
)] E[G()]]
2
se produisent en des maxima de E[G(y
i
)]. En eet le gradient de J(w
T
i
x) par rapport w
i
scrit :
J
w
i
= 2
_
E
_
G(w
T
i
x)
_
E[G()]
_
. .
a
E
_
xg(w
T
i
x)
_
. .
b
, (24)
o g est la drive de G. Il sannule quand a = 0, ce qui nest pas intressant car y
i
= w
T
i
x
est alors proche dune gaussienne, et surtout quand b = 0, avec b correspondant au gradient
de E[G(w
T
i
x)]. La maximisation de E[G(w
T
i
x)] sous la contrainte w
i
= w
T
i
w
i
= 1 est
ncessairement obtenue en des points satisfaisant la condition du lagrangien :
E
_
xg(w
T
i
x)
_
w
i
= 0. (25)
Lintrt de cette dernire quation est que, sous de faibles hypothses de rgularit sur G et
avec une condition sur la source s
i
, il a t dmontr
10
que la maximisation de E[G(w
T
i
x)]
sous la contrainte w
i
= 1 donne des vecteurs w
i
correspondant bien une ligne de la
nouvelle matrice de dmixage

W. Fast-ICA consiste rsoudre lquation (25) par la mthode
de Newton-Raphson, dont le pas ditration w
i
est donn par JF(w
i
)
1
F(w
i
), o F dsigne
la fonction gauche de lgalit (25) et JF son jacobien. Ce dernier sobtient par :
JF(w
i
) = E[xx
T
g

(w
T
i
x)] I
n
. (26)
Linversion de JF pose cependant problme. Faute de mieux, on peut faire lapproximation
E[xx
T
g

(w
T
i
x)] E[xx
T
]E[g

(w
T
i
x)] = I
n
E[g

(w
T
i
x)], grce au PCA eectu sur x. On a alors
JF(w
i
)
1

1
E[g

(w
T
i
x)]
I
n
, (27)
o il faut encore estimer . En multipliant (25) par w
T
i
gauche et en utilisant w
i
= 1, on
voit quon peut faire lapproximation E[w
T
i
xg(w
T
i
x)], avec w
i
litr courant. On peut
enn trouver litration de point-xe ralise par fast-ICA :
w
i
w
i
JF(w
i
)
1
F(w
i
)
w
i
w
i

E
_
xg(w
T
i
x)
_
w
i
E[g

(w
T
i
x)]
, = E[w
T
i
xg(w
T
i
x)]
(28)
qui est suivie de la normalisation :
w
i
w
i
/w
i
. (29)
On jugera de la convergence par le cosinus de langle entre deux itrs successifs w
+
i
et w
i
:
cos((w
+
i
, w
i
)) =
w
+T
i
w
i
w
+
i
w
i

. (30)
10. [3], section 8.3. La seule condition sur s
i
est que E[s
i
g(s
i
) g

(s
i
)] = 0 i, ce qui gnralise la condition
de kurtosis des sources non nuls que lon a vue dans la section 3.1.2 lors de la maximisation du kurtosis.
32
Cet algorithme allie donc robustesse statistique et rapidit de convergence garantie par Newton-
Raphson, mme approxime.
Les fonctions g et g

utilises en pratique sont donc les drives premire et seconde dune des
deux fonctions non quadratiques ayant servi lapproximation de la nguentropie :
G
1
(x) = log(cosh(x)) : g
1
(x) = tanh(x) et g

1
(x) = 1 tanh(x)
2
G
2
(x) = exp(x
2
/2) : g
2
(x) = x exp(x
2
/2) et g

2
(x) = exp(x
2
/2)(1 x
2
)
Par la suite nous nous rfrerons souvent lune ou lautre fonction par sa drive premire :
tanh ou exp.
3.2.2 Estimation de plusieurs vecteurs
Pour viter que les nouveaux vecteurs estimer ne convergent vers les mmes sources, nous
veillons maintenir la matrice de dmixage W (aprs whitening) orthogonale. Cela correspond
en fait une contrainte de dcorrlation et de variance unit des sorties. En eet :
E[y
i
y
j
] =
ij
E[w
T
i
xx
T
w
j
] = w
T
i
I
n
w
T
j
= w
T
i
w
T
j
=
ij
. (31)
On peut opter pour deux mthodes : la dcorrlation symtrique et la dation.
1. Dcorrlation symtrique : on calcule toutes les sorties en mme temps. Il faut transposer
lquation 28 matriciellement en gardant lesprit que :
W =
_

_
w
T
1

.
.
.
w
T
n

_

_
W
T
=
_
w
1
, , w
n

_
, (32)
ce qui donne
11
:
W
T
W
T
+ diag(
i
)
_
diag(
i
) +E
_
g(y)y
T
__
W
T
, (33)
o
i
= E[y
i
g(y
i
)] et
i
= 1/ (
i
E[g

(y
i
)]). La dcorrlation se fait alors par
W
T
(W
T
W)
1/2
W
T
, (34)
o on trouve facilement la matrice racine carre de la matrice W
T
W car celle-ci est
symtrique et donc diagonalisable : W
T
W = EDE
T
(avec E
T
E = I). On peut facile-
ment vrier que (W
T
W)
1/2
= ED
1/2
E
T
. On vrie galement que (W
T
W)
1/2
W
T
est orthogonale en utilisant les proprits (W
1
)
T
= (W
T
)
1
, (W
1/2
)
T
= (W
T
)
1/2
et
(W
1
)
1/2
= (W
1/2
)
1
.
2. dcorrlation par dation : on estime chaque vecteur w
i
sparment mais aprs chaque
itration (28) on eectue une rorthogonalisation de type Gram-Schmidt-Arnoldi. Si on
a dj estim p sorties et donc p lignes de W, on fait :
w
p+1
w
p+1

i=1
w
T
p+1
w
i
w
i
(35)
et on renormalise w
p+1
. Si on stocke les lignes w
i
dans une matrice W dont les lignes
(p + 2), . . . , n sont encore des zros, on peut crire :
w
p+1
w
p+1
W
T
Ww
p+1
. (36)
Cet algorithme est donc trs facilement utilisable pour sparer plusieurs sources, mme si nous
nous sommes limits ltude du cas de deux sources dans le cadre de ce projet. Par la suite, dans
les dtails dimplmentation pratique, nous nous rfrerons souvent aux options de dcorrlation
par def ou sym.
11. Issu de [4], section 6.3.
33
3.2.3 Complexit calculatoire
La complexit de notre algorithme est en O(n
2
) selon une premire estimation. On considre
que lalgorithme reoit une matrice k n reprsentant k signaux de n chantillons sparer et
que le nombre k est x ( 2 chez nous). On sintresse ici la mthode utilisant la fonction
exp comme approximation de la nguentropie et la dcorrlation symtrique, mais les autres
cas sont fort similaires.
Le pre-processing consiste retirer la moyenne, opration proportionnelle kn, calculer la
matrice de covariance R
kn
, ce qui est donc k
2
n et en calculer les valeurs et vecteurs
propres. Des algorithmes de type QR sur une matrice symtrique k k tournent typiquement
en O(k
3
) et est donc temps constant puisque k est x.
Une itration de point xe fast-ICA est visible sur le listing 3. On y eectue :
ligne 1 : multiplication dune matrice k k avec une k n, O(k
3
n)
ligne 2, 3, 4 : multiplications de matrices k n lment par lment ou sommes de tous les
lments, O(kn)
ligne 5 : Lam tant un vecteur k 1, on a ici des oprations en O(kn +k)
ligne 6 : la multiplication de gY par Y

est en O(k
2
n
2
)
Nous navons donc que des oprations seectuant en temps polynomial par rapport k et n.
k tant x 2 dans notre cas et la plus haute puissance de n intervenant tant n
2
, on a estim
une complexit en O(n
2
).
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 + di ag (Alpha)*( - di ag (Lam) + gY*Y )*W ;
7 [...]
8 W = r e a l ( i nv (W * W) ^(1/2)) * W ; % orthogonalisation
Listing 3 Itration matricielle utilisant la fonction de nguentropie exp(u
2
/2) avec
dcorrlation symtrique.
3.3 Implmentation pratique pour les images
Nous abordons ici dans un premier temps les direntes possibilits de mises en forme des
images pralablement lappel dICA. Ensuite nous voyons comment lalgorithme ICA est
concrtement appel. Enn, nous nous intressons aux problmes de normalisation post-ICA dus
lindtermination damplitude du modle, particulirement critique pour les photos couleur.
3.3.1 Traitement des images pr-ICA
Le traitement dimages mixes via lalgorithme ICA peut seectuer de multiples manires et
une mise en forme des images adapte peut donner un meilleur rsultat avec le traitement
de lalgorithme ICA. Dans ce point, nous traitons une sparation de sources partir de deux
photos issues dun mme mixage, avec toutes les options ne concernant pas la mise en forme
pr-ICA laisses par dfaut,
12
an danalyser objectivement le rsultat des dirents traite-
ments possibles.
12. Options par dfaut 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
La situation que nous considrons ici est le mixage entre un document crit et un reet. Linten-
sit du document est exprime par s
1
et celle du reet par s
2
. Dans cette situation, les mixtures
[x
1
x
2
] sont obtenues par x
t
=
_
0.05 0.95
0.01 0.99
_
s
t
, o s = [s
1
s
2
].
Par ailleurs, nous donnons la qualit des rsultats selon le critre dni dans la modlisation
(cf. point 1.3).
Noir et blanc
Puisque la problmatique consiste rcuprer un document rendu illisible cause dun reet,
il est pertinent de traiter les images en noir et blanc lors de la sparation des sources. Le
traitement consiste donc simplement en une conversion totale des mixtures en niveaux de gris.
Ensuite, les matrices converties sont aplaties pour leur appliquer aprs lalgorithme ICA. Le
rsultat est donc lui-mme en niveaux de gris.
Mixed images
Recovered 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 lalgorithme ICA aux mixtures converties en niveaux de gris.
Nous pouvons constater via la gure 8 que le rsultat est plutt correct, sachant que le docu-
ment est visible moins de 5% dans les mixtures.
Nanmoins, le traitement en niveaux de gris nest pas toujours intressant. De fait, on pourrait
imaginer une situation o le document contient une image en couleur. La conversion en niveaux
de gris pourrait altrer lidentication visuelle de limage.
RGB component-by-component
Les images sont traites en couleurs, selon les niveaux de rouge, de vert et de bleu
13
pr-
sents dans limage. Le traitement RGB component-by-component applique successivement lal-
gorithme ICA aux composantes rouges, vertes et bleues des mixtures, sparant donc les sources
13. Lacronyme employ est RGB
35
composante par composante.
Etant donn que lalgorithme ICA dtermine alatoirement lordre des sources spares par
ses soins, il nest pas assur que la premire composante rouge soit celle qui aille avec la
premire composante verte, par exemple. Il est donc ncessaire de dnir un critre permettant
de regrouper correctement les composantes RGB spares par lalgorithme ICA.
Pour ce faire, nous observons la corrlation de la premire composante rouge avec celles vertes
et ensuite bleues. Une corrlation maximum indique que les composantes appartiennent une
mme image RGB. Ainsi, si la corrlation entre la premire composante rouge et la seconde
verte est plus grande que celle avec la premire verte, alors la premire composante rouge et la
seconde verte dnissent une mme image.
Le listing en annexe C.1 met en vidence limplmentation excutant le traitement RGB
component-by-component.
Une autre dicult est la cohrence des intensits individuelles RGB. De fait, lalgorithme ICA
spare les sources une amplitude prs. Il est donc tout fait possible dobserver dune part
une composante rouge spare une intensit plus leve que loriginale et dautre part une
composante verte spare une moindre intensit que loriginale, par exemple. Ce type de
situation, illustre la gure 9, est dlicat puisque limage spare va prsenter des couleurs
insenses par rapport loriginale. Ce problme est trait par la normalisation des rsultats,
que nous dveloppons au point 3.3.3.
Mixed images
Recovered 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 Lalgorithme ICA est appliqu itrativement aux composantes RGB des mixtures.
On constate que les couleurs des images spares sont incohrentes par rapport celle des
sources.
Malgr les dicults de mise en oeuvre propres au traitement RGB component-by-component,
celui-ci prsente deux avantages.
Le premier est que dans la ralit, la situation ne consiste certainement pas en des mixages
linaires. En eet, les bandes de frquence du spectre visible ne se rchissent pas de la mme
36
manire, pouvant par exemple provoquer des interfrences constructives ou destructives.
Le second avantage est une rapidit de traitement, puisque la complexit de lalgorithme fast-
ICA est la grosse louche O(N
2
), avec N le nombre total dentres, divis par 3 pour chaque
composante.
Noir et blanc vers RGB
Le traitement consiste appliquer aux mixtures dnies selon leurs composantes RGB la trans-
formation obtenue pour des mixtures exprimes en niveaux de gris. Le rsultat nal est donc
bien en couleur. Ce traitement est pertinent puisque la conversion en niveaux de gris constitue
en quelques sortes une compression, une moyenne de linformation des 3 couleurs en une seule
donne. Limplmentation excutant ce traitement est reprise dans le listing en annexe C.2.
Ce traitement a lavantage de traiter uniformment les composantes RGB (contrairement
RGB component-by-component), avec une complexit temporelle proche de celle du traitement
Noir et blanc. Toutefois, lalgorithme ICA spare toujours une amplitude prs, limitant
toute garantie quant au rendu des couleurs.
Mixed images
Recovered 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 colores partir de la transformation obtenues pour les
mixtures converties en niveau de gris. On constate que les couleurs sont traites uniformment.
Le fond du texte est brun cause de la normalisation eectue partir de la moyenne des
mixtures (cf. point 3.3.3).
RGB all-in-one
Etant donn que la modlisation du problme suppose des mixages linaires des sources, il est
lgitime dappliquer lalgorithme ICA en une fois sur les mixtures colores. Les mixtures sont
nouveau exprimes selon leurs composantes RGB.
37
Pour ce faire, il est ncessaire daplatir les trois matrices RGB en un vecteur, pour ensuite y
appliquer lalgorithme ICA. Les sources spares sont alors remises en format RGB 3 "tages".
Limplmentation permettant lexcution de ce traitement est visible au listing en annexe C.3.
Puisque le traitement applique une unique fois lalgorithme ICA, les composantes RGB sont
spares uniformment, comme pour le traitement Noir et blanc vers RGB. Toutefois, le r-
sultat est en un sens plus prcis puisquil ne se base pas sur une compression des donnes
14
mais conserve linformation des 3 couleurs. Encore et toujours, lalgorithme ICA ne spare qu
une amplitude prs, laissant quelques carts possibles au niveau des couleurs.
Mixed images
Recovered 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 rsultat est presque parfait,
lexception du fond gris pour le texte, justi la fois par le fonctionnement de lalgorithme
ICA et par la normalisation partir de la moyenne des mixture (cf. point 3.3.3).
Bien que les rsultats soient probants par rapport la modlisation du problme, il faut noter
que la complexit de lalgorithme ICA navantage pas ce type de traitement pour des images
de taille importante.
Par ailleurs - comme dit au point 3.3.1 - il savre que dans la ralit les mixages ne sont
pas linaires tant donn que les bandes de frquences du spectre visible peuvent se rchir
diremment. Ds lors, les rsultats obtenus pour des cas rels peuvent savrer incorrects tant
donn que le modle nest pas rigoureusement vri.
3.3.2 Appel de lalgorithme ICA
Lalgorithme ICA est excut par la fonction fastica.m dans BSS.m. Cette fonction prend
toujours deux vecteurs, qui peuvent reprsenter dans le cas des images :
2 matrices mn aplaties dune image soit exprime 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
2 matrices mn 3 aplaties dune image exprime en RGB
16
Notons que les deux vecteurs soumis fastica.m peuvent tre des sous-chantillonnages dans
tous les cas pour rduire les calculs, sauf si le traitement dimage appliqu est RGB component-
by-component (nous parlons brivement du sous-chantillonnage au point 3.5).
On a vu que lalgorithme ICA pouvait sappliquer des images traites diremment selon lop-
tion choisie (cf. point 3.3.1.). Nous allons maintenant voir quil est aussi possible de nuancer le
processus de lalgorithme ICA, avec 4 combinaisons possibles.
Dune part, la nguentropie peut tre approxime laide de fonctions non-quadratiques. En
loccurrence, nous pouvons utiliser soit log(cosh(u)), soit exp(
u
2
2
)
17
. Nous les dnommons
plus souvent par leurs drives qui apparaissent dans litration de Newton-Raphson de lalgo-
rithme ICA : tanh(u) et uexp(
u
2
2
)
18
.
Dautre part, les sorties peuvent tre dcorrles de deux manires. Soit par approche sym-
trique, soit par dation. Ces deux approches ont t prsentes au point 3.2.2.
3.3.3 Normalisations post-ICA
Comme lalgorithme ICA spare les sources une amplitude prs, il est nest pas superu de
procder une normalisation des rsultats issus dun traitement dimages. La normalisation
du traitement doit donc rendre cohrents les rsultats obtenus. Les normalisations implmen-
tes sont utilisables pour tous les traitements que nous avons conus et dvelopps au point
3.3.1. Nous eectuons les direntes normalisations sur une mme situation de mixages, avec
les options standards
19
{tanh,sym}
20
an danalyser objectivement le rsultat des dirents
traitements possibles.
Pour rappel, si lon considre lintensit du document exprime par s
1
et celle du reet par s
2
,
les mixtures [x
1
x
2
] sont obtenues par x
t
=
_
0.05 0.95
0.04 0.96
_
s
t
, o s = [s
1
s
2
]. Lalgorithme ICA
approxime linverse de la matrice de mixage A
21
par W tel que : Wx
t
= s
t
Par ailleurs, nous donnons la qualit des rsultats selon le critre dni dans la modlisation
(cf. point 1.3).
Normalisation de la matrice A
Puisque les mixages sont supposs linaires et que - en particulier dans le cas dun mixage
dimages - la somme des opacits dune mixture doit valoir lunit, il est tout fait pertinent
dimposer que la somme des lments dune ligne de la matrice de mixage A vaille lunit. Ainsi,
aprs avoir normalis la matrice A issue du traitement dimages
22
, nous appliquons y
t
=

A
1
x
t
.
Limplmentation de cette normalisation est visible dans le listing en annexe C.4. Sur la gure
12, on peut constater que la normalisation de la matrice A donne un rsultat presque parfait
pour notre exemple de rfrence.
16. Dans ce cas, on traite toutes les composantes en une seule fois, cf. point 3.3.1
17. Dtails thoriques dvelopps au point 3.1.2
18. Notes tanh et exp comme options dans notre implmentation.
19. Standard au sens de notre fonction matlab BSS.m
20. Voir le point 3.1.2 pour tanh et def. Le traitement est RGB component-by-component (cf point 3.3.1)
21. Une entre de A reprsente physiquement lopacit dune source dans une mixture.
22. La matrice A normalise est note

A, ne pas confondre avec la matrice

A associes aux observations
blanchies par PCA.
39
Mixed images
Recovered 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 Rsultats normaliss selon la normalisation de la matrice de mixage A issue de
lalgorithme ICA.
Moyenne des mixtures
Nous pouvons normaliser les rsultats indpendamment de la modlisation, ce qui savre assez
approximatif dans les situations relles. La normalisation des rsultats se fait dans ce cas sur
base des donnes du problme. En loccurrence, les mixtures sont les seules donnes prcises
23
du problme dont nous disposons. Il est donc cohrent den tenir compte. Cest pourquoi, nous
normalisons les rsultats du traitement dimages selon la moyenne des mixtures. Les rsultats
sont normaliss composante par composante, assurant ainsi une mme luminance en entre de
lalgorithme ICA quen sortie. La normalisation est exprime par limplmentation reprise au
listing en annexe C.5.
Nanmoins, cette normalisation nest pas toujours pertinente. De fait, si une des sources est
peu prsente dans les deux mixtures, comme le suggre notre cas avec le document illisible
cause dun reet, alors sa sparation normalise pourrait tre fort loigne de loriginale. Elle le
sera dautant plus si lautre source - qui est prpondrante dans les mixtures - a une luminance
fort dirente de la premire source. Or, ayant fait lhypothse de lindpendance des sources et
donc de leur luminance, ce type de normalisation semble tre dfavoris. Les gures 8, 9,10 et 11
reprsentent des situations o la normalisation selon la moyenne des mixtures a t applique.
3.4 Implmentation pratique pour les sons
Le traitement des sons est plus simple que celui des images tant donn que sa reprsentation
numrique est moins complexe (cf. point 1.2). Le traitement consiste appliquer lalgorithme
ICA sur les vecteurs reprsentant les sons mixs. Lexcution de lICA peut tre nuance au ni-
23. Pour autant que le support nait pas altr les signaux enregistrs.
40
veau de la fonction approximant la nguentropie
24
et au niveau de la dcorrlation du rsultat
25
.
Les sources spares sont normalises lintervalle [1; 1], car par exprience nous avons
constat que le rendu tait correct. Par ailleurs, la prcision numrique est dautant meilleure
autour de zro. Cette normalisation est visible au listing en annexe C.6. Un exemple est illustr
via la gure 13.
0 1 2 3 4 5
x 10
4
3
2
1
0
1
2
3
Mixed sounds
0 1 2 3 4 5
x 10
4
1
0.5
0
0.5
1
Recovered sounds
(quality: 3.8853 & 3.9054)
0 1 2 3 4 5
x 10
4
1
0.5
0
0.5
1
Sources
0 1 2 3 4 5
x 10
4
8
6
4
2
0
2
4
6
8
0 1 2 3 4 5
x 10
4
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 10
4
1
0.5
0
0.5
1
Figure 13 Exemple dapplication de lalgorithme ICA deux mxitures sonores.
3.5 Echantillonnage des signaux
La taille des vecteurs soumis lalgorithme ICA peut devenir handicappant au niveau du temps
de calcul, bien que des images de 4 5 Mb puissent tre traites sans problme en une minute
ou moins. Cest pourquoi, il peut savrer intressant deectuer lalgorithme sur un chantillon-
nage des mixtures pour ensuite appliquer la transformation obtenue aux mixtures compltes.
Dans le cas des images, ceci est possible pour tous les traitements, lexception du traitement
RGB component-by-component. Lchantillonnage consiste tout simplement prendre un
lment sur deux des vecteurs reprsentant les mixtures. Pour ce faire, les matrices ont t
aplaties en vecteurs.
Dans le cas des sons, puisque la reprsentation numrique est dj une forme vectorise, il sut
de slectionner un lment sur deux.
Limplmentation appliquant ce traitement supplmentaire est mise en vidence dans le listing
en annexe C.7.
24. soit log(cosh(u)), soit exp(
u
2
2
) (cf. point 3.1.2)
25. soit par symtrie, soit par dation (cf. point 3.2.2)
41
On notera que lchantillonnage altre peu les rsultats obtenus sur les cas synthtiques traits.
Les rsultats sont similaires ceux des gures du point 3.3.1 et 3.4. Evidemment, la qualit
diminue quelque peu dans ce cas.
3.6 Rsultats
Nous venons de voir limplmentation pratique mettant en oeuvre le processus de sparation
de sources laveugle, en utilisant comme outil de sparation principal lalgorithme ICA. Cet
algorithme peut tre appliqu et sappliquer de multiples manires tant donn toutes les op-
tions dimplmentation, comme cela est illustr sur la gure 14.
Figure 14 Petit aperu de quelques possibilits de rsultats obtenus partir de deux mmes
mixtures, traites selon direntes options dapplication de lalgorithme ICA.
Les rsultats obtenus pour des mixages conformes la modlisation du point 1.1 ont t prsen-
ts de manire assez complte au point prcdent, Implmentation pratique
26
, cest pourquoi
nous concentrons notre intrt ici prsenter les rsultats pour les cas limites
27
, tendant se
rapprocher dune situation relle. On aborde aussi lun ou lautre cas rel.
Les cas prsents sont principalement des images. Nous justions cette limitation de cas audio
par la dicult se procurer des chantillons ainsi qu en produire, faute de moyens logistiques
adapts. Il est de toutes faons clair que ceux-ci peuvent tre dicilement apprcis dans un
rapport crit, tant donn quil est plutt dlicat de juger la qualit dun son partir de son
graphe temporel.
26. Voir point 3.3.
27. Selon les hypothses du modle mathmatique
42
Pour rappel, notre modlisation mathmatique reposait sur plusieurs hypothses : mixage li-
naire, homogne et constant, sources indpendantes, pas de dcalage temporel ou spatial entre
les sources. Nous nous sommes galement rendu compte que les sources gaussiennes ne pou-
vaient pas tre spares. Le modle thorique de lICA par maximisation de la non-gaussianit
a introduit lhypothse supplmentaire que les sources doivent idalement tre identiquement
distribues. Nous allons donc revenir sur les hypothses les plus critiques qui ne se vrient
quapproximativement, voire pas du tout, et verrons ainsi en quoi elles inuencent le traite-
ment de sons ou dimages.
3.6.1 Mixage linaire, homogne et constant
Cette hypothse a certainement peu de chance dtre vrie dans la ralit. Nous avons no-
tamment pu nous en rendre compte en remarquant quavec des photos relles ctait en gnral
lalgorithme traitant chaque couleur sparment qui donnait les meilleurs rsultats. Des ma-
trices de mixage parfois tonnamment direntes sont produites dune couleur lautre, ce qui
suggrerait un mlange non homogne et dpendant de la longueur donde des ondes rchies,
par exemple.
On peut observer aux gures 15 et 16 les rsultats obtenus dans le cas de mixages non uni-
formes dimages. On constate que le premier est meilleur que le second. Ceci est d au fait que
dans la premire situation la non-uniformit du reet est localise identiquement sur les deux
mixages
28
, ce qui nest pas le cas pour la seconde situation. A vrai dire, les rsultats nont rien
de surprenants par rapport au fonctionnement de lalgorithme ICA : lalgorithme dtermine
une transformation moyenne quil applique aux mixages an de sparer les sources. Il est
donc logique de trouver des rsidus dans les sources spares, rsidus localiss aux endroits
dopacit htrogne. Une amlioration de limplmentation cet gard consisterait en un trai-
tement segment : on diviserait les mixages en plusieurs sous-images selon certains critres
29
qui seraient traites successivement par lalgorithme ICA.
Quant la variation temporelle de notre mixage, une piste damlioration pourrait tre de
sparer les signaux audio en plusieurs parties et dappliquer successivement la sparation des
composantes chaque tronon temporel, an dobserver lvolution temporelle ventuelle de la
matrice de mixage.
Enn, au lieu dun simple mixage linaire, dautres modles auraient aussi pu tre tudis :
celui dune convolution dans un systme LTI, par exemple ("blind deconvolution").
28. Caus par un dfaut du vitrage en certaines zones - par exemple - altrant le phnomne de rexion.
29. eg. : nombre de contours, luminance, saturation, ...
43
Mixed images Recovered images
Blind Source Separation for options :
normalisation = mean decorrolation = sym negentropy function = tanh Default process for RGB images
Figure 15 Rsultat obtenu pour des mixages non uniformes : lopacit du reet nest pas
constante sur la surface. Toutefois, les zones htrognes sont localises identiquement sur les
deux mixages.
Mixed images Recovered images
Blind Source Separation for options :
normalisation = mean decorrolation = sym negentropy function = tanh Default process for RGB images
Figure 16 Rsultat obtenu pour des mixages non uniformes : lopacit du reet nest pas
constante sur la surface. Ici, les zones htrognes ne sont pas localises identiquement sur les
deux mixages.
44
3.6.2 Signaux sources indpendants
Etant donn que lalgorithme ICA se base entre autre sur le fait que les sources sont indpen-
dantes, il est pertinent dobserver le comportement de lalgorithme lorsque celles-ci prsentent
certaines similitudes. Ceci pourrait se produire dans certaines situations relles, o par exemple
une partie du reet serait repris dans le document comme une image. Un exemple de cette situa-
tion avec rsultat de lalgorithme est illustr la gure 17. On peut constater que lalgorithme
ne sen sort pas trop mal, parvenant mettre en vidence le texte et restituant correctement
le reet.
Mixed images
Recovered 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 Rsultat obtenu dans le cas o les sources prsentent une certaine similitude. Ici,
une partie du reet est prsent sur la gauche du texte.
3.6.3 Absence de dcalage spatial ou temporel
Lalgorithme fast-ICA est particulirement sensible au dcalage spatial pour les images : les
rsultats sont nettement moins bons sur des photos relles ds que le cadrage est lgrement
modi. La gure 25 illustre ce phnomne. Un des deux mixages est simplement limage de
fond (ce qui peut sinterprter comme un coecient associ au reet de valeur nulle dans la
matrice de mixage). On voit que lalgorithme a relativement bien russi sparer limage de
fond de limage de reet, mais il reste dans la deuxime sortie des restes attnus de limage de
fond, qui pourraient tre dus au lger dcalage des deux photos de base.
Au niveau des sons, cela pourrait galement tre une des causes des mauvais rsultats observs
sur les cas rels, bien que lalgorithme choue galement sur des chantillons sonores semblant
bien synchroniss
30
.
30. The Computational Neurobiology Laboratory, Blind Source Separation of recorded speech and
music signals., enregistrements disponibles sur lurl http://cnl.salk.edu/~tewon/Blind/blind_audio.html.
45
Mixed Images
(a) Les deux images de base sont lgrement
dcales de droite gauche.
Recovered images
(b) La 2
me
source rcupre (en bas droite)
contient principalement le reet du photographe, de
la table, du chauage et de la fentre mais il reste
galement de lombre de limage de fond (bougies et
vase orange).
Figure 18 Dgradation de la qualit des sources rcupres possiblement due au dcalage
spatial entre les deux photos de dpart.
3.6.4 Sources identiquement distribues et non-gaussiennes
La distribution identique des sources, qui justie lutilisation du thorme central limite et
motive lentiret de lalgorithme, se vrie en gnral mieux pour les signaux audio que image.
Les signaux sons prsentent typiquement une distribution super-gaussienne (type distribution
de Laplace kurtosis positif), comme on peut le voir sur la gure 19, o les fonctions de densit
de probabilit de 3 chantillons sonores ont t approches numriquement par estimation de
noyau, laide de la fonction ksdensity de Matlab (aprs retrait de la moyenne et normalisa-
tion une variance unit). Il sagit nouveau dune voix ("I got a bad feeling about this"), dune
personne chantant sans musique (dbut de "I feel good") et de musique sans parole (dbut de
"Rock the House", de Afrojack). Un QQ-plot de lchantillon de la voix, badfeeling, compar
aux quantiles de la distribution normale standardise montre la dviation des signaux audio
par rapport la loi normale.
Dans le cas dimages, il est gnralement intressant dacher les histogrammes de la lumi-
nance
31
et de chaque couleur sparment dans le cas RGB. Notre image text, qui se rapproche
de notre problmatique de dpart o on cherche dchirer un document crit, prsente une
distribution assez particulire (voir gure 20) : elle est bimodale avec un lger pic autour de 0
(criture grise-noire) et un pic important en 255 (valeur maximale dans lchelle uint8, corres-
pondant tout le fond blanc de la page) et est donc loin dtre gaussienne. Pour des photos
31. Information "noir et blanc"
46
20 15 10 5 0 5 10 15 20
0
0.05
0.1
0.15
0.2
0.25
Estimation de la densit de probabilit de Feelgood
(a)
15 10 5 0 5 10 15
0
0.05
0.1
0.15
0.2
0.25
Estimation de la densit de probabilit de Badfeeling
(b)
20 15 10 5 0 5 10 15 20 25
0
0.05
0.1
0.15
0.2
0.25
Estimation 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
Q
u
a
n
t
i
l
e
s

o
f

I
n
p
u
t

S
a
m
p
l
e
QQ Plot of Sample Data (Feelgood.wav) versus Standard Normal
(d)
Figure 19 Estimation par noyau des densits de probabilit de 3 chantillons audio. On
observe des distributions du type Laplace. En 19(d), QQ-plot de lchantillon badfeeling nor-
malis par rapport la distribution gaussienne N(0, 1).
plus ordinaires (portraits, paysages, etc.), nous pouvons observer sur les gures des distribu-
tions plus en cloche, donc a priori plus gaussiennes, aussi bien pour les images converties en
noir et blanc que pour les composantes couleur. Cependant un QQ-plot des chantillons de
limage turbulence convertie en noir et blanc, centre et normalise une variance unit, en
comparaison avec la distribution normale N(0, 1) semble indiquer un certain cartement par
rapport la gaussianit.
La non-gaussianit semble donc peu prs garantie. On na par contre pas toujours des sources
identiquement distribues pour les images, mais on a pu voir dans la section prcdente que
lalgorithme sen sortait bien malgr tout, du moins pour les cas articiels linaires.
47
100 50 0 50 100 150 200 250 300 350
0
0.002
0.004
0.006
0.008
0.01
0.012
0.014
0.016
0.018
Estimation de la densit de probabilit de text.jpg (n&b)
(a)
50 0 50 100 150 200 250 300
0
1
2
3
4
5
6
7
8
9
x 10
3
Estimation de la densit de probabilit de turbulence.jpg (n&b)
(b)
100 50 0 50 100 150 200 250 300 350
0
0.002
0.004
0.006
0.008
0.01
0.012
0.014
0.016
0.018
Estimation de la densit de probabilit de text.jpg (vert)
(c)
50 0 50 100 150 200 250 300
0
0.001
0.002
0.003
0.004
0.005
0.006
0.007
0.008
0.009
0.01
Estimation de la densit de probabilit de turbulence.jpg (vert)
(d)
Figure 20 Estimation par noyau des densits de probabilits de deux images assez direntes
au niveau du contenu, pour les niveaux de gris et pour une des 3 couleurs.
3.6.5 Mixages bruits
Il va sans dire que nous supposons que les mixages sont enregistrs sans tre altrs par un
bruit quelconque. Toutefois, il est vident que dans la pratique il y aura toujours du bruit qui
altrera lenregistrement.
Nous pouvons observer sur la gure 21 que lalgorithme ICA parvient sparer une image
du bruit qui la altre, si on dispose de cette image enregistre avec deux niveaux de bruit
distincts. Ce comportement de lalgorithme est sens
32
, puisque le bruit et le signal sont ind-
pendants et que le bruit altre gnralement le signal uniformment.
Dans notre cas, on sintresse au comportement algorithme lorsque les mixages sont bruits.
Cette situation est visible sur la gure 22. On peut voir que lalgorithme va concentrer le bruit
sur une des deux sources spares. A nouveau, le comportement algorithmique est cohrent
puisquil sagit en quelque sorte de trois sources mixes. Or, lors de lappel de lalgorithme,
nous lui suggrons quil ny a que deux sources. Le bruit va donc tre concentr sur la source
qui lui est moins indpendante. Une amlioration possible serait de traiter dans le cas gnral le
mixage de multisources. Ceci pourrait sappliquer au traitement du bruit. Aussi, si on disposait
de donnes sur le support denregistrement, nous pourrions traiter le bruit via un ltrage.
32. Pour autant que le bruit et le signal ne soient pas gaussiens tous les deux, comme vu au point 3.1.1
48
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 lalgorithme ICA une mme image altre de deux niveaux de
bruit distincts.
Mixed images
Recovered 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 lalgorithme ICA deux mixages bruits.
3.6.6 Situation relle
A dfaut de moyen logistique pour crer des situations sonores, nous prsentons ici un rsultat
obtenu dans le cas de photographies prises dun document altr dun reet. La situation est
reprise la gure 23. On constate que la source du reet est bien spare. Celle du document
aussi, mais de moinre qualit. On observe un halo rsiduel du reet. On peut supposer une
49
non-uniformit du reet sur les mixages
33
lorigine de cette lgre imperfection du rsultat.
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 lalgorithme ICA deux photographies dun document altr dun
reet.
33. On peut le constater sur le mixage suprieur, dans le reet de la lampe.
50
4 Interface utilisateur BSS.m
Dans cette section, nous prsentons la fonction Matlab BSS.m
34
servant dinterface utilisateur.
Cette fonction a t implmente par nos soins, suivant un cahier des charges
35
prcis quant
son emploi. Cest ce que nous dtaillerons dans un premier temps. Ensuite, notre fonction per-
met dappliquer au choix deux types de sparation de sources laveugle : soit selon lalgorithme
de dtection de contours, soit selon lalgorithme ICA. Nous comparerons donc qualitativement
les rsultats obtenus par ces deux algorithmes distincts partir de situations communes. Enn,
nous suggrerons des pistes damlioration de BSS.m.
4.1 Critres de linterface
Ds le dpart, nous nous sommes eorcs dimplmenter une fonction simple utiliser an
dappliquer un procd de sparation de sources laveugle. Nous souhaitions que lutilisateur
intervienne le moins possible quant son emploi. Cest pourquoi, BSS.m se charge elle-mme
de limportation des chiers et de leur traitement.
Le traitement peut tre aisment nuanc par lutilisateur, via un panel doptions dtaills dans
le "help" de la fonction. Cela permet lutilisateur dobtenir un meilleur rsultat selon la situa-
tion quil soumet, en spciant lune ou lautre option disponible. Aussi, les explications de le
help sont illustres par divers exemples dappel de BSS.m.
Linterface renvoie lutilisateur les tenseurs en adquation ses entres et options, tout en
achant la situation soumise et le rsultat de lalgorithme de sparation, avec un rsum des
options utilises. Aussi, le help donne quelques lignes dexemple de code crire dans un script
pour enregistrer facilement les rsultats obtenus.
Enn, la fonction a t conue de manire robuste, en dclenchant une erreur descriptive en cas
danomalie compromettant le bon fonctionnement de linterface ou/et de lalgorithme. Sinon,
la fonction ignore les erreurs bnignes dues la distraction de lutilisateur, en excutant les
paramtres dnis par dfaut.
4.2 Comparaison Edge Detection et ICA
Ici, nous allons faire une brve comparaison entre les rsultats obtenus avec chacunes des
mthodes. Nous ne reprenons dans le tableau 13 que les lments pertinents comparer.
Par faute de moyens logistiques, nous ne sommes pas mme de prsenter des rsulats pour
les sons pour les Cas bruits et Cas Non-Uniformes.
Dtection de contour ICA
1. Cas linaires
34. BSS est lacronyme de Blind Source Separation
35. Voir annexe A
51
Dtection de contour ICA
Images Les mthodes EdgeDetection et
EdgeDetectionTir ncessitent que
lcart entre les deux coecients de
mixages soient suprieurs 0.05.
Plus de dicults avec la normalisation
des couleurs.
Qualit moyenne
36
selon le critre :
3.7859
Qualit moyenne selon le critre :
3.5582
Sons Les sorties sont de meilleure qualit. Temps dexcution plus rapide.
Qualit moyenne
37
selon le critre :
environ 14
Qualit moyenne selon le critre :
environ 4
2. Cas Non-Uniformes
Images Ne gre pas du tout les cas qui ne
sont pas une combinaison linaire des
sources.
La non uniformit nest pas un obs-
tacle notable pour fastica, bien que
la qualit des images en soit quelque
peu compromise : on observe un rsidu
des zones htrognes d au fait que la
matrice de dmixage est calcule pour
une opacit moyenne du reet.
Sons / /
3. Cas Bruits
Images Nest pas capable denlever le bruit des
images mixes.
fastica est capable de traiter cette si-
tuations. Soit :
Deux sources qui reprsentent une
mme image avec un taux de bruit
dirent. Alors, fastica renvoie une
image avec une compose du bruit et
limage dbruite.
Deux sources qui reprsentent des
mixages dimages direntes, alors
fastica a besoin dune troisime
source pour pouvoir liminer le bruit
des sorties et renvoyer les photos re-
cherches.
Sons / /
4. Gnralits
36. Base sur 3 mixages partir de 6 images sources prises 2 par 2
37. Base sur 8 mixages partir de 4 chiers sources combins de diverses manires.
52
Dtection de contour ICA
Images Meilleure qualit globale des sorties se-
lon le critre de qualit
Temps dexcution notablement plus
rapide.
Table 13: Tableau comparatif de nos mthodes pour iso-
ler deux signaux sources.
4.3 Perspectives damlioration
Bien que BSS.m prsente les qualits essentielles toute interface utilisateur, il est tout fait
possible de lamliorer. Les amliorations suggres sont entre autres dues des mconnais-
sances de toutes les opportunits fonctionnelles oertes par Matlab.
Linterface ne supporte que trois types de chiers : .wav, .jpg et .png. Mme si ces formats
sont assez courants et quen plus il nest pas dicile de convertir un son ou une image en lun
de ces formats, il serait intressant dtendre le nombre de formats supportables.
Les images sont importes en format uint8
38
, ce qui limite la granularit du rsultat. Il fau-
drait tenter dimporter les images avec une granularit plus ne
39
. Cette possibilit pourrait
tre conditionnelle, demeurant un choix de lutilisateur.
Les sons soumis doivent tre monophoniques
40
. Bien que cela soit cohrent selon notre probl-
matique, linterface devrait tre capable de supporter des chiers sons stro
41
. Dans un tel
cas, linterface convertirait le chier son stro en mono.
La gestion des options est trs simpliste (beaucoup de if et de else). Il est certainement possible
damliorer la vrication des options au moyen de variables boolennes qui seraient dnies au
dbut de limplmentation de linterface. Cela diminuerait signicativement le nombre dop-
rations, puisque pour linstant - il faut se lavouer - bon nombre sont rcurrentes en ce qui
concerne la gestion des options. Par ailleurs, nous navons pas explor les possibilits oertes
par varargin de Matlab.
Certaines oprations sont toujours ralises alors quelles ne sont pas toujours ncessaires, ty-
piquement laplatissement dune matrice en vecteur et vice-versa. Cette situation demeure car
lalternative serait de poser une conditionnelle qui elle-mme consiste en une opration. Par
ailleurs, les conditionnelles sont gnralement traites par des if. Or, il est possible de les
traiter avec switch-case, par exemple. Il faudrait tablir les avantages et inconvnients des
dirents traitements conditionnels possibles avec Matlab. Enn, lespace mmoire nest pas
toujours des mieux utilis. Ceci est galement d au fait que certaines oprations sont eec-
tues alors quelles ne sont pas ncessaires, comme la mise en mmoire dun vecteur dorigine
ncessaire certaines options mais pas toutes.
Ultimement, on pourrait remettre en question le choix du langage Matlab et envisager lutili-
sation du langage C par exemple. Aussi, linterface pourrait tre implmente graphiquement,
avec des facilits telles que le presser-glisser des chiers, avec des menus droulant pour le
panel doptions.
38. 8 bits
39. eg. uint16, 16 bits
40. Son enregistr via un unique canal.
41. Son enregistr via deux canaux
53
Conclusion
Nous avons dvelopp deux algorithmes pour sparer deux chiers audio ou image, en nous
basant sur un modle de mlange linaire, homogne et constant, incapable de dterminer
lamplitude exacte et lordre des signaux de sortie.
La premire mthode est base sur la notion de gradient calcul laide de ltres spciques et
permettant de dtecter des contours. On a cherch minimiser le nombre de contours communs
entre des combinaisons linaires bien choisies des signaux dentre. Si cela semble intuitif pour
des images, cest un peu plus surprenant pour le son et bien que nous ayons trouv des lments
de justication, il faut reconnatre que la dtection de contour sur les sons reste une heuristique
ecace. Plusieurs seuils - comme celui de la dtection de contour - ont t dtermins relative-
ment arbitrairement par essais-erreurs.
La deuxime mthode dveloppe est lalgorithme fast-ICA, qui repose sur une thorie math-
matique plus toe et pour lequel nous nous sommes quelques reprises laiss guider par la
littrature sur le sujet. Celui-ci garantit une robustesse statistique aux outliers, ore une conver-
gence rapide de type Newton-Raphson et garantit la convergence vers les sources si elles ne sont
pas gaussiennes. Lindtermination damplitude intrinsque au modle a men plusieurs m-
thodes de normalisation post-ICA avec chacune sa spcicit. Le traitement dimages couleurs
peut aussi se faire de plusieurs manires direntes, sajoutant au nombre de possibilits totales.
Au nal les mthodes de dtection de contours se rvlent les plus prcises dans les cas audio
respectant notre modle de mixage et aussi bonnes que les algorithmes de type fast-ICA pour
les images. Elles sont par contre rapidement mises en dfaut quand les hypothses du modle
sont bafoues et leur temps de calcul peut devenir drangeant quand la taille des entres aug-
mente, particulirement pour la mthode analytique sur les sons. Fast-ICA peut par contre
relativement bien sen sortir sur des cas non-linaires ou non homognes, ainsi que sur une
panoplie de cas limites que nous avons pu tester.
La fonction BSS.m respecte la majorit des engagements du cahier des charges et permet un
utilisateur de soumettre deux chiers audio ou image sans importation pralable et dobtenir les
rsultats de la sparation. On regrettera cependant que notre algorithme ne soit pas capable de
dtecter lui-mme la meilleure combinaison doptions et de mthodes utiliser, bien que nous
ayons mis plusieurs recommandations en fonction des cas traits. Loreille et loeil humains
restent les ultimes juges de la qualit de nos sorties.
54
Rfrences
Ouvrage de rfrence
[1] Bellache, Philippe, Les secrets de limage vido, 7
e
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] Hyvrinen, A., Karhunen, J., Oja, E., Independent Component Analysis, John Wiley
& Sons Inc, New York, 2001.
Sources Internet
[4] Hyvrinen, A., Erkki, O., Independent Component Analysis : Algorithms and Appli-
cations, disponible sur lurl : http://mlsp.cs.cmu.edu/courses/fall2012/lectures/
ICA_Hyvarinen.pdf, consult le 3/03/2013.
[5] Anonyme, Morphologie Mathmatique, disponible sur lurl : http://fr.wikipedia.org/
wiki/Morphologie_math%C3%A9matique, consult le 3/03/2013.
[6] Anonyme, traitement dimages, disponible sur lurl : http://fr.wikipedia.org/wiki/
Traitement_d%27images, consult le 3/03/2013.
[7] Stone, J. V., Independent Component Analysis : A Tutorial Introduction, disponible
sur lurl : 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 lurl : 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 le
3/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 lurl :
http://research.ics.aalto.fi/ica/fastica/, consult le 3/03/2013.
[10] Ritz, E., Marszal,T., Epaisseur et localisation des contours des detecteurs
par derivation (Sobel, Prewitt, Roberts) ou par gradient morphologique., disponible
sur lurl : 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 ltres de dbruitage, disponible
sur lurl : http://www.tsi.telecom-paristech.fr/pages/enseignement/ressources/
beti/debruitage/debruitage.html consult le 16/04/2013.
[12] Anonyme, Dtection de contour, disponible sur lurl : http://bnazarian.free.fr/
MyUploads/IN_GBM_04_CONTOURS.PDF consult le 14/04/2013.
[13] Ouidja, D., Principe du maximum et mthode de tir, disponible sur lurl : http://www.
ummto.dz/IMG/pdf/memoire_final.pdf consult le 23/04/2013.
[14] University of Helsinki, Faculty of Science, Aapo Hyvrinen : Publications -
The FastICA algorithm, disponible sur lurl : http://www.cs.helsinki.fi/u/ahyvarin/
papers/fastica.shtml, consult le 30/004/2013.
55
Annexes
A Cahier des charges
Contexte
Deux situations sont traiter :
La photographie dun document illisible cause dun reet d une vitre situe entre le
document et le tlobjectif. Deux photographies sont eectues au mme endroit selon le
mme angle des instants dirents.
Lcoute dune conversation tlphonique incomprhensible cause de la musique rgnante.
Deux microphones sont placs dans la pice o la musique et un interlocuteur sont prsents
physiquement.
Les signaux observs traiter sont discrets et reprsents par les vecteurs x
1
= [x
11
x
12
. . . x
1n
],
x
2
= [x
21
x
22
. . . x
2n
] dont on veut extraire deux signaux sources x
1
et x
2
de longueur n gale-
ment. Les matrices S et X sont dnies par S =
_

_
s
1
s
2
_

_ et X =
_

_
x
1
x
2
_

_. On suppose un mixage
linaire constant : X = AS, A R
22
. Dans le cas audio on suppose un dphasage temporel
nul entre x
1
et x
2
. On cherche donc une matrice W R
22
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 tlphonique.
10/03/2013 2. Comportement de la solution algorithmique
Notre programme se hirarchisera en deux parties.
La premire sera lalgorithme de travail qui eectuera la sparation des signaux
de sources partir dentres vectorielles (sons) ou matricielles (images).
La deuxime consiste en une fonction de plus haut niveau qui permettra luti-
lisateur de fournir directement les chiers audio ou visuels de format spcique
correspondant aux mlanges de donnes.
A. Utilisateur
Le programme est capable de dtecter si lentre est un chier image ou audio.
Image :
56
Version
Entres : 2 chiers JPG couleur ou noir et blanc.
Sorties : 2 chiers JPG couleur ou noir et blanc selon lentre et correspondant
limage de fond et au reet.
Audio :
Entres : 2 chiers audio en format WAV-mono dont lorigine des temps concide.
Les dures temporelles et frquences dchantillonnage peuvent par contre tre dif-
frentes.
Sorties : 2 chiers audio en format WAV-mono, audibles, de dures correspondant
la dure du signal dentre le plus court. La frquence dchantillonnage sera la
plus leve des deux entres. Les deux chiers correspondront au bruit de fond et
la conversation dintrt.
B. Algorithme principal
Image :
Entre : Noir et blanc : 2 matrices mn. Couleur : 2 matrices mn 3. Dans les
deux cas les entres sont des matrices dont les lments [0, 255].
Sortie : Noir et blanc : 2 matrices mn correspondant aux signaux sources spars.
Couleur : 2 matrices mn 3 correspondant aux signaux source spars.
Dans les deux cas les sorties sont des matrices dlments [0, 255], dont les
moyennes des pixels seront soit xes la moyenne de lensemble des matrices den-
tres ou simplement calcules en prenant en compte que la somme des lments
dune ligne de A vaut 1. Lordre des signaux extraits renvoys en sortie ne peut pas
tre x a priori (reet image de fond).
On renvoie galement la matrice de mixage approche A R
22
et une estimation
de son inverse W.
Audio :
Entre : 2 vecteurs de mme longueur n correspondant aux signaux mixs.
Sortie : 2 vecteurs s
1
et s
2
de longueur n correspondant aux signaux sources spars.
On renvoie galement la matrice de mixage approche A R
22
et une estimation
de son inverse W.
14/04/2013 3. Evaluation de la mthode
Image :
- Produire des exemples par superposition dimages avec somme dopacits unitaire.
57
Version
- Observer le comportement de lalgorithme si lopacit du reet nest pas homogne.
- Observer le comportement de lalgorithme si les images sources prsentent certaines
similitudes.
Audio
42
:
- Observer le comportement de lalgorithme si lintensit de la musique varie au
cours de lenregistrement.
- Observer le comportement de lalgorithme si un bruit supplmentaire sajoute a
situation (bruit court [eg : un bic qui tombe] ou long [eg : des travaux dans la rue
proche]).
Audio et Visuel
43
:
- Evaluation du lien entre la norme de la dirence de 2 signaux (sources ou/et
renvoys) et leur niveau de similitude [valuation qualitative], dans le but dtablir
un critre supplmentaire dvaluation de la solution renvoye.
- Evaluer au moyen de diverses oprations mathmatiques lcart entre les signaux
renvoys et les signaux-sources (par rapport aux couleurs, lamplitude, la cova-
riance, la moyenne, etc) et tablir une infrence sur le comportement de lalgo-
rithme.
- A partir des direntes expriences, identier des critres qui permettraient de
peauner le rsultat renvoy par lalgorithme.
- Excuter lalgorithme itrativement (prendre son rsultat comme entre) an dob-
server lvolution du rsultat.
- Evaluer le comportement de lalgorithme lorsquil y a plus de deux signaux sources.
5/02/2013 4. Performance de la solution
Complexit temporelle :
On dnit la taille totale dune entre comme tant la somme des nombres dl-
ments dans chaque vecteur ou matrice reprsentant respectivement le son ou limage
donn en argument. Nous esprons une complexit O(n
2
) et surtout un temps dex-
cution de lordre de la minute sur une machine normale (type ordinateur portable
dtudiant).
Robustesse :
42. Non raliss, faute de moyen logistique.
43. Non raliss, car jugs peu utiles par rapport aux notions thoriques employes pour laborer les solutions.
58
Version
Retourne une erreur descriptive qui stoppe lexcution de lalgorithme si lutilisateur
ne respecte pas les spcications de limplmentation. Si lalgorithme au cours de
son excution ne converge pas vers une solution, il se stoppera en achant une erreur
descriptive.
3 Utilisation :
Utilisation simple, ne ncessitant aucune connaissance de lalgorithme employ.
Lutilisateur doit uniquement soumettre limplmentation des chiers en adqua-
tion avec les spcications dutilisation.
59
B Maximisation du kurtosis
On revient ici sur une autre mesure possible de la non-gaussianit, aborde au point 3.1.2. Le
kurtosis dune variable alatoire x se dnit gnralement par :
k(x) = E[x
4
] 3(E[x
2
])
2
. (37)
Cette grandeur est une mesure de laplatissement dune distribution, du poids relatif des queues
par rapport au centre de masse. Un kurtosis positif indique une distribution pointue ("sur-
gaussienne") alors quun kurtosis ngatif est typique des distributions plus plates et uniformes
("sous-gaussiennes"), comme on peut le voir sur la gure 24.
Figure 24 Exemples de kurtosis pour quelques distributions symtriques.
La caractristique la plus intressante de cette grandeur est quelle vaut zro pour une variable
alatoire gaussienne et est dirente de zro pour toutes les autres distributions, de rares
exceptions prs. On vrie aisment les proprits suivantes, pour R, x et y deux v.a.
indpendantes :
k(x) =
4
k(x)
k(x +y) = k(x) +k(y)
(38)
o la deuxime galit nest valable que si les deux v.a. ont une moyenne nulle. Le kurtosis
pouvant tre positif ou ngatif, on pourrait se xer comme critre de non-gaussianit pour
nos sorties y
i
= w
T
i
x = z
T
i
s (o comme dans (7) on a pos z
i
= A
T
w
i
) la maximisation de
|k(y
i
)| = |

n
j=1
z
4
ij
k(s
j
)|, sous la contrainte que V ar(y
i
) = 1, pour i = 1, . . . , n. En utilisant
les proprits nonces dans (38), les relations similaires pour la variance dune somme de
v.a. indpendantes et le fait que les sources ont une variance unit, on obtient le problme
doptimisation suivant pour chaque signal de sortie y
i
, en omettant lindice i :
max
z

z
4
1
k(s
1
) +z
4
2
k(s
2
) + +z
4
n
k(s
n
)

(39)
t.q. V ar(y) = z
2
1
+z
2
2
+ +z
2
n
= 1. (40)
Ce critre prsente des avantages et des inconvnients :
60
simplicit numrique : le kurtosis est facile calculer par les estimateurs classiques des
2
me
et 4
me
moment dchantillon
convergence assure : on peut montrer (voir [3]), sur base de la thorie de loptimisation
convexe, que le problme (40) admet 2n maxima locaux atteints pour des vecteur z
i
de la
forme z
i
= [0, , 0, 1, 0, , 0], cest--dire si et seulement si y
i
est gal une des sources
de dpart, au signe prs et normalise variance unit. On fait seulement lhypothse que
i, k(s
i
) = 0, ce qui est presque toujours le cas si les sources ne sont pas gaussiennes. Ce
rsultat sinterprte gomtriquement(voir gures 25) dans R
2
, o on voit bien que les maxima
seront obtenus aux points de tangence entre le cercle unit et les courbes de niveau de la
fonction objectif. On a donc par cette mthode lassurance thorique de tomber sur les bonnes
sources, au signe prs.
manque de robustesse : le calcul du kurtosis est trs sensible aux donnes aberrantes
("outliers"). Supposons par exemple disposer de n observations dune v.a. x : [x
1
, . . . , x
n
], de
variance unit, comprenant un outlier x
out
. Lestimateur du kurtosis bas sur cet chantillon
est born infrieurement par une valeur qui peut ntre absolument pas reprsentative de la
distribution de x :

k(x) =
1
n

n
i=1
x
4
i
3
x
4
out
n
3. Si n = 500, x N(0, 1) et x
out
= 7, on peut
dire de lestimateur

k(x), qui devrait tre proche de 0, que

k(x) 1.802. Par comparaison,
le kurtosis calcul par Matlab dun chantillon de taille identique issu dune distribution
uniforme (rand),et donc fortement sous-gaussienne, donne typiquement une valeur d peine
1.2.
61
Espace doptimisation du kurtosis dun vecteur alatoire de variance unit
z
1
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 |z
4
1
+2z
2
2
| correspondant k(s
1
) = 1, k(s
2
) = 2.
Espace doptimisation du kurtosis dun vecteur alatoire de variance unit
z
1
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 |z
4
1
2z
2
2
| correspondant k(s
1
) = 1, k(s
2
) = 2.
Figure 25 Optimisation de |k(y
i
)| sous la contrainte V ar(y
i
) = z = 1 dans lespace (z
1
, z
2
),
pour des kurtosis des sources de signes gaux ou opposs. Les maxima locaux sont atteints en
(1, 0) et (0, 1).
Nous ant la littrature sur le sujet (principalement [3], [4]), nous navons pas cherch d-
velopper dalgorithmes utilisant le kurtosis, rputs trop peu robustes aux outliers. Nous nous
sommes donc concentrs sur une deuxime manire de calculer la gaussianit : lentropie et la
nguentropie.
62
C Options implmentes pour lalgorithme ICA
C.1 RGB component-by-component
Dtails au point 3.3.1
1 f unc t i on [Y1 Y2 fscom] = BSS(File1 ,File2 ,options ,A)
2 [...]
3 % process
4 f o r i = 1 : s i z e (X1 ,2)
5
6 [Y,A,W] = fastica ([X1(:,i);X2(:,i)],decorrOpt ,negentfunction);
7
8 i f i == 1
9
10 Y1(:,1) = Y(1,:) ;
11 Y2(:,1) = Y(2,:) ;
12 tempR1 = Y1(:,1);
13
14 % Sorting
15 e l s e
16
17 corr1 = abs (corr(Y(1,:) ,tempR1)) ;
18 corr2 = abs (corr(Y(2,:) ,tempR1)) ;
19 % color vector of highest correlation with R1 assigned to first
20 % image. That of minimum correlation assigned to second image.
21 [~,I] = min([corr1 ,corr2 ]) ;
22
23 Y1(:,i) = Y(mod(I,2)+1,:);
24 Y2(:,i) = Y(I,:);
25 [...]
26 end
27 [...]
28 end
29 [...]
Listing 4 Application de lalgorithme ICA aux composantes RGB des mixtures la ligne
6. Ceci se fait itrativement puisque size(X1 2) vaut 3 dans le cas dun RGB component-by-
component. Le tri des composantes spares est eectu de la ligne 1 24 : tempR1 enregistre
la premire composante rouge ; corr
j
est la valeur de corrlation entre tempR1 et la j-ime
composante verte ou bleue suivant que j vaille 2 ou 3. Le tri est eectu aux lignes 23 et 24
selon le minimum de corrlation calcul la ligne 21.
C.2 Noir et blanc vers RGB
1 f unc t i on [Y1 Y2 fscom] = BSS(File1 ,File2 ,options ,A)
2 [...]
3 X1orig = X1;
4 X2orig = X2;
5 [...]
6 i f nar gi n > 2 && sum(strcmpi(options ,bw2rgb )) && strcmp(kind ,img)
7 [...]
8 X1 = X1(:);
9 X2 = X2(:);
10
11 X1 = reshape (X1 ,sizeImg);
12 X2 = reshape (X2 ,sizeImg);
13
14 X1 = rgb2gray(uint8(X1)) ;
15 X2 = rgb2gray(uint8(X2)) ;
16
17 X1 = X1(:);
18 X2 = X2(:);
63
19 end
20 [...]
21 % process
22 f o r i = 1 : s i z e (X1 ,2)
23 [Y,A,W] = fastica ([X1(:,i);X2(:,i)],decorrOpt ,negentfunction);
24 [...]
25 end
26 [Y1out Y2out] = normalisation(X1orig ,X2orig ,A,W,normOpt);
27 % output
28 X1 = X1orig;
29 X2 = X2orig;
30 Y1 = Y1out;
31 Y2 = Y2out;
32 end
33 [...]
Listing 5 Loption bw2rgb applique le traitement Noir et blanc vers RGB (cf. point 3.3.1).
Les mixtures RGB sont conserves par X1orig et X2orig. Les mixtures X1 et X2 sont modies
de la ligne 8 18 an de pouvoir appliquer le traitement Noir et blanc la ligne 23 o size(X1
2) vaut 1 dans ce cas. Cest lors de la normalisation la ligne 26 que la transformation A est
applique X1orig et X2orig. An de bien avoir toutes les images en couleurs les outputs sont
bien assigns de la ligne 28 31.
C.3 RGB all-in-one
1 f unc t i on [Y1 Y2 fscom] = BSS(File1 ,File2 ,options ,A)
2 [...]
3 i f nar gi n > 2 && sum(strcmpi(options ,flattening ) + strcmpi(options ,sample ))
4 [...]
5 X1 = X1(:);
6 X2 = X2(:);
7 end
8 [...]
9 % process
10 f o r i = 1 : s i z e (X1 ,2)
11
12 [Y,A,W] = fastica ([X1(:,i);X2(:,i)],decorrOpt ,negentfunction);
13 [...]
14 end
15 [...]
16 Y1 = reshape (Y1(:),sizeImg);
17 Y2 = reshape (Y2(:),sizeImg);
18 [...]
Listing 6 Loption attening applique le traitement RGB all-in-one (cf. point 3.3.1).
Aplatissement des mixtures RGB aux lignes 5 et 6. Lalgorithme ICA est appliqu une fois
puisque size(X1 2) vaut 1. Les sources spares sont sous forme vectorielle ; elles sont reformes
selon des matrices RGB aux dimensions appropries aux lignes 16 et 17.
C.4 Normalisation de la matrice A
1 f unc t i on [Y1 Y2] = normalisation(X1,X2,A,W,KIND)
2 [...]
3 case {normA }
4
5 Anorm = abs (A) ;
6 Anorm = Anorm ./( sum(Anorm ,2)*ones (1,2) ) ;
7 W = i nv (Anorm) ;
8
9 Y1 = W(1,1)*X1 + W(1,2)*X2 ;
64
10 Y2 = W(2,1)*X1 + W(2,2)*X2 ;
11 [...]
Listing 7 Loption normA retourne des sources spares et normalises selon la normalisation
de la matrice A issue du traitemen (voir point 3.3.3).
C.5 Moyenne des mixtures
1 f unc t i on [Y1 Y2] = normalisation(X1,X2,A,W,KIND)
2 [...]
3 case {mean}
4
5 lim = s i z e (X1);
6
7 Y1 = z e r os (lim);
8 Y2 = z e r os (lim);
9
10 f o r i = 1 : s i z e (X1 ,2)
11
12 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) ;
14
15 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 ;
20
21 end
22 [...]
Listing 8 Loption mean excute la normalisation des rsultats du traitement dimages par
la moyenne des mixtures (voir point 3.3.3). La boucle for applique la normalisation composante
par composante. De fait size(X1 2) vaut 1 pour les images converties en niveaux de gris et 3
pour celles en RGB. Par exemple dans le cas RGB : le rouge des rsultats est normalis aux
lignes 18 et 19 selon la moyenne de rouge prsente dans les deux mixtures calcule la ligne
15.
C.6 Normalisation des rsultats son
1 f unc t i on [Y1 Y2] = normalisation(X1,X2,A,W,KIND)
2 [...]
3 case {sound }
4
5 Y1 = W(1,1)*X1 + W(1,2)*X2 ;
6 Y2 = W(2,1)*X1 + W(2,2)*X2 ;
7
8 b = 1;
9 a = -b;
10
11 M1 = max(Y1) ;
12 m1 = min(Y1) ;
13 Y1 = (Y1 -M1)*(b-a)/(M1-m1) +b ;
14
15 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
C.7 Echantillonnage des signaux
1 f unc t i on [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.
4
5 % (optional)
6 i f nar gi n > 2 && sum(strcmpi(options ,flattening ) + strcmpi(options ,sample ))
7 [...]
8 X1 = X1(:);
9 X2 = X2(:);
10 end
11 [...]
12 X1orig = X1;
13 X2orig = X2;
14 [...]
15 i f nar gi n > 2 && sum(strcmpi(options ,sample ))
16 [...]
17 X1 = X1 (1:+2:end);
18 X2 = X2 (1:+2:end);
19 end
20 [...]
21 % process
22 f o r i = 1 : s i z e (X1 ,2)
23 [Y,A,W] = fastica ([X1(:,i);X2(:,i)],decorrOpt ,negentfunction);
24 [...]
25 end
26 [...]
27 [Y1out Y2out] = normalisation(X1orig ,X2orig ,A,W,normOpt);
28 [...]
Listing 10 Loption sample excute lchantillonnage. Dans le cas des images il faut tout
dabord aplatir les matrices RGB (si ncessaire) ce qui est fait aux lignes 8 et 9. Les mixtures
originales sont copies aux lignes 12 et 13. Lchantillonnage est eectu aux lignes 17 et 18.
Lalgorithme ICA est appliqu la ligne 23 aux mixtures chantillonnes. La transformation
obtenue est appliques la ligne 27 aux mixtures originales.
66
D Implmentations Matlab
D.1 Interface utilisateur et utilitaires
D.1.1 BSS.m
1 %%%%
2 % [Y1,Y2,fscom]= BSS(File1 ,File2 ,options) attempts to retrieve two hidden
3 % sources signals [s1 s2] from two mixed signals [x1 x2] (corresponding to
4 % files File1 and File2) assuming the linear model X = A * S, where A is a
5 % constant 2-by -2 mixing matrix. The "signals" can either be image files
6 % (.png , .jpg), or sound files (.wav). The recovered outputs Y1 and Y2 will
7 % then be uint8 matrices or double vectors accordingly. fscom is the common
8 % sample frequency in case sounds were submitted. BSS will also plot the
9 % 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 A
13 % : X = A * S. Then the function attempts to retrieve the two hidden
14 % 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 results
19 % [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 results
25 % 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 error
47 % occurs.
48 % - If they do not have the same dimensions , the function uses the
49 % minimum dimensions or the shortest duration for sound files.
50 %
51 % * (optional) options is a cell array containing a varying number of
52 % 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 sources
56 % [s1 s2]. BSS will produce two standard mixtures
57 % [x1 x2] using mixing matrix A before executing the blind signal
58 % seperation with [x1 x2].
59 % NB : a matrix A must be given as input.
60 %
61 %
67
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 S
65 % ___________________________________________________________
66 % => default process of separation
67 %
68 % _process_
69 % - R-G-B (DEFAULT , images only) : ICA is applied component by
70 % component: Red , Green and then Blue separately , assuming
71 % different mixings for each color.
72 % - sample : the ICA process treats every other
73 % element of the vector and then applies the result to the whole vector.
74 % - flattening (images only) : ICA is applied to a long
75 % vector resulting from the flattening of the RGB matrix (use of
76 % sample should be preferred for large data)
77 % - bw (images only) : the images will be converted to
78 % gray levels. Only black & white images will be produced.
79 % - bw2rgb (images only) : temporarily converts the images to
80 % grayscale to execute the ICA process. Results are then applied
81 % to RGB images and RGB images are produced.
82 % NB :
83 % () only ONE choice of process for images (but it is possible
84 % 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() or
89 % exp() in its approximation of negentropy.
90 % - sym OR def means that the ICA process decorrelates the
91 % demixing vectors using either symmetry or deflation.
92 % NB :
93 % () only ONE choice for the process of seperation
94 % () DEFAULT execution uses {tanh ,sym }
95 %
96 % {NORMALISATION}
97 % - (images only) mean : results of ICA process are
98 % 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 the
101 % elements of each line of A is one
102 % NB :
103 % () only ONE choice for the normalisation of image results
104 % () 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 N
109 % ___________________________
110 % - edge uses edge detection as process of
111 % separation , with rough force as default process of minimisation.
112 % - (images only) shoot uses edge detection as process of
113 % separation , with shooting method as process of minimisation.
114 % - (sounds only) as uses edge detection as process of
115 % separation , with analycal separation as process.
116 %
117 % * (optional) A is a 2-by -2 matrix as Xi = Aij * Sj
118 %
119 %@POST :
120 % * Y1 is respectively a vector [double], a matrix [uint8] if File1
121 % is respectively a sound , an image.
122 % * Y2 is respectively a vector [double], a matrix [uint8] if File2
123 % is respectively a sound , an image.
124 % * (sounds only) fscom is the sampling frequency used for reading
125 % 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
135 %Version 12.07052013
136 %%%%
137 f unc t i on [Y1 Y2 fscom] = BSS(File1 ,File2 ,options ,A)
138 %disp
139 f p r i n t f (BSS << HELLO !\n)
140
141 % #### IMPORTATION ####
142
143 % Extensions of File_
144 [~,~,EXT1] = fileparts(File1);
145 [~,~,EXT2] = fileparts(File2);
146 % Possible kinds of extensions
147 audio = {.wav};
148 image = {.png,.jpg};
149
150 optionUsed = ;
151
152 fscom = 0; % default value for images
153
154 % Sound or Images
155 i f sum(strcmpi(EXT1 ,audio)) && sum(strcmpi(EXT2 ,audio))
156
157 %disp
158 f p r i n t f (BSS << Files represent sounds. \n)
159
160 [X1 ,X2,fscom] = importaudio(File1 ,File2);
161 kind = ;
162
163 e l s e i f sum(strcmpi(EXT1 ,image)) && sum(strcmpi(EXT2 ,image))
164
165 %disp
166 f p r i n t f (BSS << Files represent images. \n)
167
168 % black and white
169 i f nar gi n > 2 && sum(strcmpi(options ,bw)) && ...
170 ~sum(strcmpi(options ,bw2rgb ) + strcmpi(options ,edge) + strcmpi(options ,
shoot) + strcmpi(options ,as))
171
172 %disp
173 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 );
175
176 [X1 ,X2,sizeImg] = importImage(File1 ,File2 ,bw); % class of outputs is uint8. See
importImage for details.
177
178 % RGB
179 e l s e
180
181 [X1 ,X2,sizeImg] = importImage(File1 ,File2); % class of outputs is uint8. See
importImage for details.
182
183 % (optional)
184 i f nar gi n > 2 && sum(strcmpi(options ,flattening ) + ...
185 strcmpi(options ,sample )) && ...
186 ~sum(strcmpi(options ,edge) + strcmpi(options ,shoot) + strcmpi(options ,as))
187
188 %disp
189 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 end
193
194 X1 = X1(:);
195 X2 = X2(:);
196
197 end
198
199 end
200
201 kind = img;
202
203 e l s e
69
204 e r r or (BSS << Files %s and/or %s do not have allowed format (.wav OR .png/ .jpg),
File1 ,File2);
205 end
206
207
208 % (optional) Mixing sources for artificial test
209 i f nar gi n == 4 && sum(strcmpi(options ,test))
210
211 %disp
212 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 );
214
215
216 S1 = double(X1);
217 S2 = double(X2);
218
219 % Xi = Aij * Sj
220 f o r i = 1 : s i z e (X1 ,2) % counter i goes up to 1 if bw , to 3 if rgb
221
222 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);
224
225 end
226
227 end
228
229
230
231 X1 = double(X1); % conversion of mixed data for later calculation
232 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;
235
236 %%
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 % edge
242 i f nar gi n > 2 && ...
243 sum(strcmpi(options ,edge) + strcmpi(options ,shoot) + strcmpi(options ,as))
244
245 %disp
246 f p r i n t f (BSS << Processing of edges detection launched. \n)
247
248 optionUsed = strcat(optionUsed , - Edge Detection );
249 i f strcmp(kind ,img)
250
251 X1 = uint8(X1);
252 X2 = uint8(X2);
253 X1 = reshape (X1(:),sizeImg);
254 X2 = reshape (X2(:),sizeImg);
255
256 i f sum(strcmpi(options ,shoot))
257 %disp
258 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 e
262 optionUsed = strcat(optionUsed , - standard process );
263 [Y1 ,Y2] = EdgeSeparation(X1,X2);
264 end
265
266 X1 = X1orig;
267 X2 = X2orig;
268 Y1 = reshape (Y1(:) ,[numel(Y1(:,:,1)) 3]);
269 Y2 = reshape (Y2(:) ,[numel(Y2(:,:,1)) 3]);
270
271 e l s e
272 i f sum(strcmpi(options ,as))
273 %disp
70
274 f p r i n t f (BSS << You requested analycal separation as edge detection process for
sounds .\n)
275 optionUsed = strcat(optionUsed , - processing < analycal separation );
276 [Y1 ,Y2] = AnalyticalSeparation(X1,X2);
277 e l s e
278 optionUsed = strcat(optionUsed , - standard process );
279 [Y1 ,Y2] = EdgeSeparationAudio(X1,X2);
280 end
281 end
282 %disp
283 f p r i n t f (BSS << Processing finished. \n);
284 %%-------------------------------------------------------------------------
285 %fastica
286 e l s e
287 optionUsed = strcat(optionUsed , - ICA );
288 % #### OPTIONS FOR NORMALISATION ####
289 i f strcmpi(kind ,img)
290 % potential normalisation options for images
291 i f nar gi n > 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 nar gi n > 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 e
298 f p r i n t f (BSS << Default normalisation for images : mean. \n);
299 normOpt = mean; %default
300 end
301
302 e l s e normOpt = sound ;
303 end
304 optionUsed = strcat(optionUsed , - normalisation = );
305 optionUsed = strcat(optionUsed ,[ normOpt ]);
306
307 % #### OPTIONS FOR PROCESSING ####
308 % decorrelation options
309 i f nar gi n > 2 && sum(strcmpi(options ,def))
310 %disp
311 f p r i n t f (BSS << Decorrelation option is deflation : def \n)
312 decorrOpt = def;
313 e l s e
314 %disp
315 f p r i n t f (BSS << Default decorrelation option : sym for symmetric \n)
316 decorrOpt = sym;
317 end
318 optionUsed = strcat(optionUsed , - decorrolation = );
319 optionUsed = strcat(optionUsed ,[ decorrOpt ]);
320
321
322 % choice of approximation function for negentropy
323 i f nar gi n > 2 && sum(strcmpi(options ,exp))
324 %disp
325 f p r i n t f (BSS << Selected negentropy function is exponential : exp\n)
326 negentfunction = exp;
327 e l s e
328 %disp
329 f p r i n t f (BSS << Default negentropy function : tanh\n)
330 negentfunction = tanh;
331 end
332 optionUsed = strcat(optionUsed , - negentropy function = );
333 optionUsed = strcat(optionUsed ,[ negentfunction ]);
334
335
336 % (optional)
337 i f nar gi n > 2 && sum(strcmpi(options ,bw2rgb )) && strcmp(kind ,img)
338
339 %disp
340 f p r i n t f (BSS << You requested bw2rgb as processing option for color images. \n)
341 optionUsed = strcat(optionUsed , - processing < bw2rgb );
342
343 X1 = X1(:);
344 X2 = X2(:);
345
71
346 X1 = reshape (X1 ,sizeImg);
347 X2 = reshape (X2 ,sizeImg);
348
349 X1 = rgb2gray(uint8(X1)) ;
350 X2 = rgb2gray(uint8(X2)) ;
351
352 X1 = X1(:);
353 X2 = X2(:);
354 end
355
356 i f nar gi n > 2 && sum(strcmpi(options ,sample ))
357
358 %disp
359 f p r i n t f (BSS << You requested sample as processing option. \n)
360 optionUsed = strcat(optionUsed , - processing < sample );
361
362 X1 = X1 (1:+2:end);
363 X2 = X2 (1:+2:end);
364
365 end
366
367
368
369
370
371 % #### PROCESSING ####
372
373 %disp
374 f p r i n t f (BSS << Processing of ICA launched. \n)
375
376 % pre -allocation
377 Y1 = z e r os ( s i z e (X1));
378 Y2 = z e r os ( s i z e (X2));
379 Y1out = z e r os ( s i z e (X1orig));
380 Y2out = z e r os ( s i z e (X2orig));
381
382 % process
383 f o r i = 1 : s i z e (X1 ,2)
384
385 [Y,A,W] = fastica ([X1(:,i);X2(:,i)],decorrOpt ,negentfunction);
386
387 i f i == 1
388
389 Y1(:,1) = Y(1,:) ;
390 Y2(:,1) = Y(2,:) ;
391 tempR1 = Y1(:,1);
392
393 % Sorting
394 e l s e
395
396 corr1 = abs (corr(Y(1,:) ,tempR1)) ;
397 corr2 = abs (corr(Y(2,:) ,tempR1)) ;
398 % color vector of highest correlation with R1 assigned to first
399 % image. That of minimum correlation assigned to second image.
400 [~,I] = min([corr1 ,corr2 ]) ;
401
402 Y1(:,i) = Y(mod(I,2)+1,:);
403 Y2(:,i) = Y(I,:);
404
405
406 %Permute colums of A, lines of W :
407 i f I == 1
408 P = [0 1; 1 0] ; % permutation matrix
409 A = A * P ;
410 W = P * W ;
411 end
412
413
414 end
415
416 % #### NORMALISATION #### prim
417
418
72
419
420 i f s i z e (X1 ,2) > 1
421
422 %disp
423 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);
425
426 end
427
428
429 end
430 %disp
431 f p r i n t f (BSS << Processing finished. \n);
432
433 % #### NORMALISATION #### bis
434 i f s i z e (X1 ,2) == 1
435
436
437 f p r i n t f (BSS << Results are normalised according to option %s. \n,normOpt);
438
439 [Y1out Y2out] = normalisation(X1orig ,X2orig ,A,W,normOpt);
440
441 e l s e
442 optionUsed = strcat(optionUsed , - Default process for RGB images );
443 end
444
445
446 % output
447 X1 = X1orig;
448 X2 = X2orig;
449 Y1 = Y1out;
450 Y2 = Y2out;
451 end % end choixe between edge/ica
452 %%-------------------------------------------------------------------------
453
454
455
456 % #### PLOTTING ####
457
458 %disp
459 f p r i n t f (BSS << Plotting results. \n);
460
461 Title = { Blind Source Separation for options : ; [optionUsed -]};
462
463 % % (optional) Plot and Evaluation
464 i f nar gi n > 2 && sum(strcmpi(options ,test))
465
466 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); end
468
469
470 % only plots if no artificial test was created
471 e l s e
472
473 i f strcmp(kind ,img)
474
475 Y1 = uint8( reshape (Y1(:),sizeImg));
476 Y2 = uint8( reshape (Y2(:),sizeImg));
477
478 X1 = reshape (X1(:),sizeImg) ;
479 X2 = reshape (X2(:),sizeImg) ;
480
481 f i g ur e (); % uint8 format used for display
482 s ubpl ot (2,2,1) ; imshow(uint8(X1) ,[]) ; t i t l e (Mixed images ,Fontsize ,15);
483 s ubpl ot (2,2,2) ; imshow(Y1 ,[]) ; t i t l e (Recovered images ,Fontsize ,15) ;
484 s ubpl ot (2,2,3) ; imshow(uint8(X2) ,[]) ;
485 s ubpl ot (2,2,4) ; imshow(Y2 ,[]) ;
486 suptitle(Title)
487
488
489 e l s e
490
73
491 f i g ur e ();
492 s ubpl ot (2,2,1) ; pl ot (X1) ; t i t l e (Mixed sounds ,Fontsize ,15);
493 s ubpl ot (2,2,2) ; pl ot (Y1) ; t i t l e (Recovered sounds ,Fontsize ,15) ;
494 s ubpl ot (2,2,3) ; pl ot (X2) ;
495 s ubpl ot (2,2,4) ; pl ot (Y2) ;
496 suptitle(Title)
497
498 end
499
500 end
501
502
503 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 function
3 %converts two image files in two (reshaped) matrix [uint8]. If the images
4 %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 respect
19 % 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 unc t i on [vim1 ,vim2 ,sizeImg] = importImage(file1 ,file2 ,option)
25
26
27 im_1 = importdata(file1);
28 im_2 = importdata(file2);
29
30 sizeImg = min( s i z e (im_1), s i z e (im_2));
31
32 mim1 = im_1 (1: sizeImg (1) ,1:sizeImg (2) ,:);
33 mim2 = im_2 (1: sizeImg (1) ,1:sizeImg (2) ,:);
34
35 sizeImg = s i z e (mim1);
36
37 i f nar gi n == 2
38
39 m = numel(mim1 (:,:,1));
40
41 vim1 = z e r os (m,3);
42 vim2 = vim1;
43
44 %return data
45 f o r i = 1 : 3
46 vim1(:,i) = reshape (mim1(:,:,i),m,1);
47 vim2(:,i) = reshape (mim2(:,:,i),m,1);
48 end
49
50 e l s e i f nar gi n == 3 && strcmp(option ,bw)
51
52 mim1 = rgb2gray(mim1);
53 mim2 = rgb2gray(mim2);
74
54
55 sizeImg = s i z e (mim1);
56
57 vim1 = mim1 (:);
58 vim2 = mim2 (:);
59
60 e l s e
61 e r r or (importImage : Invalid arguments :%s.,option);
62 end
63
64
65 end
D.1.3 importaudio.m
1 % [Y1,Y2,FScom]= IMPORTAUDIO(SFILE1 ,SFILE2) returns vectors y1 and y2
2 % corresponding to the audio data contained in the monophonic WAVE files
3 % SFILE1 and SFILE2 (SFILE1 and SFILE2 are strings in single quotation
4 % 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 input
7 % signals.
8 % If one recording is longer than the other it will be truncated and its
9 % beginning only will be kept so that both recordings have durations equal
10 % to that of the shortest signal. Linearly interpolated data is added to
11 % the audio data of lowest original sample frequency to match the fastest
12 % sample frequency of the two original signals.
13 %
14 % [Y1, fscom] = IMPORTAUDIO(SFILE1) only returns the audio data contained
15 % in the monophonic WAVE file SFILE1 and its sampling frequency.
16
17
18 f unc t i on [y1 ,y2,fscom] = importaudio(sfile1 ,sfile2)
19 [y1 ,fscom] = wavread(sfile1) ;
20 i f min( s i z e (y1))==2
21 warning(Importaudio: argincheck: File %s seems to contain stereo data , which is not
supported by this function ,sfile1);
22 end
23 i f nar gi n ==1 && nargout ==3
24 warning(Importaudio: argincheck: only one sound file provided. Second and third output
arguments will simply correspond to sampling frequency );
25 end
26
27 y2 = fscom ;
28 i f nar gi n ==2
29 [y2 ,fs2] = wavread(sfile2) ;
30 i f min( s i z e (y2))==2
31 warning(Importaudio: argincheck: file %s seems to contain stereo data , which is not
supported by this function ,sfile2);
32 end
33 [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 with
3 % sample frequency FSCOMMON from audio data vectors Y1 and Y2 of possibly
4 % different lengths and sampled at possibly different rates FS1 and FS2.
5 % YLONG and YSHORD will correspond to the audio signals of respectively
6 % longest and shortest original duration.
7
8 f unc t i on [ylong ,yshort ,fscommon] = equalizesignals(y1 ,fs1 ,y2,fs2)
9 % compare time durations
10 i f l engt h (y1)/fs1 > l engt h (y2)/fs2
75
11 ylong = y1 ; fslong = fs1 ;
12 yshort = y2 ; fsshort = fs2 ;
13 e l s e
14 ylong = y2 ; fslong = fs2 ;
15 yshort = y1 ; fsshort = fs1 ;
16 end
17 % number of samples and duration of signals
18 nlong = l engt h (ylong) ;
19 dmax = nlong/fslong ;
20 nshort = l engt h (yshort) ;
21 dmin = nshort/fsshort ;
22 fscommon = max(fs1 ,fs2) ;
23
24 % In case of equal sample frequencies
25
26 i f fs1==fs2
27 ylong = ylong (1: l engt h (yshort)) ;
28 r et ur n ;
29 end
30
31 % Matching the faster sample rate:
32
33
34 % case 1: shorter signal had slower sample rate that longer signal:
35 % long signal truncated and interpolation samples added to shortest signal
36 i f fsshort < fslong
37 retsamples = round(fslong*dmin) ; % retained samples for truncation of longer signal
38 yshort = i nt e r p1 ( l i ns pac e (0,dmin ,nshort),yshort , l i ns pac e (0,dmin ,retsamples),linear ) ;
39 ylong = ylong (1: retsamples) ;
40
41 % case 2: shorter signal with faster sample rate: short signal untouched ,
42 % only beginning of long signal conserved with interpolated data added in
43 % between existing samples
44 e l s e
45 ylong = i nt e r p1 ( l i ns pac e (0,dmax ,nlong),ylong , l i ns pac 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 the
3 %signals -source [S1 S2], mixed signals [X1 X2] and the results of process
4 %[Y1 Y2]. Morever , this function return the quality of the process by
5 %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/dimensions
16 % 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 of
21 % process , in respect for the first and second sources.
22 %
23 %%%%
24 f unc t i on [Y1 ,Y2,quality] = feedbackResults(S1,S2 ,X1,X2,Y1 ,Y2,Title ,sImg)
25
26
27 % Quality
28 quality = [0 0];
29 f o r i = 1 : s i z e (X1 ,2)
30
31 [Y,qual] = evaluateOutputs ([S1(:,i); S2(:,i) ],[Y1(:,i) ; Y2(:,i) ]);
76
32 quality = quality + qual;
33 Y1(:,i) = Y(1,:);
34 Y2(:,i) = Y(2,:);
35
36 end
37 quality = quality / s i z e (X1 ,2);
38
39
40 % Plot
41 % <sounds
42 i f nar gi n == 7
43
44 f i g ur e ();
45 s ubpl ot (2,3,1) ; pl ot (X1) ; t i t l e (Mixed sounds ,Fontsize ,15);
46 s ubpl ot (2,3,2) ; pl ot (Y1) ; t i t l e ({Recovered sounds ; [(quality: num2str (quality (1))
& num2str (quality (2)) )] },Fontsize ,15) ;
47 s ubpl ot (2,3,3) ; pl ot (S1) ; t i t l e (Sources ,Fontsize ,15)
48 s ubpl ot (2,3,4) ; pl ot (X2) ;
49 s ubpl ot (2,3,5) ; pl ot (Y2) ;
50 s ubpl ot (2,3,6) ; pl ot (S2) ;
51 suptitle(Title)
52
53 % <images
54 e l s e i f nar gi n == 8
55
56 Y1 = uint8(Y1(:));
57 Y2 = uint8(Y2(:));
58 X1 = X1(:);
59 X2 = X2(:);
60
61
62 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) ;
68
69 f i g ur e ();
70 s ubpl ot (2,3,1) ; imshow(uint8(X1) ,[]) ; t i t l e (Mixed images ,Fontsize ,15);
71 s ubpl ot (2,3,2) ; imshow(Y1 ,[]) ; t i t l e ({Recovered images ; [(quality: num2str (quality
(1)) & num2str (quality (2)) )] },Fontsize ,15) ;
72 s ubpl ot (2,3,3) ; imshow(uint8(S1) ,[]) ; t i t l e (Sources ,Fontsize ,15)
73 s ubpl ot (2,3,4) ; imshow(uint8(X2) ,[]) ;
74 s ubpl ot (2,3,5) ; imshow(Y2 ,[]) ;
75 s ubpl ot (2,3,6) ; imshow(uint8(S2) ,[]) ;
76 suptitle(Title)
77
78 e l s e
79 e r r or (feebackResults () : Number of inputs is not correct.);
80 end
81
82 end
D.1.6 evaluateOutputs.m
1 % [YSORTED ,QUALITY] = EVALUATEOUTPUTS(S,Y,SORTOPTION) sorts output signals
2 % in Y and evaluates their "goodness" with respect to the source signals in
3 % S.
4 % S is a k-by-n matrix containing k source signals of n samples each. Y
5 % is a k-by-n matrix containing k recovered signals (in a possibly wrong
6 % order) YSORTED contains the rows of Y sorted so that they match the
7 % source signals according to our quality criterion (see below). QUALITY is
8 % a 1-by-k row vector containing an evaluation of quality for each source
9 % signal -recovered signal pair , according to the formula:
10 % quality = -log10( abs( cos( angle(S(i,:),Ysorted(i,:)) ) ) )
11 % i = 1,...,k
12
13 f unc t i on [Y,quality ] = evaluateOutputs(S,Y,sortOption)
14 i f s i z e (S,1) > s i z e (S,2)
77
15 S = S ;
16 end
17 i f s i z e (Y,1) > s i z e (Y,2)
18 Y = Y ;
19 end
20
21 i f any( s i z e (S) ~= s i z e (Y))
22 e r r or (ArginCheck: Number of signals and/or number of samples do not match);
23 end
24 i f nar gi n ==2
25 sortOption=on;
26 end
27
28 i f strcmpi(sortOption ,on)
29 [numSigs ,numSamples] = s i z e (S) ;
30 quality = z e r os (1,numSigs) ;
31 f o r i=1: numSigs
32 cand = z e r os (1,numSigs -i+1) ;
33 f o r j=i:numSigs
34 cand(j-i+1) = - l og10 ( 1-cosineangle(S(i,:) ,Y(j,:) ) ) ;
35 end
36 [quality(i),I] = max(cand) ; % the greater the better
37 temp = Y(i,:) ;
38 Y(i,:) = Y(I+i-1,:) ;
39 Y(I+i-1,:) = temp ;
40 end
41
42 e l s e
43 quality = - l og10 (1- cosineangle(S,Y)) ;
44 end
45
46
47
48 end
49
50 %Y = COSINEANGLE(V1 ,V2) returns the absolute value of the cosine of the angle
51 %between V1 and V2 columnwise. V1 and V2 must have the same number j of
52 %columns and A will be a 1xj row vector. V1 and V2 should not have any
53 %zero -column (angle would then be undefined , Nan returned)
54 f unc t i on out = cosineangle(V1,V2)
55 i f any( s i z e (V1)~= s i z e (V2))
56 e r r or (ArginCheck: V1 and V2 must have identical sizes);
57 end
58 i f ~strcmpi(class(V1),class(V2))
59 V1 = double(V1) ;
60 V2 = double(V2) ;
61 end
62
63 % In case vectors are very large , divide by their mean in order to avoid loss or
64 % accuracy when computing the norms and dot product(s)
65 i f s i z e (V1 ,1) > 10000
66 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 end
69
70 norm1 = sum(V1.^2) ;
71 norm2 = sum(V2.^2) ;
72 % separate the norm products in the sqrt to avoid overflows and loss of accuracy
73 out = dot (V1 ,V2)./ ( s qr t (norm1).* s qr 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 Dtection de contours
D.2.1 EdgeSeparation.m
1
2 f unc t i on [ ImageFinale1 ,ImageFinale2 ] = EdgeSeparation(InputColor1 ,InputColor2 )
78
3 % Entrees: InputColor1 et InputColor2 sont des tableaux de uint8 de taille
4 % n*m*3
5 % Sorties: ImageFinale1 et ImageFinale2 sont des tableaux de uint8 de taille
6 % n*m*3
7 %Affiche les mixtures (en couleur) et les images de sortie (en
8 %couleur) pour linstant
9
10
11
12 AA=rgb2gray(InputColor1);
13 BB=rgb2gray(InputColor2);
14
15
16
17 Pas =0.005;
18 MaxSoustraction =1;
19
20 AA=double(AA);
21 BB=double(BB);
22 InputColor1=double(InputColor1);
23 InputColor2=double(InputColor2);
24
25
26 Ed1=edge1(AA);
27 Ed2=edge1(BB);
28 EdTot=double ((Ed1+Ed2) >0);
29
30
31 %ici on commence la soustraction des images mixees et le calcul des edges
32 %pour estimer le moment ou il ne reste quune seul image (donc les edges de
33 %lautre image ont disparus totalement)
34
35 loopval = 0:Pas:MaxSoustraction ;
36
37 nIt= l engt h (loopval);
38
39 ComEdge1 = z e r os (1,nIt) ;
40 ComEdge2 = z e r os (1,nIt) ;
41
42
43 f o r i=1:nIt
44 [p]= detectedge2(AA ,BB,loopval(i),EdTot);
45 ComEdge1(i) = p ;
46
47 [p2]= detectedge2(BB,AA ,loopval(i),EdTot);
48 ComEdge2(i) = p2 ;
49 end
50
51
52
53
54 % trouve le coefficient de soustraction qui separe les deux images a partir
55 % de vecteur contenant les edges communs , le critere est de
56 % prendre le premier point de remonte du graph
57 y= d i f f (ComEdge1);
58 Source1 =0; aa=0;
59 f o r i=1: l engt h (y)
60 i f y(i) >10
61 i f Source1 ==1
62 e l s e Source1 =1; aa=i;
63 end
64 end
65 end
66
67 y2= d i f f (ComEdge2);
68 a2=0; aa2=0;
69 f o r i=1: l engt h (y)
70 i f y2(i) >10
71 i f a2==1
72 e l s e a2=1; aa2=i;
73 end
74 end
75 end
79
76
77
78
79 %normalisation des sorties
80
81 rap1 =255/max(max(AA -((aa)*Pas)*BB));
82 imagefinal1 =(AA -((aa)*Pas)*BB)*rap1;
83
84 rap2 =255/max(max((BB -((aa2)*Pas)*AA)));
85 imagefinal2 =(BB -((aa2)*Pas)*AA)*rap2;
86 %calcul des sorties en couleur
87 ImageFinale1=uint8 (( InputColor1 -((aa)*Pas)*InputColor2)*rap1);
88 ImageFinale2=uint8(( InputColor2 -(( aa2)*Pas)*InputColor1)*rap2);
89
90 end
91
92
93 f unc t i on [grad] = edge1(entree)
94 %Calcul le gradient dune matrice puis determine lexistence dedge
95 %Entree: matrice n*m
96 %Sortie: matrice des edges de la matrice dentree , ne comptient que des 0
97 %et 1
98
99 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];
102
103 Gx = conv2(double(Mx),entree);
104 Gy = conv2(double(My),entree);
105
106 grad = double( s qr t (abs (Gx.^2) + abs (Gy.^2)));
107
108
109 grad=double(grad >40);
110
111
112 end
113
114 f unc t i on [ K] = detectedge2( A,B,c,Ed )
115 %Calcul le nombre de pixel ou il y a un contour commun entre la matrice de
116 %contour de A-c*B et Ed
117 %Entree: A, matrices n*m, c scalaire , Ed matrice n*m
118 %Sortie: K nombre de pixel ou il y a un edge commun , K scalaire
119
120 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 soustraction
127 D1=edge1(D);
128
129 dsum=double(D1+Ed);
130
131 K=sum(sum(dsum >1));
132
133 end
D.2.2 EdgeSeparationTir.m
1 f unc t i on [ ImageFinale1 ,ImageFinale2 ] = EdgeSeparationTir(InputColor1 ,InputColor2 )
2
3 % Entrees: InputColor1 et InputColor2 sont des tableaux de uint8 de taille
4 % n*m*3
5 % Sortie: ImageFinale1 et ImageFinale2 sont des tableaux de uint8 de taille
6 % n*m*3
7
8
9
80
10 %Les images dentree sont passees en noir et blanc afin daccelerer la
11 %methode et de ne pas devoir faire une convolution en 3 dimensions. Ensuite
12 %nous passons toutes nos donnees en double afin de diminuer les erreurs
13 %darrondis dus a un format en 8 bit
14 AA=rgb2gray(InputColor1);
15 BB=rgb2gray(InputColor2);
16
17
18
19 Pas =0.005;
20 MaxSoustraction =1;
21
22 AA=double(AA);
23 BB=double(BB);
24 InputColor1=double(InputColor1);
25 InputColor2=double(InputColor2);
26
27
28 Ed1=edge1(AA);
29 Ed2=edge1(BB);
30
31 Ed1=double(Ed1)+double(Ed2);
32
33 loopval = 0:Pas:MaxSoustraction ;
34
35 nIt= l engt h (loopval);
36
37 ComEdge1 = z e r os (1,nIt) ;
38 ComEdge2 = z e r os (1,nIt) ;
39
40 a=0;
41 b=0.9;
42 at=0;
43 bt=0.9;
44
45 % Methode du tir pour accelerer grandement les calculs
46 f o r i=1:11
47
48 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;
52
53 i f pc >0
54 b=c;
55 e l s e
56 a=c;
57 end
58
59 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;
63
64 i f pct >0
65 bt=ct;
66 e l s e
67 at=ct;
68 end
69
70 end
71
72 % Calcul et normalisation des images de sorties
73 rap1 =255/max(max(AA -((c))*BB));
74 ImageFinale1Gray =(AA -((c))*BB)*rap1;
75
76 rap2 =255/max(max((BB -((ct))*AA)));
77 ImageFinale2Gray =(BB -((ct))*AA)*rap2;
78
79
80 ImageFinale1=uint8(( InputColor1 -((c))*InputColor2)*rap1);
81 ImageFinale2=uint8(( InputColor2 -((ct))*InputColor1)*rap2);
82
81
83
84 end
85
86 f unc t i on [grad] = edge1(entree)
87 %Calcul le gradient dune matrice puis determine lexistence de contour
88 %Entree: matrice n*m
89 %Sortie: matrice des contours de la matrice dentree , ne contient que des 0
90 %et 1
91
92 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];
95
96 Gx = conv2(double(Mx),entree);
97 Gy = conv2(double(My),entree);
98
99 grad = double( s qr t (abs (Gx.^2) + abs (Gy.^2)));
100
101 grad=double(grad >40);
102
103
104 end
105
106 f unc t i on [ K] = detectedge2( A,B,c,Ed )
107 %Calcul le nombre de pixel ou il y a un contours commun entre la matrice de
108 %contour de A-c*B et Ed
109 %Entree: A et B matrices n*m, c scalaire , Ed matrice n*m booleenne
110 %Sortie: K nombre de pixel ou il y a un contour commun , K scalaire
111
112 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;
118
119 D1=edge1(D);
120
121 dsum=double(D1+Ed);
122
123 K=sum(sum(dsum >1));
124
125 end
D.2.3 EdgeSeparationAudio.m
1 f unc t i on [NormalisedOutput1 ,NormalisedOutput2 ] = EdgeSeparationAudio( mix1 ,mix2 )
2 %entrees: audio1 et audio2 sont des vecteurs contenant du son de meme taille
3 %Sorties: sort les deux vecteurs contenant le son des sons separes
4
5
6 seuil =10^ -4;
7 NOMBRE =6;
8 n=100* NOMBRE;
9 pas =1/n;
10
11 % Calcul du graphe des contours communs
12 commonEdge1=CommonEdgeCompute(mix1 ,mix2 ,seuil ,NOMBRE ,n );
13 commonEdge2=CommonEdgeCompute(mix2 ,mix1 ,seuil ,NOMBRE ,n );
14
15 commonEdgeTot =[ commonEdge1 commonEdge2 ];
16
17 % Choix des deux plus petits minimums locaux comme approximation de la
18 % solution
19
20 [C2 ,I2]= findpeaks(-commonEdgeTot);
21 CI2=sortrows ([C2 I2 ],-1);
22
23 % Raffinement de lapproximation trouvee
24 [ sonfinalTot1 ,sonfinalTot2 ] = RafiningDelta( CI2 ,n,mix1 , mix2 , seuil ,NOMBRE , pas );
82
25
26 % Normalisation des sorties
27 NormalisedOutput1=sonfinalTot1 /(2*max(sonfinalTot1));
28 NormalisedOutput2=sonfinalTot2 /(2*max(sonfinalTot2));
29
30 end
31
32 f unc t i on [commonEdge1 ] = CommonEdgeCompute(mix1 ,mix2 ,seuil ,NOMBRE ,n )
33 %Calcul le nombre de contour commun du resultat de mix1 -a*mix2 pour n
34 %valeurs de a reparties uniformement dans lintervalle [0,1]
35
36 commonEdge1= z e r os (1,n);
37 EdgeEnv1=edgedetection1D(mix1 ,seuil);
38 mean1=mean(mix1);
39
40 f o r a=1:n
41 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 end
47 end
48
49 f unc t i on [ edge] = edgedetection1D(signal ,seuil )
50 % Calcul le vecteur gradient du signal puis calcul du vecteur contour
51 % pour un certain seuil
52 matrix =[-1 0 1];
53 convo=abs (conv2(matrix ,signal));
54 f o r i=1: l engt h (convo)
55 i f convo(i)> seuil
56 convo(i)=1;
57 e l s e
58 convo(i)=0;
59 end
60 end
61 edge=convo;
62 end
63
64 f unc t i on [ number ] = commonedge( S1,S2 )
65 % Calcul le nombre de contours commun entre deux vecteurs contenants les
66 % contours
67 number =0;
68 somme=S1+S2;
69 f o r i=1: l engt h (S1);
70 i f somme(i)==2
71 number=number +1;
72 end
73 end
74 end
75
76 f unc t i on [ NextCoef ] = Rafining( mix1 , mix2 , seuil ,NOMBRE ,coef , order , pas)
77 % Affine un resultat iterativement en diminuant localement le pas
78 % et le seuil de la methode a chaque iteration
79
80 a=pas;
81 i f order ==2
82 mix1b=mix1;
83 mix1=mix2;
84 mix2=mix1b;
85 end
86 i=0;
87 n=0;
88
89 % A chaque iteration deux points a cote de lapproximation du dernier
90 %coefficient cherche sont testes et le meilleur des trois est garde. Si
91 %aucun des deux points nest meilleur , alors le pas et le seuil sont
92 %diminues.
93 whi l e i<40 && n<400
94
95 edgeenv=edgedetection1D(mix1 ,seuil);
96 mean1=mean(mix1);
97
83
98 soust=mix1 -(coef/( NOMBRE *100))*mix2;
99 soust=soust*mean1/mean(soust);
100 edgeenv2=edgedetection1D(soust ,seuil);
101 commonEdge=commonedge(edgeenv ,edgeenv2);
102
103 soust1=mix1 -(( coef+a)/( NOMBRE *100))*mix2;
104 soust=soust1*mean1/mean(soust1);
105 edgeenv2=edgedetection1D(soust ,seuil);
106 CommonEdge1=commonedge(edgeenv ,edgeenv2);
107
108 soust2=mix1 -((coef -a)/( NOMBRE *100))*mix2;
109
110 soust=soust2*mean1/mean(soust2);
111 edgeenv2=edgedetection1D(soust ,seuil);
112 CommonEdge2=commonedge(edgeenv ,edgeenv2);
113
114 i f commonEdge <= CommonEdge1 && commonEdge <= CommonEdge2
115 a=a/1.6;
116 seuil=seuil /1.1;
117 i=i+1;
118 n=n+1;
119 end
120 i f CommonEdge1 <= commonEdge && CommonEdge1 <= CommonEdge2
121 coef=coef+a;
122 n=n+1;
123
124 end
125 i f CommonEdge2 <= commonEdge && CommonEdge2 <= CommonEdge1
126 coef=coef -a;
127 n=n+1;
128
129 end
130
131 end
132
133 NextCoef =coef;
134 end
135
136 f unc t i on [ sonfinalTot1 ,sonfinalTot2 ] = RafiningDelta( CI2 ,n,mix1 , mix2 , seuil ,NOMBRE , pas )
137 % Choisit lordre dans lequel doit etre soustrait les mixtures , appel la
138 % fonction de raffinage et ensuite calcule les sources associees aux
139 % coefficients de separation trouves.
140 i f CI2(1,2)> n
141 number1 =(CI2(1,2)-n);
142 newCoef1=Rafining( mix1 , mix2 , seuil ,NOMBRE ,number1 , 2, pas);
143 sonfinalTot1 =(mix2 -( newCoef1 /( NOMBRE *100))*mix1);
144
145
146 e l s e
147 number1=CI2(1,2);
148 newCoef1=Rafining( mix1 , mix2 , seuil ,NOMBRE ,number1 , 1, pas);
149 sonfinalTot1 =(mix1 -( newCoef1 /( NOMBRE *100))*mix2);
150 end
151
152 i f CI2(2,2)> n
153 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 e
157 number2=CI2(2,2);
158 newCoef2=Rafining( mix1 , mix2 , seuil ,NOMBRE , number2 ,1, pas);
159 sonfinalTot2 =(mix1 -( newCoef2 /( NOMBRE *100))*mix2);
160 end
161
162 end
D.2.4 AnalyticalSeparation.m
1 f unc t i on [ NormalisedOutput1 ,NormalisedOutput2 ] = AnalyticalSeparation( mix1 ,mix2)
2 %entrees: mix1 et mix2 sont des vecteurs contenant du son de meme taille
84
3 %Sorties: sort les deux vecteurs contenant le son des sons separes
4
5
6 % Calcul du gradient des vecteurs dentre
7 matrix =[-1 0 1];
8 convo1=conv2(matrix ,mix1);
9 convo2=conv2(matrix ,mix2);
10
11 % Calcul du point dannulation theorique de chaque element du vecteurs , en
12 % prenant en compte le cas ou il ny en as pas et en travaillant avec une
13 % precision de 10^-14 pour eviter les erreurs de lordre de lepsilon
14 % machine
15 list= z e r os ( l engt h (convo1) ,1);
16 list2= z e r os ( l engt h (convo1) ,1);
17 listNumber=ones( l engt h (convo1) ,1);
18
19 f o r i=1: l engt h (convo1)
20 i f convo2(i)==0
21 list(i)=0;
22 e l s e
23 sep= f l o o r (( convo1(i)/convo2(i))*10^15) /10^15;
24 list(i)=sep;
25 end
26 end
27
28 % Calcul du coefficient de soustraction qui maximise le nombre de point ou
29 % le gradient est nul
30
31 a=0;
32 k=1;
33 f o r i=1: l engt h (list)
34 a=list(i);
35 i f sum(list2==a)>0
36 [c,b]=max(list2==a);
37 listNumber(b)= listNumber(b)+1;
38 e l s e
39 list2(k)= a;
40 k=k+1;
41 end
42 end
43
44
45
46 [SortedList Index ]= sortrows(listNumber ,-1);
47 sep1=list2(Index (1));
48 i=2;
49 sep2= list2(Index (2));
50
51 whi l e abs (list2(Index(i))-list2(Index (1))) <10^-15
52 i=i+1;
53 sep2= list2(Index(i));
54 end
55
56
57
58 % Calcul et normalisation des sorties
59 sonfinalTot1 =(mix1 -sep1*mix2);
60 sonfinalTot2 =(mix1 -sep2*mix2);
61 NormalisedOutput1=sonfinalTot1 /(2*max(sonfinalTot1));
62 NormalisedOutput2=sonfinalTot2 /(2*max(sonfinalTot2));
63
64 end
D.3 ICA
Les codes fastica.m, fxptica.m et whiten.m sont inspirs de lalgorithme dcrit dans [4]
et par le package fastICA Matlab de Aapo Hyvrinen, disponible sur lurl http://www.cs.
helsinki.fi/u/ahyvarin/papers/fastica.shtml.
85
D.3.1 fastica.m
1 % [Y,A,Ainv ,Whmat ,Dwmat] = fastica(X,decorrOpt ,negentFunction)
2 % Main function for blind source separations of mixed signals
3 %
4 % @pre :
5 % - X is a k-by -n matrix containing k signals of n samples each (one
6 % signal per row)
7 % - decorrOpt : string specifying decorrelation approach: symmetric or
8 % 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 case
11 % unknown or no option specified).
12 % @post :
13 % - Y : k-by-n matrix of the k vectors of length n corresponding to the
14 % estimated independent sources
15 % - 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 %
21
22
23 f unc t i on [Y,A,Ainv ,Whmat ,Dwmat] = fastica(X,decorrOpt ,negentFunction);
24 %% 0. Identifying decorrelation approach
25 i f nargi n <3
26 negentFunction = tanh;
27 end
28 i f nar gi n <2
29 decorrOpt = sym ;
30 end
31
32 %% 1. preprocessing
33 n = max( s i z e (X)) ;
34 k = min( s i z e (X)) ;
35
36 i f s i z e (X,1) > s i z e (X,2)
37 X = X ;
38 end
39 X = double(X);
40
41 % 1.1 Removing the mean
42 meanX = mean(X) ;
43 X = X - meanX*ones(1,n) ;
44
45 % 1.2. Whitening
46
47 [Xw , Whmat , Dwmat] = whiten(X) ;
48
49 %% 2. Fast ICA : getting A and inv(A)
50 %fixed -point algorithm
51 [A,Ainv] = fxptica(Xw,Whmat ,Dwmat ,decorrOpt ,negentFunction) ;
52
53 %% 3. Returning source signals (+ adding the mean back)
54 i f ~i sempty(A) && ~i sempty(Ainv)
55 Y = Ainv*(X + meanX*ones(1,n) ) ; % after dewhitening
56 e l s e
57 f p r i n t f (FastICA was not able to recover the source signals: empty matrix returned \n);
58 Y = [];
59 end
60
61 i f ~ i s r e a l (Y)
62 warning(FastICA: output signals contain imaginary parts);
63 end
64
65
66 end
86
D.3.2 fxptica.m
1 % [A,Ainv] = fxptica(X,Wmat ,Dwmat ,decorrOpt)
2 % Sub -function called by fastica that performs the Newton -Raphson
3 % fixed -point iteration.
4 %
5 % @pre :
6 % - X : k-by-n matrix containing the k whitened signals of length n
7 % - Wmat : k-by -k whitening matrix
8 % - Dwmat : k-by-k dewhitening matrix
9 % - 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 to
12 % approximate negentropy: tanh or exp (default is tanh in case
13 % 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 %
18
19
20 f unc t i on [A,Ainv] = fxptica(X,Wmat ,Dwmat ,decorrOpt ,negentFunction)
21 %% Identifying decorrelation approach and non linearity used
22 decorrApproach = 1 ; % default values
23 nonlinearity = 1 ;
24 i f nargi n >=5
25 i f any(strcmpi(negentFunction ,{exp,expo,expon ,expu,ex}))
26 nonlinearity = 2 ;
27 end
28 end
29 i f nar gi n >=4
30 i f any(strcmpi(decorrOpt ,{deflation ,defl,def}))
31 decorrApproach = 2 ;
32 end
33 end
34 i f nar gi n <3
35 e r r or (fxptica:arginCheck: at least 3 input arguments needed );
36 end
37
38 i f nonlinearity ==1
39 f p r i n t f (Non -linearity used: tanh(x) \n)
40 e l s e
41 f p r i n t f (Non -linearity used: exp(x) \n )
42 end
43 %% Parameters
44 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 ...
48
49 %% fixed point iteration
50 switch decorrApproach
51 case 1 % SYMMETRIC
52 f p r i n t f (Fxptica : symmetric approach for decorrelation \n);
53 W = orth (randn (numSigs));
54 WOld = z e r os ( s i z e (W));
55
56 % Loop for Symmetric orthogonalization.
57 f o r round = 1: maxIt + 1
58 i f round == maxIt + 1,
59 f p r i n t f (No convergence after %d steps\n, maxIt);
60 i f ~i sempty(W)
61 W = W * r e a l ( i nv (W * W)^(1/2));
62 A = Dwmat * W;
63 Ainv = W*Wmat ;
64 e l s e
65 W = [];
66 A = [];
67 end
68 r et ur n ;
69 end
70
87
71
72 W = r e a l ( i nv (W * W) ^(1/2)) * W ;
73
74 minAbsCos = min(abs ( di ag (W * WOld )));
75
76 i f (1 - minAbsCos < tol)
77 A = Dwmat * W; % final Afica
78 break;
79 end
80 WOld = W;
81
82 % Getting next W with a N-R iteration using tanh or exp non
83 % linearity
84 i f nonlinearity ==1
85 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 ==2
89 % formula (47) page 15
90 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 + di ag (Alpha)*( - di ag (Beta) + gY*Y )*W ;
96
97 end
98
99 end
100
101 % after loop (symmetric approach)
102 W = r e a l ( i nv (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 % DEFLATION
107 case 2
108 f p r i n t f (Fxptica: deflation approach for decorrelation \n);
109 W = z e r os (numSigs); % matrix W ( approximately inv(\tilde{A}) )
110 Ainv = z e r os (numSigs) ;
111 A = z e r os (numSigs) ;
112
113 numFailures = 0;
114 failureLimit = 2* numSigs ;
115
116 round = 1 ;
117 whi l e round <= numSigs
118 w = ones(numSigs , 1); % affects convergence! rand , randn , ones ,..
119 w = w - W * W * w;
120 w = w / norm(w);
121
122 wOld = z e r os ( s i z e (w));
123
124 % computing a line of W (w)
125 i = 1;
126 f o r i =1: maxIt
127
128 w = w - W * W * w; % equations (44) page 15
129 w = w / norm(w);
130
131 % convergence test
132 i f norm(abs (w - wOld)) < tol
133 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 yet
135 W(round ,:) = w ;
136 Ainv = W*Wmat ; % back to dewhitened vectors ( W = inv(Wmat*A) )
137 A = Dwmat * W;
138
139 break;
140 end
141
88
142 wOld = w;
143
144 % N-R iteration using tanh or exp non -linearity
145 i f nonlinearity == 1
146 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!
150
151 w = w / norm(w);
152 e l s e i f nonlinearity == 2
153 %%%%% formula (43) page 14
154 u = X * w; % n-by -1 vec used several times
155 usq=u.^2; % used for g and dg/du
156 expon=exp(- usq/2); % used for g and dg/du
157 gu = u.*expon;
158 dgu = (1 - usq) .*expon;
159 Xu = X*gu ; % used for beta and final iteration
160 Beta = w * Xu; % scalar number. No division by numel because they
cancel out afterwards
161 w = w - ((Xu - Beta * w) / (sum(dgu) - Beta));
162
163 end
164 end
165
166 % check convergence after getting out of the iteration loop
167 i f i == maxIt
168 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 > failureLimit
172 f p r i n t f (Giving up fixed -point ICA after %i failures to converge .\n,
numFailures);
173 i f round == 0
174 A=[];
175 W=[];
176 Ainv = [] ;
177 end
178 r et ur n ;
179 end
180 end
181
182 % one component computed or aborted (in which case round was
183 % reduced by 1). On to next component.
184 round = round +1 ;
185 end
186
187 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 decorraproach
191
192 %% Final check
193 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 end
198
199
200
201
202 end % end of function fxptica
203
204 % More efficient than Matlab tanh function according to A. Hyvarinen
205 f unc t i on y=tanh(x)
206 y = 1 - 2 ./ (exp(2 * x) + 1);
207 end
89
D.3.3 whiten.m
1 % [X, W, U] = whiten(X,dim)
2 % Whitens signals contained in X and (optionally) projects them onto a
3 % subspace of lower dimension made of the principal axes.
4 %
5 % @pre:
6 % - X : k-by -n matrix containing k observed signal of length n
7 % - dim : the dimension to which data will be reduced (eg if k=15 and dim
8 % = 5 only 5 signals will be returned , containing information about all 15
9 % 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 n
14 % - W : k-by -k or dim -by -k whitening matrix
15 % - U : k-by -k or k-by-dim dewhitening matrix
16 %
17 % Code inspired by Aapo Hyvarinen
18 % (University of Helsinki , Faculty of Science).
19 f unc t i on [X, W, U] = whiten(X,dim)
20
21 i f nar gi n ==1
22 dim = min( s i z e (X)) ;
23 end
24
25 % reshaping X to a horizontal matrix
26 i f s i z e (X,1) > s i z e (X,2)
27 X = X ;
28 end
29
30 covmat = cov(X) ; % best unbiased estimator for gaussian random variables (better than cov(X
,1) )
31
32 [V,D] = eigs(covmat ,dim ,lm) ;
33
34 % Covariance matrices are semi -positive definite. Eigenvalues should be non
35 % negative
36 i f any( di ag (D))<0
37 e r r or (Covariance matrix of observations has %i negative eigenvalues ,sum( di ag (D) <0));
38 end
39 % Whitening and dewhitening matrices
40 W = di ag (1./ s qr t ( di ag (D)))*V ;
41 U = V* s qr t (D) ;
42
43 % whitened vectors
44 X = W*X ;
D.3.4 normalisation.m
1 %%%%
2 %[Y1 Y2] = normalisation(X1 ,X2,A,W,KIND) normalizes results given by
3 %fastica.m
4 %
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.m
9 % * 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 unc t i on [Y1 Y2] = normalisation(X1,X2,A,W,KIND)
18
90
19
20 switch KIND
21
22 case {mean}
23
24 lim = s i z e (X1);
25
26 Y1 = z e r os (lim);
27 Y2 = z e r os (lim);
28
29 f o r i = 1 : s i z e (X1 ,2)
30
31 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) ;
33
34 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 ;
39
40 end
41
42
43 case {normA }
44
45 Anorm = abs (A) ;
46 Anorm = Anorm ./( sum(Anorm ,2)*ones (1,2) ) ;
47 W = i nv (Anorm) ;
48
49 Y1 = W(1,1)*X1 + W(1,2)*X2 ;
50 Y2 = W(2,1)*X1 + W(2,2)*X2 ;
51
52 case {sound }
53
54 Y1 = W(1,1)*X1 + W(1,2)*X2 ;
55 Y2 = W(2,1)*X1 + W(2,2)*X2 ;
56
57 b = 1;
58 a = -b;
59
60 M1 = max(Y1) ;
61 m1 = min(Y1) ;
62 Y1 = (Y1 -M1)*(b-a)/(M1-m1) +b ;
63
64 M2 = max(Y2) ;
65 m2 = min(Y2) ;
66 Y2 = (Y2 -M2)*(b-a)/(M2-m2) +b ;
67
68 otherwise
69 e r r or (Not possible to match a normalisation option with : %s,KIND)
70
71 end
72
73
74
75 end
91

You might also like