Spaces:
Sleeping
Sleeping
import numpy as np | |
from skimage import io | |
from skimage.transform import resize | |
import matplotlib.pyplot as plt | |
import glob | |
import h5py | |
class MoleImages(): | |
def __init__(self, dir=None): | |
self.dir = dir | |
self.size = None | |
def resize_bulk(self, size=(128,128)): | |
''' | |
Resize Images and create matrix | |
Input: size of the images (128,128) | |
Output: Numpy array of (size,num_images) | |
''' | |
self.size = size | |
X = [] | |
image_list = glob.glob(self.dir) | |
n_images = len(image_list) | |
print('Resizing {} images:'.format(n_images)) | |
for i, imgfile in enumerate(image_list): | |
print('Resizing image {} of {}'.format(i+1, n_images)) | |
img = io.imread(imgfile) | |
img = resize(img, self.size) | |
X.append(img) | |
return np.array(X) | |
def load_test_images(self, dir_b, dir_m): | |
X = [] | |
image_list_b = glob.glob(dir_b + '/*.png') | |
n_images_b = len(image_list_b) | |
print('Loading {} images of class benign:'.format(n_images_b)) | |
for i, imgfile in enumerate(image_list_b): | |
print('Loading image {} of {}'.format(i+1, n_images_b)) | |
img = io.imread(imgfile) | |
X.append(img) | |
image_list_m = glob.glob(dir_m + '/*.png') | |
n_images_m = len(image_list_m) | |
print('Loading {} images of class benign:'.format(n_images_m)) | |
for i, imgfile in enumerate(image_list_m): | |
print('Loading image {} of {}'.format(i+1, n_images_m)) | |
img = io.imread(imgfile) | |
X.append(img) | |
y = np.hstack((np.zeros(n_images_b), np.ones(n_images_m))) | |
return np.array(X), y.reshape(len(y),1) | |
def load_image_from_filename(self, filename, size=(128,128)): | |
self.size = size | |
img = io.imread(filename) | |
img = resize(img, self.size, mode='constant') * 255 | |
if img.shape[2] == 4: | |
img = img[:,:,0:3] | |
return img.reshape(1, self.size[0], self.size[1], 3) | |
def load_image(self, img, size=(128,128)): | |
self.size = size | |
img = resize(img, self.size, mode='constant', anti_aliasing=True, | |
anti_aliasing_sigma=None) * 255 | |
if img.shape[2] == 4: | |
img = img[:, :, 0:3] | |
return img.reshape(1, self.size[0], self.size[1], 3) | |
def save_h5(self, X, filename, dataset): | |
''' | |
Save a numpy array to a data.h5 file specified. | |
Input: | |
X: Numpy array to save | |
filename: name of h5 file | |
dataset: label for the dataset | |
''' | |
with h5py.File(filename, 'w') as hf: | |
hf.create_dataset(dataset, data=X) | |
print('File {} saved'.format(filename)) | |
def load_h5(self, filename, dataset): | |
''' | |
Load a data.h5 file specified. | |
Input: filename, dataset | |
Output: Data | |
''' | |
with h5py.File(filename, 'r') as hf: | |
return hf[dataset][:] | |
def save_png(self, matrix, dir, tag='img', format='png'): | |
for i, img in enumerate(matrix): | |
if dir[-1] != '/': | |
filename = dir + '/' + tag + str(i) + '.' + format | |
else: | |
filename = dir + tag + str(i) + '.' + format | |
print('Saving file {}'.format(filename)) | |
io.imsave(filename, img) | |
if __name__ == '__main__': | |
# benign = MoleImages('data/malignant/*.jpg') | |
# ben_images = benign.resize_bulk() | |
# print('Shape of benign images: ', ben_images.shape) | |
# benign.save_h5(ben_images, 'benigns.h5', 'benign') | |
benign = MoleImages() | |
X = benign.load_h5('benigns.h5','benign') | |