调整/规范化uint16图像是否存在混乱?

2024-06-13 14:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有15000张图像,我把它们矢量化,作为我的卷积神经网络的输入。[15000x8192]我的问题是关于缩放,就像我按下面的方式缩放一样,我得到了很好的结果

scaler= MinMaxScaler()
x_train= scaler.transform(x_train)

但如果我做了下面的事,我就不会

x_train= xtrain./65535

“我的图像”的最大和最小像素值为31238和16841。处理图像时第一种方法正确吗?你知道吗

我发现下面的第三种方法,看起来更合理

X_set_uint8 = cv2.normalize(X_set_16, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
# Normalize pixel values to be between 0 and 1
X_set_scaled= X_train_uint8/255

所有方法都应该提供相同的性能,但它们不是。这就是我困惑的地方。你知道吗


Tags: 方法图像方式transformtrain神经网络像素cv2
2条回答

MinMaxScaler(默认情况下)将每个特征(在本例中是像素)转换为[0,1]范围。你知道吗

而在第二种方法中,您只需将所有值转换为[0.257,0.477]范围,独立于它们所属的特性。你知道吗

因为您处理的是图像,所以无论特征如何,都可以进行简单的最小-最大缩放,因为您喜欢保持像素之间的强度差异:

x_train = (x_train - x_train.min())/(x_train.max() - x_train.min())

如果图像数据的max = 65535min = 0,则此公式相当于第二种方法。你知道吗

好吧,你说你用的是摄谱仪的数据!还记得我说过最重要的是考虑你的数据吗?你知道吗

我们知道您需要规范化数据,因为网络将更快地聚合。理想情况下,我们希望它们是正态分布的。你知道吗

光谱图的一个巨大问题是标准的归一化技术没有用,因为数据是非常重尾的。你知道吗

你可能需要对你的值取一个调整后的对数:取log(x+c),在这里你调整c直到你看到高斯分布。更先进的技术是使用Box-Cox变换。你知道吗

现在,对于按最小值和最大值进行规范化,您可能希望使用minimum and maximum values for a spectrogram而不是数据显示的内容。你知道吗


答案取决于输入数据的性质。注意下面的答案同时适用于分类任务和回归任务。你知道吗

  1. 从16位到8位颜色,除非你真的相信16位颜色中有值得捕捉的信息。(我怀疑。)
  2. 是否要对图像中的颜色亮度/饱和度进行规格化?使用最小/最大定标器。这将防止饱和对分类产生影响。你知道吗
  3. 你认为饱和度/亮度是一个特性,你的数据应该覆盖整个颜色空间吗?然后按[0,255]或[0,635535]。你知道吗
  4. 只是一个补充:对于某些分类器,也值得研究Transformed = (I - I.mean) / I.std,因为它们需要高斯数据。你知道吗

记住,规范化的目标是将域缩小到[0,1]。您应该始终考虑变换将如何影响样本内和可能的样本外图像。你将教这个模型什么?样本外的图像是否落在同一个图像空间中?哪些可能的转换可以最好地将训练图像和样本外图像映射到类似的域?你知道吗

相关问题 更多 >