<reponame>wangqiuli0102/Class-Aware-Multi-Window-Adversarial-Lung-Nodule-Synthesis
'''
Created by <NAME>

2020/5/23
'''

import cv2
import numpy as np 
import matplotlib.pyplot as plt
import slic
import rgb_gr
from PIL import Image
from skimage import io, color
from skimage import data, filters


def truncate_hu(image_array, max = 400, min = -900):
    image = image_array.copy()
    image[image > max] = max
    image[image < min] = min
    return image

def hist(img):
    '''
    return histgram values
    1 * 128
    '''
    img = truncate_hu(img)
    hist = cv2.calcHist([img],[0],None,[128],[-900,400])
    # print(hist.shape)
    # plt.subplot(121)
    # plt.imshow(img,'gray')
    # plt.xticks([])
    # plt.yticks([])
    # plt.title("Original")
    # plt.subplot(122)
    # plt.hist(img.ravel(),128,[-900,400])
    # plt.show()    
    return hist

def gray2rgb(rgb,imggray):
   R = rgb[:,:,0]
   G = rgb[:,:,1]
   B = ((imggray) - 0.299 * R - 0.587 * G) / 0.114
 
   grayRgb = np.zeros((rgb.shape))
   grayRgb[:, :, 2] = B
   grayRgb[:, :, 0] = R
   grayRgb[:, :, 1] = G
 
   return grayRgb

def super_pixel(img):
    '''
    return super_pixel images
    img w * h
    '''
    img = truncate_hu(img)
    # io.imsave('ori.png', img)
    img = np.expand_dims(img, 2)
    # # print(img.shape)
    rgb = np.concatenate((img, img, img), 2)
    # io.imsave('ori2.png', rgb)
    obj = slic.SLICProcessor(rgb, 4096, 5)
    res = obj.iterate_10times()
    return res

def standard_deviation(img):
    hist_value = hist(img)
    std = np.std(hist_value)
    # print(std)

    return std

def edge_detection(img):
    '''
    edge detection
    '''
    img = truncate_hu(img)
    # io.imsave('ori.png', img)
    # img = np.expand_dims(img, 2)
    # # # print(img.shape)
    # rgb = np.concatenate((img, img, img), 2)

    # gray= cv2.cvtColor(rgb, cv2.COLOR_BGR2GRAY)


    x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
    y = cv2.Sobel(img, cv2.CV_16S, 0, 1)
    z = cv2.Sobel(img, cv2.CV_16S, 1, 1)

    return x
    # io.imsave('canny1.png', x)
    # io.imsave('canny2.png', y)
    # io.imsave('canny3.png', z)


def gabor(img):
    filt_real, filt_imag = filters.gabor(img,frequency=0.6)   
    # io.imsave('filt_imag.png', filt_imag)
    return filt_imag


def threshold_void(img):
    void = truncate_hu(img, -600, -900)
    # io.imsave('void.png', void)
    return void

def normalization(image_array):
    image_array = image_array + 900

    max = 1300
    min = 0
    image_array = (image_array-min)/(max-min)  # float cannot apply the compute,or array error will occur
    # avg = image_array.mean()
    # image_array = image_array-avg
    image_array = image_array * 255
    return image_array   # a bug here, a array must be returned,directly appling function did't work

def toGrey(img):
    '''
    get grey-level images
    0-256
    '''
    img = truncate_hu(img)

    img_nor = normalization(img)
    # io.imsave('img_nor.png', img_nor)
    return img_nor

def OTSU(img):
    gray = toGrey(img)
    print(gray)

    gray.dtype="int16"
    print('int16')
    print(gray)

    retval, dst = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
    io.imsave('OTSU.png', dst)

'''
Created by <NAME>

2020/5/23
'''

import cv2
import numpy as np 
import matplotlib.pyplot as plt
import slic
import rgb_gr
from PIL import Image
from skimage import io, color
from skimage import data, filters


def truncate_hu(image_array, max = 400, min = -900):
    image = image_array.copy()
    image[image > max] = max
    image[image < min] = min
    return image

