使用imsave函数后,灰度级会发生变化

时间:2013-06-24 14:04:21

标签: image matlab image-processing

我使用这些代码生成灰度级在50到170之间的RGB图像。

a='C:\Users\sepideh\Desktop\IP_abadpour\S45C-113050518040.jpg';
b=imread(a);
b=b+50;
b(b>170)=170;

并且当我调用函数max和min时,你会看到灰度级介于50和170之间。

max(max(max(b)))

ans =

  170

min(min(min(b)))

ans =

   50  

然后我使用imshow和imsave函数来保存图像的名称" 50to170"

c=imshow(b);  
d=imsave(c);

现在我以这种方式阅读书面图像:

a='C:\Users\sepideh\Desktop\IP_abadpour\50to170.jpg';  
b=imread(a);

这次我调用max和min函数时,我看到:

max(max(max(b)))

ans =

  235

min(min(min(b)))

ans =

    16  

我的意思是在使用imshow和imsave函数后,灰度级似乎已经改变了! 为什么会这样? 是因为我在使用imsave函数时使用的格式(.jpg)?

2 个答案:

答案 0 :(得分:1)

不使用imsave,而是使用imwrite

b=imread(a);
b=b+50;
b(b>170)=170;
imwrite(b,'50to170.png','png')

请注意,我将其保存为png文件而不是jpg以防止压缩。 Bitmap还可以在不压缩的情况下保存它

这种方法比使用imshow和imsave更直接地保存原始图像矩阵。

如果你想要相同的imsave功能(选择文件的位置),请查看“uiputfile”以获取文件名和位置。

答案 1 :(得分:0)

我测试了它。
1.首先,你不能使用imsave(b),因为函数imsave期望它的第一个输入参数是单个图形对象的有效句柄。所以首先你应该以c = imshow(b)的形式显示图像。然后使用c作为函数imsave的输入 2.如果要保存图像而不显示图像,请首先使用“imwrite”功能并将b作为第一个输入参数传递给它。
请注意,如果您不想在保存后更改灰度级,则应使用“bmp”作为保存格式而不是“jpg”。 因为'jpg'不支持索引图像,并且“imwrite”在将数据写入JPEG文件之前将索引图像转换为RGB,因此灰度级可能会改变。当在matlab中显示图像时,它与对比度拉伸无关。它与用于保存图像的格式。