我正在尝试标准化我的数据,以便将其作为这个模型的输入。我尝试按照这个指南进行操作,但遇到了问题。
首先,我的最小值和最大值并不是从0和255开始的,最终结果也没有标准化在0到1之间。
这是我的函数
def process_image(image_path): image = Image.open(image_path) new_image = image.resize((224,224)) pixels = asarray(new_image) # confirm pixel range is 0-255 print('Data Type: %s' % pixels.dtype) print('Min: %.3f, Max: %.3f' % (pixels.min(), pixels.max())) # convert from integers to floats pixels = pixels.astype('float32') # normalize to the range 0-1 pixels /= 255.0 # confirm the normalization print('Min: %.3f, Max: %.3f' % (pixels.min(), pixels.max())) new_image.save("result.jpg") return new_image
这是我的输出结果
Data Type: uint8Min: 8.000, Max: 216.000Min: 0.031, Max: 0.847
为什么会这样?另外,如何保存这些标准化后的图像结果?目前的代码中,像素值没有被更改,因为我只是从new_image中复制了像素值。
感谢提供的任何帮助。
更新后的代码
感谢@relh的帮助!我实现了他的代码,现在运行得很好
代码如下
def process_image(image_path): min = sys.maxsize max = -sys.maxsize image = Image.open(image_path) new_image = image.resize((224,224)) np_image = asarray(image) if min > np_image.min(): min = np_image.min() if max < np_image.max(): max = np_image.max() np_image = np_image.astype('float32') print("BEGINNING PIXEL VALUES", np_image) print('Data Type: %s' % np_image.dtype) print('Min: %.3f, Max: %.3f' % (np_image.min(), np_image.max())) np_image -= min np_image /= (max - min) print('Min: %.3f, Max: %.3f' % (np_image.min(), np_image.max())) print(np_image)
输出片段
Min: 2.000, Max: 223.000Min: 0.000, Max: 1.000[[0.22171946 0.4162896 0.37104073] [0.23076923 0.42533937 0.3846154 ] [0.18099548 0.37556562 0.33484164] ... [0.12217195 0.51583713 0.47511312] [0.15837105 0.54751134 0.50678736] [0.16742082 0.5565611 0.51583713]]]
回答:
你可以先计算数据集的真实最小值和最大值,然后再进行自己的最小-最大标准化。
这可能看起来像这样:
import sysfrom PIL import Imageimport numpy as npimage_paths = ['image_path1.jpg', 'image_path2.jpg', 'image_path3.jpg']min = sys.maxsizemax = -sys.maxsizefor image_path in image_paths: image = Image.open(image_path) np_image = np.asarray(image) if min > np_image.min(): min = np_image.min() if max < np_image.max(): max = np_image.max()
这将为你提供min和max变量,现在你可以用它们来代替你之前的/= 255,来将像素值标准化到0和1之间!
... pixels -= min pixels /= (max - min) ...
希望这对你有帮助!