def hist(img):
    '''
    return histgram values
    1 * 128
    '''
    img = truncate_hu(img)
    hist = cv2.calcHist([img],[0],None,[128],[-900,400])
    # print(hist.shape)
    # plt.subplot(121)
    # plt.imshow(img,'gray')
    # plt.xticks([])
    # plt.yticks([])
    # plt.title("Original")
    # plt.subplot(122)
    # plt.hist(img.ravel(),128,[-900,400])
    # plt.show()    
    return hist

def gray2rgb(rgb,imggray):
   R = rgb[:,:,0]
   G = rgb[:,:,1]
   B = ((imggray) - 0.299 * R - 0.587 * G) / 0.114
 
   grayRgb = np.zeros((rgb.shape))
   grayRgb[:, :, 2] = B
   grayRgb[:, :, 0] = R
   grayRgb[:, :, 1] = G
 
   return grayRgb

def super_pixel(img):
    '''
    return super_pixel images
    img w * h
    '''
    img = truncate_hu(img)
    # io.imsave('ori.png', img)
    img = np.expand_dims(img, 2)
    # # print(img.shape)
    rgb = np.concatenate((img, img, img), 2)
    # io.imsave('ori2.png', rgb)
    obj = slic.SLICProcessor(rgb, 4096, 5)
    res = obj.iterate_10times()
    return res

def standard_deviation(img):
    hist_value = hist(img)
    std = np.std(hist_value)
    # print(std)

    return std

def edge_detection(img):
    '''
    edge detection
    '''
    img = truncate_hu(img)
    # io.imsave('ori.png', img)
    # img = np.expand_dims(img, 2)
    # # # print(img.shape)
    # rgb = np.concatenate((img, img, img), 2)

    # gray= cv2.cvtColor(rgb, cv2.COLOR_BGR2GRAY)


    x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
    y = cv2.Sobel(img, cv2.CV_16S, 0, 1)
    z = cv2.Sobel(img, cv2.CV_16S, 1, 1)

    return x
    # io.imsave('canny1.png', x)
    # io.imsave('canny2.png', y)
    # io.imsave('canny3.png', z)


def gabor(img):
    filt_real, filt_imag = filters.gabor(img,frequency=0.6)   
    # io.imsave('filt_imag.png', filt_imag)
    return filt_imag


def threshold_void(img):
    void = truncate_hu(img, -600, -900)
    # io.imsave('void.png', void)
    return void

def normalization(image_array):
    image_array = image_array + 900

    max = 1300
    min = 0
    image_array = (image_array-min)/(max-min)  # float cannot apply the compute,or array error will occur
    # avg = image_array.mean()
    # image_array = image_array-avg
    image_array = image_array * 255
    return image_array   # a bug here, a array must be returned,directly appling function did't work

def toGrey(img):
    '''
    get grey-level images
    0-256
    '''
    img = truncate_hu(img)

    img_nor = normalization(img)
    # io.imsave('img_nor.png', img_nor)
    return img_nor

def OTSU(img):
    gray = toGrey(img)
    print(gray)

    gray.dtype="int16"
    print('int16')
    print(gray)

    retval, dst = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
    io.imsave('OTSU.png', dst)
Created by <NAME>  2020/5/23 return histgram values     1 * 128 # print(hist.shape) # plt.subplot(121) # plt.imshow(img,'gray') # plt.xticks([]) # plt.yticks([]) # plt.title("Original") # plt.subplot(122) # plt.hist(img.ravel(),128,[-900,400]) # plt.show() return super_pixel images     img w * h # io.imsave('ori.png', img) # # print(img.shape) # io.imsave('ori2.png', rgb) # print(std) edge detection # io.imsave('ori.png', img) # img = np.expand_dims(img, 2) # # # print(img.shape) # rgb = np.concatenate((img, img, img), 2) # gray= cv2.cvtColor(rgb, cv2.COLOR_BGR2GRAY) # io.imsave('canny1.png', x) # io.imsave('canny2.png', y) # io.imsave('canny3.png', z) # io.imsave('filt_imag.png', filt_imag) # io.imsave('void.png', void) # float cannot apply the compute,or array error will occur # avg = image_array.mean() # image_array = image_array-avg # a bug here, a array must be returned,directly appling function did't work get grey-level images     0-256 # io.imsave('img_nor.png', img_nor)