【问题标题】:MATLAB: Reading both Bytes of a Unsigned 16-bit binary fileMATLAB:读取无符号 16 位二进制文​​件的两个字节
【发布时间】:2013-01-01 06:17:18
【问题描述】:

我有一个二进制波段序列(1 波段,BSQ 文件),它是一个无符号的 16 位(2 字节)整数。

目前我正在通过multibandread阅读整个(图像):

img=multibandread('IMAGE.bsq',[400 400 1],'uint16',0,'bsq','n');

MATLAB 中的哪个进程允许我分别读取两个字节?即我想将文件读入 MATLAB 中的 2 个新数组,例如byte1 (400x400x1) 和 byte2 (400x400x1)。

这可以通过fread实现吗?我在“精度”部分注意到可以跳过源值(例如'N*source=>output'),但我不确定确切的过程。

【问题讨论】:

  • 您是否尝试指定'uint8' 而不是'uint16',获取结果然后将其分成两个图像?或者使用按位运算将您当前的结果分成两个图像?
  • 我需要从uint16 数组中提取两个字节——读取为uint8 会实现这一点吗? (不过我对第二个字节中包含的数据更感兴趣)

标签: matlab integer byte binaryfiles


【解决方案1】:

一种方法是将您当前的img 拆分为按位运算。 LSB 图像将是:

img1 = bitand(img, 255);   %// 0x00FF

MSB 图像将是:

img2 = bitsra(img, 8);

不是强制性的,但也许您还想将这些转换为 uint8s:

img1 = uint8(img1);
img2 = uint8(img2);

【讨论】:

  • img2 = bitsra(img, 8); 会更好。
  • 似乎已经做到了。我只对 MSB 真正感兴趣,它看起来使用 img1 = bitand(A, 255); %// 0x00FF 具有合理的值。干杯
  • @MBL 我认为img1 是LSB,而不是MSB。 img2 是 MSB。
  • @Masi 这就是我在答案中所说的,不是吗?
  • @EitanT 是的,你的答案是正确的。 MBL cmets 在第二条评论中有所不同:MSB --- img1.
猜你喜欢
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多