fr.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from skimage.measure import compare_ssim, compare_psnr
  2. from ipfml.exceptions import NumpyShapeComparisonException
  3. """
  4. Full-reference Image Quality Assessment (FR-IQA) methods
  5. """
  6. def _prepare_arrays(arr1, arr2):
  7. img_true = np.asarray(img_true, dtype=float_32)
  8. img_test = np.asarray(img_test, dtype=float_32)
  9. if img_true.shape != img_test.shape:
  10. raise NumpyShapeComparisonException
  11. return img_true, img_test
  12. def mse(img_true, img_test):
  13. """Returns Mean-Squared Error between two Numpy arrays
  14. Args:
  15. img_true: Image, numpy array of any dimension
  16. img_test: Image, numpy array of any dimension
  17. Returns:
  18. Computed MSE score
  19. Raises:
  20. NumpyShapeComparisonException: if shape of images are not the same
  21. Example:
  22. >>> from ipfml import utils
  23. >>> import numpy as np
  24. >>> arr1 = np.arange(10)
  25. >>> arr2 = np.arange(5, 10)
  26. >>> mse = utils.mse(arr1, arr2)
  27. >>> mse
  28. 100
  29. """
  30. img_true, img_test = _prepare_arrays(img_true, img_test)
  31. return np.mean(np.square(img_true - img_test), dtype=np.float64)
  32. def rmse(img_true, img_test):
  33. """Returns Mean-Squared Error between two Numpy arrays
  34. Args:
  35. img_true: Image, numpy array of any dimension
  36. img_test: Image, numpy array of any dimension
  37. Returns:
  38. Computed MSE score
  39. Raises:
  40. NumpyShapeComparisonException: if shape of images are not the same
  41. Example:
  42. >>> from ipfml import utils
  43. >>> import numpy as np
  44. >>> arr1 = np.arange(10)
  45. >>> arr2 = np.arange(5, 10)
  46. >>> rmse = utils.rmse(arr1, arr2)
  47. >>> rmse
  48. 100
  49. """
  50. return np.sqrt(mse(img_true, img_test))
  51. def mae(img_true, img_test):
  52. """Returns Mean-Squared Error between two Numpy arrays
  53. Args:
  54. img_true: Image, numpy array of any dimension
  55. img_test: Image, numpy array of any dimension
  56. Returns:
  57. Computed MSE score
  58. Raises:
  59. NumpyShapeComparisonException: if shape of images are not the same
  60. Example:
  61. >>> from ipfml import utils
  62. >>> import numpy as np
  63. >>> arr1 = np.arange(10)
  64. >>> arr2 = np.arange(5, 10)
  65. >>> mse = utils.mse(arr1, arr2)
  66. >>> mse
  67. 100
  68. """
  69. img_true, img_test = _prepare_arrays(img_true, img_test)
  70. return np.mean(np.absolute(img_true - img_test), dtype=np.float64)
  71. def pnsr(img_true, img_test):
  72. """Returns the computed Peak Signal to Noise Ratio (PSNR) between two images
  73. Args:
  74. img_true: Image, numpy array of any dimension
  75. img_test: Image, numpy array of any dimension
  76. Returns:
  77. Computed PSNR score
  78. """
  79. return compare_psnr(img_true, img_test)
  80. def ms_ssim(img_true, img_test):
  81. """
  82. Implemented later..
  83. """
  84. pass
  85. def vif(img_true, img_test):
  86. """
  87. Implemented later..
  88. """
  89. pass