我正在使用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。
答案 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