matlab函数imwrite()如何在写入输出时缩放数据

时间:2011-03-08 18:54:27

标签: file matlab io

我正在使用matlab进行一些图像处理。所以在这种背景下, 我对Matlab / Octave imwrite()函数有疑问。

当我将imwrite称为:

imwrite(img,'file.bmp');

其中img是Matlab中类/类型double的数据,并且具有负值和正值。

Matlab imwrite()函数如何缩放此数据以编写BMP图像,其值介于[0,255]之间。我无法理解imwrite.m的代码

它做什么类型的缩放/范围调整,是: -

1]

img = img - min(min(img));  

img = img .* ((255)/max(max(img)));

或任何其他类型的缩放。

谢谢。

-AD。

1 个答案:

答案 0 :(得分:2)

看起来你正在编写2D矩阵。该矩阵将被写为索引图像。如果未提供色彩映射,则图像将为灰度。

如果矩阵img属于uint8类,则IMWRITE会将实际值写入图像文件。

如果矩阵为double,则IMWRITE假定所有值都在0和1之间。所有负值将被截断为0,所有大于1的值将为1.然后它们缩放255并转换为uint8

请参阅Class Support文档中的IMWRITE

修改

以下是重现转化的方法:

img = (rand(10)-0.5)*3;
imwrite(img,'test.bmp');
IMG = imread('test.bmp');

img2 = img;
img2(img2<0)=0;
img2(img2>1)=1;
img2 = uint8(img2*255);

%# compare imwrite vs. manual conversion
isequal(IMG,img2)

ans =

     1