我有一个灰度图像的数据集,如下所示:x1c 0d1x现在,我使用以下类打开我的数据集:
"""Tabular and Image dataset."""
def __init__(self, excel_file, image_dir):
self.image_dir = image_dir
self.excel_file = excel_file
self.tabular = pd.read_excel(excel_file)
def __len__(self):
return len(self.tabular)
def __getitem__(self, idx):
if torch.is_tensor(idx):
idx = idx.tolist()
tabular = self.tabular.iloc[idx, 0:]
y = tabular["Prognosis"]
image = PIL.Image.open(f"{self.image_dir}/{tabular['ImageFile']}")
image = np.array(image)
#image = image[..., :3]
image = transforms.functional.to_tensor(image)
return image, y
如果我检查图像的Tensor,那么我有:
tensor([[[160, 160, 192, ..., 52, 40, 40],
[176, 208, 320, ..., 96, 80, 16],
[176, 240, 368, ..., 160, 160, 52],
...,
[576, 608, 560, ..., 16, 16, 16],
[624, 592, 544, ..., 16, 16, 16],
[624, 624, 576, ..., 16, 16, 16]]], dtype=torch.int32)
现在,它们应该在0和1之间,对吗?因为它是灰度的,或者RGB中的0-255,但是有一些大的值,我不知道它们是从哪里来的(实际上,imshow
显示的图像具有奇怪的扭曲颜色,如黄色和蓝色,而不是灰度)。然而,这是图像torch.Size([1, 2350, 2866])
的大小;我想把大小调整到(1,224,224)这是我的函数:
def resize_images(images: List[str]):
for i in images:
image = PIL.Image.open(f"{data_path}TrainSet/{i}")
new_image = image.resize((224, 224))
new_image.save(f"{data_path}TrainImgs/{i}")
resize_images(list(df["ImageFile"]))
然而,这段代码返回的所有图像都是224 x244,但它们都是黑色的。所有图像都是完全黑色的!
1条答案
按热度按时间wtlkbnrh1#
您可能共享了一个与您的代码打开的文件不同的文件,或者
imgur
更改了您的文件。无论如何,在Linux/Unix/macOS上检查您的文件内容的最方便的方法是使用file
命令,而无需安装任何软件。因此,检查您的文件,我们可以看到它是一个带有alpha通道的8位PNG:这立刻告诉我这不是你在代码中打开的图像,因为在你的像素转储中有超过255的值,而这在8位文件中是不可能的。所以,检查图像内容的下一个最好的方法是使用
exiftool
,这对Windows用户也有效。看起来像这样:所以,现在我看到这是一个在Mac上做的屏幕抓取。屏幕抓取和你正在显示的图像是不一样的!如果你在8位显示器上显示16位图像,屏幕抓取将是8位的。你应该分享你的原始图像,而不是屏幕抓取。如果
imgur
正在改变你的图像,你应该分享他们与Dropbox或谷歌驱动器或类似。好了,继续你的问题。假设你在代码中打开了一个PNG(因为它不完整,所以我们无法判断)数据不应该是浮点数,因为PNG不能存储浮点数,它只能存储整数。PNG可以存储位深度为1、2、4、8或16位的整数样本。如果你读到24位PNG,也就是RGB 888。如果您读取的是32位PNG,则是RGBA 8888。如果您读取的是48位PNG,则是RGB,每采样16位。如果您读取的是64位PNG,则是RGBA,每采样16位。
所以,简短的答案是跑步:
和/或:
所以,我怀疑你有一个16位灰度PNG,它完全能够存储范围为0..65535的样本。
注意:如果你真的想存储浮点数,你可能需要使用TIFF,或PFM(便携式浮点Map)或EXR格式。