Browse Source

Add new features with convolution

Jérôme BUISINE 1 year ago
parent
commit
3f98fa4b89
2 changed files with 164 additions and 1 deletions
  1. 1 1
      custom_config.py
  2. 163 0
      data_attributes.py

File diff suppressed because it is too large
+ 1 - 1
custom_config.py


+ 163 - 0
data_attributes.py

@@ -14,8 +14,10 @@ import pywt
 import cv2
 
 from ipfml.processing import transform, compression, segmentation
+from ipfml.filters import convolution, kernels
 from ipfml import utils
 
+
 # modules and config imports
 sys.path.insert(0, '') # trick to enable import of main folder module
 
@@ -496,6 +498,167 @@ def get_image_features(data_type, block):
         s_arr = compression.get_SVD_s(arr)
         data = s_arr[indices]
 
+    if 'convolutional_kernels' in data_type:
+
+        sub_zones = segmentation.divide_in_blocks(block, (20, 20))
+
+        data = []
+
+        diff_std_list_3 = []
+        diff_std_list_5 = []
+        diff_mean_list_3 = []
+        diff_mean_list_5 = []
+
+        plane_std_list_3 = []
+        plane_std_list_5 = []
+        plane_mean_list_3 = []
+        plane_mean_list_5 = []
+
+        plane_max_std_list_3 = []
+        plane_max_std_list_5 = []
+        plane_max_mean_list_3 = []
+        plane_max_mean_list_5 = []
+
+        for sub_zone in sub_zones:
+            l_img = transform.get_LAB_L(sub_zone)
+            normed_l_img = utils.normalize_2D_arr(l_img)
+
+            # bilateral with window of size (3, 3)
+            normed_diff = convolution.convolution2D(normed_l_img, kernels.bilateral_diff, (3, 3))
+            std_diff = np.std(normed_diff)
+            mean_diff = np.mean(normed_diff)
+
+            diff_std_list_3.append(std_diff)
+            diff_mean_list_3.append(mean_diff)
+
+            # bilateral with window of size (5, 5)
+            normed_diff = convolution.convolution2D(normed_l_img, kernels.bilateral_diff, (5, 5))
+            std_diff = np.std(normed_diff)
+            mean_diff = np.mean(normed_diff)
+
+            diff_std_list_5.append(std_diff)
+            diff_mean_list_5.append(mean_diff)
+
+            # plane mean with window of size (3, 3)
+            normed_plane_mean = convolution.convolution2D(normed_l_img, kernels.plane_mean, (3, 3))
+            std_plane_mean = np.std(normed_plane_mean)
+            mean_plane_mean = np.mean(normed_plane_mean)
+
+            plane_std_list_3.append(std_plane_mean)
+            plane_mean_list_3.append(mean_plane_mean)
+
+            # plane mean with window of size (5, 5)
+            normed_plane_mean = convolution.convolution2D(normed_l_img, kernels.plane_mean, (5, 5))
+            std_plane_mean = np.std(normed_plane_mean)
+            mean_plane_mean = np.mean(normed_plane_mean)
+
+            plane_std_list_5.append(std_plane_mean)
+            plane_mean_list_5.append(mean_plane_mean)
+
+            # plane max error with window of size (3, 3)
+            normed_plane_max = convolution.convolution2D(normed_l_img, kernels.plane_max_error, (3, 3))
+            std_plane_max = np.std(normed_plane_max)
+            mean_plane_max = np.mean(normed_plane_max)
+
+            plane_max_std_list_3.append(std_plane_max)
+            plane_max_mean_list_3.append(mean_plane_max)
+
+            # plane max error with window of size (5, 5)
+            normed_plane_max = convolution.convolution2D(normed_l_img, kernels.plane_max_error, (5, 5))
+            std_plane_max = np.std(normed_plane_max)
+            mean_plane_max = np.mean(normed_plane_max)
+
+            plane_max_std_list_5.append(std_plane_max)
+            plane_max_mean_list_5.append(mean_plane_max)
+
+        diff_std_list_3 = np.array(diff_std_list_3)
+        diff_std_list_5 = np.array(diff_std_list_5)
+
+        diff_mean_list_3 = np.array(diff_mean_list_3)
+        diff_mean_list_5 = np.array(diff_mean_list_5)
+
+        plane_std_list_3 = np.array(plane_std_list_3)
+        plane_std_list_5 = np.array(plane_std_list_5)
+
+        plane_mean_list_3 = np.array(plane_mean_list_3)
+        plane_mean_list_5 = np.array(plane_mean_list_5)
+
+        plane_max_std_list_3 = np.array(plane_max_std_list_3)
+        plane_max_std_list_5 = np.array(plane_max_std_list_5)
+
+        plane_max_mean_list_3 = np.array(plane_max_mean_list_3)
+        plane_max_mean_list_5 = np.array(plane_max_mean_list_5)
+
+        if 'std_max_blocks' in data_type:
+
+            data.append(np.std(diff_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(diff_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(diff_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.std(diff_mean_list_5[0:int(len(sub_zones)/5)]))
+
+            data.append(np.std(plane_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_mean_list_5[0:int(len(sub_zones)/5)]))
+
+            data.append(np.std(plane_max_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_max_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_max_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.std(plane_max_mean_list_5[0:int(len(sub_zones)/5)]))
+
+        if 'mean_max_blocks' in data_type:
+
+            data.append(np.mean(diff_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(diff_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(diff_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(diff_mean_list_5[0:int(len(sub_zones)/5)]))
+
+            data.append(np.mean(plane_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_mean_list_5[0:int(len(sub_zones)/5)]))
+            
+            data.append(np.mean(plane_max_std_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_max_mean_list_3[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_max_std_list_5[0:int(len(sub_zones)/5)]))
+            data.append(np.mean(plane_max_mean_list_5[0:int(len(sub_zones)/5)]))
+
+        if 'std_normed' in data_type:
+
+            data.append(np.std(diff_std_list_3))
+            data.append(np.std(diff_mean_list_3))
+            data.append(np.std(diff_std_list_5))
+            data.append(np.std(diff_mean_list_5))
+
+            data.append(np.std(plane_std_list_3))
+            data.append(np.std(plane_mean_list_3))
+            data.append(np.std(plane_std_list_5))
+            data.append(np.std(plane_mean_list_5))
+            
+            data.append(np.std(plane_max_std_list_3))
+            data.append(np.std(plane_max_mean_list_3))
+            data.append(np.std(plane_max_std_list_5))
+            data.append(np.std(plane_max_mean_list_5))
+
+        if 'mean_normed' in data_type:
+
+            data.append(np.mean(diff_std_list_3))
+            data.append(np.mean(diff_mean_list_3))
+            data.append(np.mean(diff_std_list_5))
+            data.append(np.mean(diff_mean_list_5))
+
+            data.append(np.mean(plane_std_list_3))
+            data.append(np.mean(plane_mean_list_3))
+            data.append(np.mean(plane_std_list_5))
+            data.append(np.mean(plane_mean_list_5))
+            
+            data.append(np.mean(plane_max_std_list_3))
+            data.append(np.mean(plane_max_mean_list_3))
+            data.append(np.mean(plane_max_std_list_5))
+            data.append(np.mean(plane_max_mean_list_5))
+
+        data = np.array(data)
+        
     return data