我试图使用point
函数将PIL image
反转和规范化为 1; 但是,我没有得到预期的结果! 我试过的是这个(不知道出了什么问题?
data = data.point(lambda p: 1 if p < 127 else 0 ) # threshold, invert and normalize to 1
例如,在尝试时
print(np.array(data).max())
打印True
.
但是,将PIL Image
转换为numpy
数组然后反转它的工作原理,如下所示:
data = np.array(data.getdata(),
np.uint8).reshape(data.size[1], data.size[0], 1)
maxG = data.max() # correcting the values of folder e, they do not match the other folders
data = ( (maxG - data)/maxG ).astype('uint8')
tsfm = transforms.ToPILImage() #import torchvision.transforms as transforms
data = tsfm(data)
我在单词识别实验中尝试了这两种方法,只有第二种对我有用。可悲的是,使用point
函数会导致不正确的结果。 不确定有什么区别?
铌。第二种方法非常慢,因此如果可以使用point
函数完成此转换,那将有很大帮助。
你混淆了"规范化">和"阈值化"。
使用"阈值",可以使高于或等于阈值的所有值等于某个高数字,使低于阈值的所有值等于某个低数字。每个像素的唯一可能结果是高数字或低数字 - 两者之间没有。在典型的 8 位图像上,阈值为 127,所有像素最终都将为 0 或 255。
使用"归一化">,您将图像中的所有值限制在某个新的上限和一些新的下限之间 -或介于两者之间的任何值。所以结果是一堆大于下限和低于上限的新像素,但在两者之间均匀插值。在典型图像上,您可以将所有值归一化为 0-255 范围,每个像素最终可能会得到该范围内的任何值。