图像标准化需要什么?
What is the need of normalisation in image?
我在网上看到这段代码
imgN = double(img-min(img(:)))/(max(img(:)-min(img(:))));
对 0..1 中的图像进行标准化。这是什么意思?它还显示此错误
Error using /
Integers can only be combined with integers of the same class, or scalar doubles.
在 MATLAB 中,许多函数都会对图像中的值范围做出假设。通常,图像存储为 uint8
或 double
。在 uint8
的情况下,范围是 0...255
(这是 uint8
中的所有可能值)。对于 double
,MATLAB 从 0...1
中选择了一个值范围。要正确使用 imshow
、imwrite
等函数,您的 double
图像必须正确缩放,否则某些像素无法正确显示。
代码中有一个小错误:它基本上是一个除法 a / b
,其中 a
是 double(img - min(img(:)))
,b
是 (max(img(:)) - min(img(:)))
。如果您的输入图像是 double
类型,这将工作正常。但是,如果它是 uint8
或任何其他类型,则分子 a
将转换为 double
,而分母 b
保持不变,例如uint8
。你会有一个师double / uint8
。 MATLAB 在错误消息中告诉您,它不能在除法中混合类型。一个简单的解决方案是也将分母 b
转换为 double
:
imgN = double(img-min(img(:))) / double(max(img(:)-min(img(:))));
我在网上看到这段代码
imgN = double(img-min(img(:)))/(max(img(:)-min(img(:))));
对 0..1 中的图像进行标准化。这是什么意思?它还显示此错误
Error using /
Integers can only be combined with integers of the same class, or scalar doubles.
在 MATLAB 中,许多函数都会对图像中的值范围做出假设。通常,图像存储为 uint8
或 double
。在 uint8
的情况下,范围是 0...255
(这是 uint8
中的所有可能值)。对于 double
,MATLAB 从 0...1
中选择了一个值范围。要正确使用 imshow
、imwrite
等函数,您的 double
图像必须正确缩放,否则某些像素无法正确显示。
代码中有一个小错误:它基本上是一个除法 a / b
,其中 a
是 double(img - min(img(:)))
,b
是 (max(img(:)) - min(img(:)))
。如果您的输入图像是 double
类型,这将工作正常。但是,如果它是 uint8
或任何其他类型,则分子 a
将转换为 double
,而分母 b
保持不变,例如uint8
。你会有一个师double / uint8
。 MATLAB 在错误消息中告诉您,它不能在除法中混合类型。一个简单的解决方案是也将分母 b
转换为 double
:
imgN = double(img-min(img(:))) / double(max(img(:)-min(img(:))));