diff --git a/compressionRGB.py b/compressionRGB.py
index c08c658..ba3863d 100644
--- a/compressionRGB.py
+++ b/compressionRGB.py
@@ -1,8 +1,6 @@
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
-import numpy as np
-from PIL import Image
-import PIL
+import numpy as np
#import image
@@ -10,114 +8,65 @@ imCol = plt.imread("mini.jpg", format=None)
imRecons = np.zeros((len(imCol[:,0]), len(imCol[0,:]), 3))
erreur = np.ones((len(imCol[:,0]), len(imCol[0,:]), 3))
-imRed = imCol[:,:,0]
-imGreen = imCol[:,:,1]
-imBlue = imCol[:,:,2]
+iterationsGlobales = 10
+iterations = 10
-iterationsGlobales = 30
-iterations = 20
+imRecons[:,:,:] = imCol[:,:,:]
-#RED
+# Compress all channels one by one
-# compress
-
-
-
-FF= [[]]*len(imRed[:,0])
-GG= [[]]*len(imRed[0,:])
-
-for x in range(iterationsGlobales):
- F=np.ones((len(imRed[:,0]), 1))
- G=np.ones((len(imRed[0,:]), 1))
- for y in range(iterations):
- F = np.dot(imRed, G) / np.dot(np.transpose(G), G)
- G = np.dot(np.transpose(imRed), F) / np.dot(np.transpose(F), F)
- FF = np.append(FF, F, 1)
- GG = np.append(GG, G, 1)
+for channel in range(len(imCol[0,0,:])): # for each color channel of original image
+ FF= [[]]*len(imCol[:,:,channel]) # all channels should have the same dimsneions but eh
+ GG= [[]]*len(imCol[0,:,channel])
+ for x in range(iterationsGlobales):
+ F=np.ones((len(imRecons[:,0,channel]), 1))
+ G=np.ones((len(imRecons[0,:,channel]), 1))
+ for y in range(iterations):
+ F = np.dot(imRecons[:,:,channel], G) / np.dot(np.transpose(G), G)
+ G = np.dot(np.transpose(imRecons[:,:,channel]), F) / np.dot(np.transpose(F), F)
+ FF = np.append(FF, F, 1)
+ GG = np.append(GG, G, 1)
+
+ imRecons[:,:,channel] = imRecons[:,:,channel] - np.dot(F,np.transpose(G))
- imRed = imRed - np.dot(F,np.transpose(G))
-
-erreur[:,:,0] = imRed - np.dot(FF,np.transpose(GG))
-imRecons[:,:,0] = np.dot(FF,np.transpose(GG))
-
-#GREEN
-
-# compress
+ erreur[:,:,channel] = imRecons[:,:,channel] - np.dot(FF,np.transpose(GG))
+ imRecons[:,:,channel] = np.dot(FF,np.transpose(GG))
-FF= [[]]*len(imGreen[:,0])
-GG= [[]]*len(imGreen[0,:])
-for x in range(iterationsGlobales):
- F=np.ones((len(imGreen[:,0]), 1))
- G=np.ones((len(imGreen[0,:]), 1))
- for y in range(iterations):
- F = np.dot(imGreen, G) / np.dot(np.transpose(G), G)
- G = np.dot(np.transpose(imGreen), F) / np.dot(np.transpose(F), F)
- FF = np.append(FF, F, 1)
- GG = np.append(GG, G, 1)
-
-
-
- imGreen = imGreen - np.dot(F,np.transpose(G))
-
-erreur[:,:,1] = imGreen - np.dot(FF,np.transpose(GG))
-imRecons[:,:,1] = np.dot(FF,np.transpose(GG))
-
-#BLUE
-
-# compress
-
-
-FF= [[]]*len(imBlue[:,0])
-GG= [[]]*len(imBlue[0,:])
-
-for x in range(iterationsGlobales):
- F=np.ones((len(imBlue[:,0]), 1))
- G=np.ones((len(imBlue[0,:]), 1))
- for y in range(iterations):
- F = np.dot(imBlue, G) / np.dot(np.transpose(G), G)
- G = np.dot(np.transpose(imBlue), F) / np.dot(np.transpose(F), F)
- FF = np.append(FF, F, 1)
- GG = np.append(GG, G, 1)
-
-
-
- imBlue = imBlue - np.dot(F,np.transpose(G))
-
-
-erreur[:,:,2] = imBlue - np.dot(FF,np.transpose(GG))
-imRecons[:,:,2] = np.dot(FF,np.transpose(GG))
-
-
-imRecons = imRecons/255
+#why does imRecons not fall into the 255 range ?
+# why does plt need it to be between 0 and 1 where imCol is fine being 0 to 255 ? because it's not an int ?
+print(np.max(imRecons))
+imRecons = imRecons/np.max(imRecons)
#erreur = erreur/255
-#imRecons = np.round(imRecons, 4)
+
+#compression rate
+tauxComp = round(100-((len(imCol[:,0])+len(imCol[0,:]))*iterationsGlobales)/((len(imCol[:,0])*len(imCol[0,:])))*100,0)
+print(tauxComp, "% de compression")
# plot
plt.figure(dpi=300)
-plt.subplot(1, 2, 1)
+plt.subplot(1, 3, 1)
plt.axis('off')
plt.title("Original", loc='center', pad=None)
plt.imshow(imCol, interpolation = "nearest")
-#plt.subplot(1, 3, 2)
-#plt.axis('off')
-#plt.title("Erreur", fontdict=None, loc='center', pad=None)
-#plt.imshow(erreur, interpolation = "nearest")
-
-
-plt.subplot(1, 2, 2)
+plt.subplot(1, 3, 2)
plt.axis('off')
-plt.title("Compressed", fontdict=None, loc='center', pad=None)
+plt.title("Error", fontdict=None, loc='center', pad=None)
+plt.imshow(erreur, interpolation = "nearest")
+
+
+
+plt.subplot(1, 3, 3)
+plt.axis('off')
+plt.title("Compressed "+ str(tauxComp) +"%", fontdict=None, loc='center', pad=None)
plt.imshow(imRecons, interpolation = "nearest")
plt.show()
-tauxComp = round(100-((len(imCol[:,0])+len(imCol[0,:]))*iterationsGlobales)/((len(imCol[:,0])*len(imCol[0,:])))*100,0)
-print(tauxComp, "% de compression")
\ No newline at end of file
diff --git a/example.png b/example.png
index 559a513..c42a088 100644
Binary files a/example.png and b/example.png differ
diff --git a/readme.md b/readme.md
index 9e6159c..384504b 100644
--- a/readme.md
+++ b/readme.md
@@ -1,6 +1,8 @@
# Compression d'image
-Exercice de compression d'image pour apprendre le concept de base et constater le gain en taille de fichier
+Simple compression study in both RGB and monochrome images.
+
+Takes an image as input and generates a plot with a comparison of the original, error, and compressed image, as well as the space saved compared to the raw image data
## Example with 30 & 20 as parameters
-
\ No newline at end of file
+