from ipfml import image_processing from PIL import Image import numpy as np from ipfml import metrics from skimage import color import cv2 low_bits_svd_values_norm = [] low_bits_svd_values_norm_together = [] low_bits_svd_values = [] mscn_svd_values_norm = [] mscn_svd_values_norm_together = [] mscn_svd_values = [] lab_svd_values_norm = [] lab_svd_values_norm_together = [] lab_svd_values = [] def open_and_display(path): img = Image.open(path) blocks = image_processing.divide_in_blocks(img, (200, 200), False) block_used = blocks[11] img_mscn = image_processing.rgb_to_mscn(block_used) #img_mscn_norm = image_processing.normalize_2D_arr(img_mscn) #print(img_mscn) img_output = img_mscn.astype('uint8') print('-------------------------') # MSCN part computation mscn_s = metrics.get_SVD_s(img_output) mscn_svd_values.append(mscn_s) mscn_svd_values_norm.append(image_processing.normalize_arr(mscn_s)) mscn_min_val = 10000000 mscn_max_val = 0 # check for each block of image for block in blocks: current_img_mscn = image_processing.rgb_to_mscn(block) current_img_output = img_mscn.astype('uint8') # MSCN part computation current_mscn_s = metrics.get_SVD_s(img_output) current_min = current_mscn_s.min() current_max = current_mscn_s.max() if current_min < mscn_min_val: mscn_min_val = current_min if current_max > mscn_max_val: mscn_max_val = current_max mscn_svd_values_norm_together.append(image_processing.normalize_arr_with_range(mscn_s, mscn_min_val, mscn_max_val)) # LAB part computation path_block_img = '/tmp/lab_img.png' img_used_pil = Image.fromarray(block_used.astype('uint8'), 'RGB') img_used_pil.save(path_block_img) #img_used_pil.show() lab_s = image_processing.get_LAB_L_SVD_s(Image.open(path_block_img)) lab_svd_values.append(lab_s) lab_svd_values_norm.append(image_processing.normalize_arr(lab_s)) lab_min_val = 10000000 lab_max_val = 0 # check for each block of image for block in blocks: current_img_used_pil = Image.fromarray(block.astype('uint8'), 'RGB') current_img_used_pil.save(path_block_img) current_lab_s = image_processing.get_LAB_L_SVD_s(Image.open(path_block_img)) current_min = current_lab_s.min() current_max = current_lab_s.max() if current_min < lab_min_val: lab_min_val = current_min if current_max > lab_max_val: lab_max_val = current_max lab_svd_values_norm_together.append(image_processing.normalize_arr_with_range(lab_s, lab_min_val, lab_max_val)) # computation of low bits parts low_bits_block = image_processing.rgb_to_grey_low_bits(block_used) low_bits_svd = metrics.get_SVD_s(low_bits_block) low_bits_svd_values.append(low_bits_svd) low_bits_svd_values_norm.append(image_processing.normalize_arr(low_bits_svd)) low_bits_min_val = 10000000 low_bits_max_val = 0 # check for each block of image for block in blocks: current_grey_block = np.array(color.rgb2gray(block)*255, 'uint8') current_low_bit_block = current_grey_block & 15 current_low_bits_svd = metrics.get_SVD_s(current_low_bit_block) current_min = current_low_bits_svd.min() current_max = current_low_bits_svd.max() if current_min < low_bits_min_val: low_bits_min_val = current_min if current_max > low_bits_max_val: low_bits_max_val = current_max low_bits_svd_values_norm_together.append(image_processing.normalize_arr_with_range(low_bits_svd, low_bits_min_val, low_bits_max_val)) # Other MSCN img_grey = np.array(color.rgb2gray(np.asarray(block_used))*255, 'uint8') img_mscn_in_grey = np.array(image_processing.normalize_2D_arr(image_processing.calculate_mscn_coefficients(img_grey, 7))*255, 'uint8') svd_s_values = metrics.get_SVD_s(img_mscn_in_grey) #print(svd_s_values[0:10]) img_mscn_pil = Image.fromarray(img_mscn_in_grey.astype('uint8'), 'L') #img_mscn_pil.show() #path_noisy = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Appart1opt02/appartAopt_00020.png' #path_threshold = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Appart1opt02/appartAopt_00300.png' #path_ref = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Appart1opt02/appartAopt_00900.png' path_noisy = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Cuisine01/cuisine01_00050.png' path_threshold = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Cuisine01/cuisine01_00400.png' path_ref = '/home/jbuisine/Documents/Thesis/Development/NoiseDetection_In_SynthesisImages/fichiersSVD_light/Cuisine01/cuisine01_01200.png' path_list = [path_noisy, path_threshold, path_ref] for p in path_list: open_and_display(p) import matplotlib.pyplot as plt # SVD fig, (ax1, ax2, ax3) = plt.subplots(3, 1) # make a little extra space between the subplots fig.subplots_adjust(hspace=0.5) ax1.plot(lab_svd_values[0], label='Noisy') ax1.plot(lab_svd_values[1], label='Threshold') ax1.plot(lab_svd_values[2], label='Reference') ax1.set_ylabel('LAB SVD comparisons') ax1.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax2.plot(mscn_svd_values[0], label='Noisy') ax2.plot(mscn_svd_values[1], label='Threshold') ax2.plot(mscn_svd_values[2], label='Reference') ax2.set_ylabel('MSCN SVD comparisons') ax2.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax3.plot(low_bits_svd_values[0], label='Noisy') ax3.plot(low_bits_svd_values[1], label='Threshold') ax3.plot(low_bits_svd_values[2], label='Reference') ax3.set_ylabel('Low bits SVD comparisons') ax3.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) plt.show() # SVDN fig, (ax1, ax2, ax3) = plt.subplots(3, 1) # make a little extra space between the subplots fig.subplots_adjust(hspace=0.5) ax1.plot(lab_svd_values_norm[0], label='Noisy') ax1.plot(lab_svd_values_norm[1], label='Threshold') ax1.plot(lab_svd_values_norm[2], label='Reference') ax1.set_ylabel('LAB SVDN comparisons') ax1.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax2.plot(mscn_svd_values_norm[0], label='Noisy') ax2.plot(mscn_svd_values_norm[1], label='Threshold') ax2.plot(mscn_svd_values_norm[2], label='Reference') ax2.set_ylabel('MSCN SVDN comparisons') ax2.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax3.plot(low_bits_svd_values_norm[0], label='Noisy') ax3.plot(low_bits_svd_values_norm[1], label='Threshold') ax3.plot(low_bits_svd_values_norm[2], label='Reference') ax3.set_ylabel('Low bits SVD comparisons') ax3.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) plt.show() # SVDNE fig, (ax1, ax2, ax3) = plt.subplots(3, 1) # make a little extra space between the subplots fig.subplots_adjust(hspace=0.5) ax1.plot(lab_svd_values_norm_together[0], label='Noisy') ax1.plot(lab_svd_values_norm_together[1], label='Threshold') ax1.plot(lab_svd_values_norm_together[2], label='Reference') ax1.set_ylabel('LAB SVDNE comparisons') ax1.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax2.plot(mscn_svd_values_norm_together[0], label='Noisy') ax2.plot(mscn_svd_values_norm_together[1], label='Threshold') ax2.plot(mscn_svd_values_norm_together[2], label='Reference') ax2.set_ylabel('MSCN SVDNE comparisons') ax2.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) ax3.plot(low_bits_svd_values_norm_together[0], label='Noisy') ax3.plot(low_bits_svd_values_norm_together[1], label='Threshold') ax3.plot(low_bits_svd_values_norm_together[2], label='Reference') ax3.set_ylabel('Low bits SVD comparisons') ax3.legend(bbox_to_anchor=(0.7, 1), loc=2, borderaxespad=0.2) plt.show() #print(mscn_svd_values[0][0:3]) #print(mscn_svd_values[1][0:3]) #print(mscn_svd_values[2][0:3])