Parcourir la source

Add of rotations svd extractions curves script

Jérôme BUISINE il y a 5 ans
Parent
commit
d2c0362ec9
2 fichiers modifiés avec 123 ajouts et 0 suppressions
  1. 62 0
      SVDAnalysis/svd_mean_rotations_view.py
  2. 61 0
      SVDAnalysis/svd_roration_view.py

+ 62 - 0
SVDAnalysis/svd_mean_rotations_view.py

@@ -0,0 +1,62 @@
+from ipfml import processing, utils
+from skimage import transform
+import numpy as np
+import matplotlib.pyplot as plt
+import os
+
+from PIL import Image
+
+data_folder = "../fichiersSVD_light"
+
+def get_svd_mean_image_rotations(img_path):
+
+    print("Extract features from... " + img_path)
+    img = np.asarray(Image.open(img_path))
+    width, height, dim = img.shape
+
+    img_mean = np.empty([width, height, 3])
+    rotations = []
+    svd_data_rotation = []
+
+    for i in range(4):
+        rotations.append(processing.rotate_image(img, (i+1)*90, pil=False))
+        svd_data_rotation.append(processing.get_LAB_L_SVD_s(rotations[i]))
+
+    nb_rotations = len(rotations)
+
+    img_mean = processing.fusion_images(rotations, pil=False)
+
+    data = processing.get_LAB_L_SVD_s(img_mean)
+
+    # getting max and min information from min_max_filename
+    with open(data_folder + "/lab_min_max_values", 'r') as f:
+        min_val = float(f.readline())
+        max_val = float(f.readline())
+
+    data = utils.normalize_arr_with_range(data, min_val, max_val)
+
+    return data
+
+scene   = 'Appart1opt02'
+mean_svd_values = []
+indices = ["00020", "00080", "00150", "00300", "00500", "00700", "00900"]
+
+for index in indices:
+    path = os.path.join(data_folder, scene + '/appartAopt_' + index + '.png')
+    mean_svd_values.append(get_svd_mean_image_rotations(path))
+
+plt.title("Information from merged rotations images at different noise level from " + scene + " scene", fontsize=22)
+
+plt.ylabel('Singular values', fontsize=18)
+plt.xlabel('Vector features', fontsize=18)
+
+for id, data in enumerate(mean_svd_values):
+
+    p_label = "appartAopt_" + indices[id]
+    plt.plot(data, label=p_label)
+
+plt.legend(bbox_to_anchor=(0.8, 1), loc=2, borderaxespad=0.2, fontsize=16)
+
+plt.ylim(0, 0.01)
+plt.show()
+

+ 61 - 0
SVDAnalysis/svd_roration_view.py

@@ -0,0 +1,61 @@
+from ipfml import processing, utils
+from skimage import transform
+import numpy as np
+import matplotlib.pyplot as plt
+import os
+
+from PIL import Image
+
+data_folder = "../fichiersSVD_light"
+
+def get_svd_mean_and_image_rotations(img_path):
+
+    print("Extract features from... " + img_path)
+    img = np.asarray(Image.open(img_path))
+    width, height, dim = img.shape
+
+    img_mean = np.empty([width, height, 3])
+    rotations = []
+    svd_data_rotation = []
+
+    for i in range(4):
+        rotations.append(processing.rotate_image(img, (i+1)*90, pil=False))
+        svd_data_rotation.append(processing.get_LAB_L_SVD_s(rotations[i]))
+
+    mean_image = processing.fusion_images(rotations, pil=False)
+    mean_data = processing.get_LAB_L_SVD_s(mean_image)
+
+    # getting max and min information from min_max_filename
+    with open(data_folder + "/lab_min_max_values", 'r') as f:
+        min_val = float(f.readline())
+        max_val = float(f.readline())
+
+    mean_data = utils.normalize_arr_with_range(mean_data, min_val, max_val)
+
+    return [utils.normalize_arr_with_range(data, min_val, max_val) for data in svd_data_rotation], mean_data
+
+scene   = 'Appart1opt02'
+indices = ["00020", "00080", "00150", "00300", "00500", "00700", "00900"]
+
+for index in indices:
+    path = os.path.join(data_folder, scene + '/appartAopt_' + index + '.png')
+    svd_data, mean_svd_data = get_svd_mean_and_image_rotations(path)
+
+    plt.title("SVD information of rotations and merged image from " + scene + " scene", fontsize=22)
+
+    plt.ylabel('Singular values', fontsize=18)
+    plt.xlabel('Vector features', fontsize=18)
+
+    for id, data in enumerate(svd_data):
+
+        p_label = "appartAopt_" + index + "_" + str((id +1) * 90)
+        plt.plot(data, label=p_label)
+
+    mean_label = "appartAopt_" + index + "_mean"
+    plt.plot(mean_svd_data, label=mean_label)
+
+    plt.legend(bbox_to_anchor=(0.8, 1), loc=2, borderaxespad=0.2, fontsize=16)
+
+    plt.ylim(0, 0.01)
+    plt.show()
+