data.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. from ipfml import processing, metrics, utils
  2. from modules.utils.config import *
  3. from modules.utils.filters import w2d
  4. import cv2
  5. from PIL import Image
  6. from skimage import color
  7. from sklearn.decomposition import FastICA
  8. from sklearn.decomposition import IncrementalPCA
  9. from sklearn.decomposition import TruncatedSVD
  10. from numpy.linalg import svd as lin_svd
  11. from scipy.signal import medfilt2d, wiener, cwt
  12. import numpy as np
  13. _scenes_names_prefix = '_scenes_names'
  14. _scenes_indices_prefix = '_scenes_indices'
  15. # store all variables from current module context
  16. context_vars = vars()
  17. def get_svd_data(data_type, block):
  18. """
  19. Method which returns the data type expected
  20. """
  21. if 'filters_statistics' in data_type:
  22. img_width, img_height = 200, 200
  23. lab_img = metrics.get_LAB_L(block)
  24. arr = np.array(lab_img)
  25. # compute all filters statistics
  26. def get_stats(arr, I_filter):
  27. e1 = np.abs(arr - I_filter)
  28. L = np.array(e1)
  29. mu0 = np.mean(L)
  30. A = L - mu0
  31. H = A * A
  32. E = np.sum(H) / (img_width * img_height)
  33. P = np.sqrt(E)
  34. return mu0, P
  35. stats = []
  36. kernel = np.ones((3,3),np.float32)/9
  37. stats.append(get_stats(arr, cv2.filter2D(arr,-1,kernel)))
  38. kernel = np.ones((5,5),np.float32)/25
  39. stats.append(get_stats(arr, cv2.filter2D(arr,-1,kernel)))
  40. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (3, 3), 0.5)))
  41. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (3, 3), 1)))
  42. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (3, 3), 1.5)))
  43. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (5, 5), 0.5)))
  44. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (5, 5), 1)))
  45. stats.append(get_stats(arr, cv2.GaussianBlur(arr, (5, 5), 1.5)))
  46. stats.append(get_stats(arr, medfilt2d(arr, [3, 3])))
  47. stats.append(get_stats(arr, medfilt2d(arr, [5, 5])))
  48. stats.append(get_stats(arr, wiener(arr, [3, 3])))
  49. stats.append(get_stats(arr, wiener(arr, [5, 5])))
  50. wave = w2d(arr, 'db1', 2)
  51. stats.append(get_stats(arr, np.array(wave, 'float64')))
  52. data = []
  53. for stat in stats:
  54. data.append(stat[0])
  55. for stat in stats:
  56. data.append(stat[1])
  57. data = np.array(data)
  58. return data
  59. def get_highest_values(arr, n):
  60. return np.array(arr).argsort()[-n:][::-1]
  61. def get_lowest_values(arr, n):
  62. return np.array(arr).argsort()[::-1][-n:][::-1]
  63. def _get_mscn_variance(block, sub_block_size=(50, 50)):
  64. blocks = processing.divide_in_blocks(block, sub_block_size)
  65. data = []
  66. for block in blocks:
  67. mscn_coefficients = processing.get_mscn_coefficients(block)
  68. flat_coeff = mscn_coefficients.flatten()
  69. data.append(np.var(flat_coeff))
  70. return np.sort(data)
  71. def get_renderer_scenes_indices(renderer_name):
  72. if renderer_name not in renderer_choices:
  73. raise ValueError("Unknown renderer name")
  74. if renderer_name == 'all':
  75. return scenes_indices
  76. else:
  77. return context_vars[renderer_name + _scenes_indices_prefix]
  78. def get_renderer_scenes_names(renderer_name):
  79. if renderer_name not in renderer_choices:
  80. raise ValueError("Unknown renderer name")
  81. if renderer_name == 'all':
  82. return scenes_names
  83. else:
  84. return context_vars[renderer_name + _scenes_names_prefix]