【问题标题】:Matlab imwrite function changes the pixel valuesMatlab imwrite函数改变像素值
【发布时间】:2013-01-27 19:26:32
【问题描述】:

我尝试更改灰度图像的一些像素值并在 matlab 中使用 imwrite 将其保存。 保存没问题。 问题是当我读回来时,一些像素值已经改变。与我在保存之前分配给像素的值不完全相同。 我正在尝试对图像进行哈希处理,因此 1 个单位的差异会影响哈希值。

【问题讨论】:

  • 您必须在此处提供更多信息...您做了什么?您发现了哪些变化?
  • 具体来说,了解 (a) 文件格式和 (b) 在此过程中可能的 floatint 转换会有所帮助。我使用的所有文件格式都是int;四舍五入可能是您的问题。
  • 我打开一个 RGB 文件,转换为灰度,更改 shome 像素值,如:Img(x,y)=Img(x,y)+10; imwrite(Img,'Img.jpg');没有浮点数,都是整数。但是当我读回 Img 时,它与矩阵 Img 不同。

标签: image matlab image-processing


【解决方案1】:

正如mmgp所说,JPG可以是lossy。这意味着图像中的一些信息将会丢失,以提高存储效率。

JPG 背后的原理有点像 MP3 背后的原理——人眼不太适应区分的色调等变化将被简化或完全删除,从而减少图像中的信息量。 JPG 中的信息代表了一个外观相似但实际上非常不同的图像。这可能是你正在经历的。

在 Matlab 中,查看help imwrite 的输出。您可以给jpg 写入一个名为'Quality' 的参数,这是一个介于0 和100 之间的数字,100 表示(接近)无损压​​缩。

虽然 JPEG 标准确实 允许(近乎)无损压缩,但它在实践中并不经常使用(至少在我的领域中)。更流行的无损图像格式是 PNG、JPEG2000 和 TIFF。阅读更多关于它的信息here

所有这些在 Matlab 的imwrite 函数中也可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2021-04-28
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多