0

我使用这些代码生成了灰度在 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)吗?

4

2 回答 2

1

不要使用 imsave,而是使用 imwrite

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

请注意,我将其保存为 png 文件而不是 jpg 以防止压缩。位图也无需压缩即可保存。

与使用 imshow 和 imsave 相比,此方法是一种更直接的保存原始图像矩阵的方法。

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

于 2013-06-24T17:41:36.410 回答
0

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

于 2013-06-24T15:02:05.700 回答