123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- # module file which contains all image metrics used in project
- from numpy.linalg import svd
- from scipy import misc
- import numpy as np
- from sklearn import preprocessing
- from skimage import io, color
- def get_image_path(image):
- """
- @brief Returns file path of PIL Image
- @param PIL Image
- @return image path
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> path = metrics.get_image_path(img)
- >>> 'images/test_img.png' in path
- True
- """
-
- if hasattr(image, 'filename'):
- file_path = image.filename
- else:
- raise Exception("Image provided is not correct, required filename property...")
- return file_path
- def get_SVD(image):
- """
- @brief Transforms Image into SVD
- @param image to convert
- @return U, s, V image decomposition
-
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> U, s, V = metrics.get_SVD(img)
- >>> U.shape
- (200, 200, 3)
- >>> len(s)
- 200
- >>> V.shape
- (200, 3, 3)
- """
- return svd(image, full_matrices=False)
- def get_SVD_s(image):
- """
- @brief Transforms Image into SVD and returns only 's' part
- @param image to convert
- @return s
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> s = metrics.get_SVD_s(img)
- >>> len(s)
- 200
- """
- U, s, V = svd(image, full_matrices=False)
- return s
- def get_SVD_U(image):
- """
- @brief Transforms Image into SVD and returns only 'U' part
- @param image to convert
- @return U
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> Lab = metrics.get_LAB(img)
- >>> Lab.shape
- (200, 200, 3)
- """
- U, s, V = svd(image, full_matrices=False)
- return U
- def get_SVD_V(image):
- """
- @brief Transforms Image into SVD and returns only 'V' part
- @param image to convert
- @return V
-
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> V = metrics.get_SVD_V(img)
- >>> V.shape
- (200, 3, 3)
- """
- U, s, V = svd(image, full_matrices=False)
- return V
- def get_LAB(image):
- """
- @brief Transforms PIL RGB Image into LAB
- @param image to convert
- @return Lab information
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> Lab = metrics.get_LAB(img)
- >>> Lab.shape
- (200, 200, 3)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- return color.rgb2lab(rgb)
- def get_LAB_L(image):
- """
- @brief Transforms PIL RGB Image into LAB and returns L
- @param image to convert
- @return Lab information
-
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> L = metrics.get_LAB_L(img)
- >>> L.shape
- (200, 200)
- """
-
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- lab = color.rgb2lab(rgb)
- return lab[:, :, 0]
- def get_LAB_A(image):
- """
- @brief Transforms PIL RGB Image into LAB and returns A
- @param image to convert
- @return Lab information
-
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> A = metrics.get_LAB_A(img)
- >>> A.shape
- (200, 200)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- lab = color.rgb2lab(rgb)
- return lab[:, :, 1]
- def get_LAB_B(image):
- """
- @brief Transforms PIL RGB Image into LAB and returns B
- @param image to convert
- @return Lab information
-
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> B = metrics.get_LAB_B(img)
- >>> B.shape
- (200, 200)
- """
-
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- lab = color.rgb2lab(rgb)
- return lab[:, :, 2]
- def get_XYZ(image):
- """
- @brief Transforms PIL RGB Image into XYZ
- @param image to convert
- @return Lab information
-
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> metrics.get_XYZ(img).shape
- (200, 200, 3)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- return color.rgb2xyz(rgb)
- def get_XYZ_X(image):
- """
- @brief Transforms PIL RGB Image into XYZ and returns X
- @param image to convert
- @return Lab information
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> x = metrics.get_XYZ_X(img)
- >>> x.shape
- (200, 200)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- xyz = color.rgb2xyz(rgb)
- return xyz[:, :, 0]
- def get_XYZ_Y(image):
- """
- @brief Transforms PIL RGB Image into XYZ and returns Y
- @param image to convert
- @return Lab information
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> y = metrics.get_XYZ_Y(img)
- >>> y.shape
- (200, 200)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- xyz = color.rgb2xyz(rgb)
- return xyz[:, :, 1]
- def get_XYZ_Z(image):
- """
- @brief Transforms PIL RGB Image into XYZ and returns Z
- @param image to convert
- @return Lab information
- Usage :
- >>> from PIL import Image
- >>> from ipfml import metrics
- >>> img = Image.open('./images/test_img.png')
- >>> z = metrics.get_XYZ_Z(img)
- >>> z.shape
- (200, 200)
- """
- file_path = get_image_path(image)
- rgb = io.imread(file_path)
- xyz = color.rgb2xyz(rgb)
- return xyz[:, :, 2]
- def get_low_bits_img(image, bind=15):
- """
- @brief Returns Image or Numpy array with data information reduced using only low bits
- @param image to convert
- @bind optional : bits to keep using & Bitwise operator
- @return Numpy array with reduced values
- """
-
- img_arr = np.array(image)
- return img_arr & bind
|