我在互联网上看到了这段代码
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.
答案 0 :(得分:4)
在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
。您将有一个部门b
。 MATLAB在错误消息中告诉您,它不能在分区中混合类型。一个简单的解决方案是将分母double
转换为imgN = double(img-min(img(:))) / double(max(img(:)-min(img(:))));
:
{{1}}