1.2 Independent Component Analysis
1.2 Independent Component Analysis
1.2.1 Independent Component
1.2.1 Independent Component
In[]:=
RandomSeed[1234];
In[]:=
R=RandomReal[{0,1},{6,5}];MatrixForm[R]
Out[]//MatrixForm=
0.12198 | 0.251686 | 0.00387693 | 0.313961 | 0.253868 |
0.0630238 | 0.692883 | 0.929455 | 0.414883 | 0.162758 |
0.035237 | 0.640301 | 0.301484 | 0.680089 | 0.241013 |
0.0233121 | 0.020026 | 0.388972 | 0.0902071 | 0.358214 |
0.0238752 | 0.401074 | 0.530013 | 0.0844171 | 0.44979 |
0.879087 | 0.353743 | 0.290261 | 0.191914 | 0.501521 |
In[]:=
Import["https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/IndependentComponentAnalysis.m"]
In[]:=
k=4;
In[]:=
{S,A}=IndependentComponentAnalysis[Transpose[R],k,PrecisionGoal12];
In[]:=
Norm[R-Transpose[S.A]]/Norm[R]
Out[]=
0.665229
In[]:=
Transpose[S.A]//MatrixForm
Out[]//MatrixForm=
-0.0237292 | 0.105977 | -0.141832 | 0.168251 | 0.108159 |
-0.060884 | 0.568975 | 0.805547 | 0.290975 | 0.0388507 |
-0.188396 | 0.416669 | 0.0778518 | 0.456456 | 0.0173802 |
-0.309754 | -0.31304 | 0.0559067 | -0.242859 | 0.0251487 |
0.172443 | 0.549642 | 0.678581 | 0.232985 | 0.598358 |
0.54574 | 0.0203958 | -0.0430865 | -0.141433 | 0.168173 |
In[]:=
k=5;
In[]:=
{S,A}=IndependentComponentAnalysis[Transpose[R],k,PrecisionGoal12];
In[]:=
Norm[R-Transpose[S.A]]/Norm[R]
Out[]=
0.54409
In[]:=
k=6;
In[]:=
{S,A}=IndependentComponentAnalysis[Transpose[R],k,PrecisionGoal12];
In[]:=
Norm[R-Transpose[S.A]]/Norm[R]
Out[]=
4.90395×
-16
10
1.2.2 Image Compression via ICA
1.2.2 Image Compression via ICA
In[]:=
image=
;
In[]:=
imgR=ColorConvert[image,"Grayscale"]
Out[]=
In[]:=
R=ImageData[imgR];
In[]:=
Dimensions[R]
Out[]=
{313,310}
In[]:=
{S,A}=IndependentComponentAnalysis[Transpose[R],20,PrecisionGoal15];
In[]:=
Norm[R-Transpose[S.A]]/Norm[R]
Out[]=
0.253017
In[]:=
Dimensions[S]
Out[]=
{310,20}
In[]:=
Dimensions[A]
Out[]=
{20,313}
In[]:=
imdata=Transpose[S.A];
In[]:=
Image[imdata]
Out[]=
In[]:=
{S,A}=IndependentComponentAnalysis[Transpose[R],50,PrecisionGoal15];
In[]:=
Norm[R-Transpose[S.A]]/Norm[R]
Out[]=
0.164225
In[]:=
Dimensions[S]
Out[]=
{310,50}
In[]:=
Dimensions[A]
Out[]=
{50,313}
In[]:=
imdata=Transpose[S.A];
In[]:=
imgC=Image[imdata]
Out[]=
In[]:=
GaussianFilter[imgC,1.]//ImageAdjust
Out[]=
1.2.3 Image Compression via ICA in Python
1.2.3 Image Compression via ICA in Python
In[]:=
lena=
;
In[]:=
ImageQ[lena]
Out[]=
True
In[]:=
Export["D:\\lena.png",lena];
In[]:=
session=StartExternalSession["Python"]
Out[]=
ExternalSessionObject
Test
In[]:=
5+6
The code developed by Treadway A. (2018),
In[]:=
# load packages
from sklearn.decomposition import FastICA
from pylab import *
from skimage import data, io, color
from sklearn.decomposition import FastICA
from pylab import *
from skimage import data, io, color
Let us employ k = 50,
In[]:=
ica = FastICA(n_components = 50)
In[]:=
emc2_image = io.imread("D:\\lena.png", as_grey = True)
ica.fit(emc2_image)
ica.fit(emc2_image)
In[]:=
emc2_image_ica = ica.fit_transform(emc2_image)
emc2_restored = ica.inverse_transform(emc2_image_ica)
emc2_restored = ica.inverse_transform(emc2_image_ica)
In[]:=
io.imshow(emc2_restored)
show()
show()