Could you help me to verify if I am doing right in the way that I am extracting color channels from CIE Lab* color space?
Below is the code that I am using:
class CustomDataset(Dataset): """Custom Dataset.""" def __init__(self, root_dir, transform=None): """ Args: root_dir (string): Directory with all the images. transform (callable, optional): Optional transform to be applied on a sample. """ self.root_dir = root_dir self.transform = transform self.file_list=os.listdir(root_dir) def __len__(self): return len(self.file_list) def __getitem__(self, idx): img = Image.open(self.root_dir+'/'+self.file_list[idx]) # Read the image using PIL if self.transform is not None: img_original = self.transform(img) img_ori_resized = transforms.Resize((64,64),2)(img_original) img_ori_lab = rgb2lab(img_original) # Convert from RGB to CIE L*a*b* color space. The image shape is (w, h, 3) img_ori_lab = img_ori_lab.transpose(2, 0, 1) # Change the image shape to (3, w, h) img_ori_lab = np.asarray(img_ori_lab) # Convert to numpy array img_l = img_ori_lab[0,:,:] # Select the Luminance chanel(L channel) from the image. I suppose that the L channel is the first layer of the 3d array due to the shape (3, w, h) img_l = np.asarray(img_l, dtype=np.float32) img_l = torch.from_numpy(img_l) # Convert from numpy array to torch tensor. This tensor hold only pixels intensities of the L channel img_resized_lab = rgb2lab(img_ori_resized) # Convert from RGB to CIE L*a*b* color space. The image shape is (w, h, 3) img_resized_lab = img_resized_lab.transpose(2, 0, 1) # Change the image shape to (3, w, h) img_resized_lab = np.asarray(img_resized_lab) img_ab = img_resized_lab[1:3, :, :] # Select the a and b chanels from the image. I suppose that the a and b channels are the second and third layer of the 3d array due to the shape (3, w, h) img_ab = np.asarray(img_ab, dtype=np.float32) img_ab = torch.from_numpy(img_ab) # Convert from numpy array to torch tensor. This tensor hold only pixels intensities of the a,b channels return img_l, img_ab # Return the channels in a splitted way
My question is whether I am doing this channel separation correctly and whether I am actually selecting the first matrix of the image for the luminance channel (L) and the second and third matrices for channels a and b.
I saw in some places, some people using the following notation:
img_l = img_ori_lab[:,:,0] # Just an example. The shape is (w, h, 3)
In this way shown above, I think that is wrong because pytorch will interpret that the number of channels is w instead 3…so I did the implementation that I am showing and asking for help.