图像标准化的需要是什么?

时间:2015-06-09 06:29:02

标签: matlab image-processing

我在互联网上看到了这段代码

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.

1 个答案:

答案 0 :(得分:4)

在MATLAB中,许多函数都假设图像中的值范围。通常,图像存储为uint8double。对于uint8,范围为0...255(这是uint8中的所有可能值。)。对于double,MATLAB选择了0...1的值范围。要正确使用imshowimwrite等功能,必须正确缩放double图像,否则无法正确显示某些像素。

代码中有一个小错误:它基本上是一个分区a / b,其中adouble(img - min(img(:)))b(max(img(:)) - min(img(:)))。如果您的输入图像是double类型,这将正常工作。但是,如果它是uint8或任何其他类型,则分子a将转换为double,而分母b保持为uint8double / uint8。您将有一个部门b。 MATLAB在错误消息中告诉您,它不能在分区中混合类型。一个简单的解决方案是将分母double转换为imgN = double(img-min(img(:))) / double(max(img(:)-min(img(:))));

{{1}}