如何标准化图像中的像素值并保存

我正在尝试规范化我的数据以准备将其作为此模型的输入。我尝试按照本指南进行操作,但一直遇到问题。


首先,我的最小值和最大值不是从 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: uint8

Min: 8.000, Max: 216.000

Min: 0.031, Max: 0.847

任何想法为什么?而且,我怎样才能保存具有这些标准化结果的图像。现在编写代码时,像素不会更改,因为我只是从 new_image 创建像素的副本。


感谢您提供的任何帮助。


倚天杖
浏览 68回答 1
1回答

扬帆大鱼

您可以做的是计算数据集的实际最小值和最大值,然后再进行您自己的 minmax 归一化。这可能是这样的: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:&nbsp; &nbsp; image = Image.open(image_path)&nbsp; &nbsp; np_image = np.asarray(image)&nbsp; &nbsp; if min > np_image.min()&nbsp; &nbsp; &nbsp; &nbsp; min = np_image.min()&nbsp; &nbsp; if max < np_image.max()&nbsp; &nbsp; &nbsp; &nbsp; max = np_image.max()这将为您提供变量 min 和 max,您现在可以使用它们在 0 和 1 之间进行归一化,而不是之前的 /= 255!&nbsp; &nbsp; ...&nbsp; &nbsp; pixels -= min&nbsp; &nbsp; pixels /= (max - min)&nbsp; &nbsp; ...让我知道是否有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python