【问题标题】:Why does MatLab's imread() and R's readPNG() gives different results?为什么 MatLab 的 imread() 和 R 的 readPNG() 给出不同的结果?
【发布时间】:2017-04-11 08:15:47
【问题描述】:

我想使用 R 实现 PCA 到图像文件。但是当我比较使用 MatLab 和 R 读取图像的结果时,它给出了不同的结果。

A = double(imread('bird_small.png'));

使用 MatLab 和

A <- readPNG('bird_small.png')

使用 R 的 png 包会给出不同的矩阵。这使我无法继续使用 R。我做错了什么?

谢谢。

每个输出的第一个变量;

来自 MatLab >>

A(1,1,1:3)

[1] 219 180 103

来自 R >>

A[1,1,1:3]

[1] 0.8588235 0.7058824 0.4039216

图像是; http://imgur.com/J96qKq0

【问题讨论】:

  • 矩阵有何不同?也许您需要在处理之前对其进行转置(例如使用t())?
  • 不同之处在于值。列号和行号相等
  • 请提供来自 matlap 输出的值,并提供示例 png 文件(或 R 输出)。
  • 根据 PNG 子类型,Matlab 可能返回一个indexed image。如果是这种情况,则意味着您获得了一个二维数组 A,其值不是实际颜色,而是指向颜色图的指针,您可以将其作为 imread 的第二个输出获得,如下所示:[A, cmap] = imread('bird_small.png');
  • 我编辑了第一个变量和图像。 @LuisMendo 我认为你是对的,因为 MatLab 矩阵中的所有变量都像索引

标签: r image matlab


【解决方案1】:

[219 180 103]./255 = 0.8588 0.7059 0.4039

显然,R 已将您的 png 图像(它包含 0 到 255 之间的 uint8 值)转换为 [0-1] 范围内的浮点值。 要将它们转换回来,只需乘以 255。

【讨论】:

  • 谢谢!我没认出来:)
猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 2017-04-29
  • 2021-12-07
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多