2011-03-08 57 views
0

我正在使用matlab进行一些图像处理。所以在这方面, 我有一个关于Matlab/Octave imwrite()函数的问题。matlab函数在写入输出时如何缩放数据imwrite()

当我打电话imwrite为:

imwrite(img,'file.bmp'); 

其中IMG是类/类型在Matlab双数据和具有负值以及正值。

Matlab imwrite()函数如何缩放这些数据来写入一个BMP值在[0,255]之间的BMP图像。我不明白imwrite.m

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

1]

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

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

或任何其他类型的缩放。

谢谢。

-AD。

+0

不是一个答案,而是一个建议。你为什么不自己做转换,并用uint8s提供imwrite? – 2011-03-08 19:41:34

回答

2

看起来你正在写2D矩阵。该矩阵将被写为索引图像。如果没有提供色彩地图,图像将是灰度。

如果矩阵imguint8类,则IMWRITE将实际值写入图像文件。

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

请参阅Class SupportIMWRITE文档。

编辑

这里是你如何能重现转换:

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