如何使用'point-lambda'函数反转和规范化 PIL 图像



我试图使用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 范围,每个像素最终可能会得到该范围内的任何值。

最新更新