【问题标题】:Image double to binary in Matlab在 Matlab 中将图像加倍为二进制
【发布时间】:2013-09-30 15:06:54
【问题描述】:

早上好,

我有一个关于如何将卫星图像转换为二进制数的问题。每个波段的格式是一个 double 类型的矩阵(长度为 655x639),数字如下:204080、200 等。我想将其转换为二进制格式。所以,例如:

20480 = 101000000000000 200 = 11001000

我尝试使用“dec2bin”命令,但它创建了一个长度不同的矩阵(418545x8 字符),我认为它不能正常工作(我想要相同的大小)。此外,我尝试将格式更改为 uint16 或 uint8 等。我该怎么做?

你好,

【问题讨论】:

  • 使用 dec2dbin 可以得到输入的正确二进制表示。不确定我是否理解different length 问题...您可以将dec2bin 与指定要返回的位数的第二个参数一起使用,例如dec2bin(200,16) = 0000000011001000,如果您希望返回至少 16 位。
  • 如果您告诉我们您想对二进制数做什么可能会有所帮助 - 很少需要将数字显式转换为二进制表示。
  • 嗨塞巴斯蒂安!非常感谢您的快速回复。我需要转换这些值,因为我需要从二进制值中了解两个值的信息(它是云遮罩带,信息是二进制代码)。使用您的代码(200,16)它可以正常工作,但我怀疑是因为我想(我不知道是否可能)与所有二进制数获得相同的矩阵长度(655x639),只是为了检查它。例如,当我应用您的代码时,我得到一个 418545x16 字符,而不是 655x639(我无法观看,因为它太大了)。我希望我解释得更好!

标签: image matlab


【解决方案1】:

我有一个问题要问您:您如何表示图像中每个像素的二进制数?
最初,每个像素由一个 单个 浮点数表示,即 655*639*1 个浮点数。转换为 uint16uint8 不会改变每个像素仍然由 单个 数字表示的事实。
但是,当您使用 dec2bin 转换为二进制 string 时,您希望使用 几个(8 位或 16 位)二进制数字来表示每个像素。因此,您的结果现在大小为 418,545×8(请注意 418,545 = 655 * 639 )。
你可以做的是reshape 使用第三维来存储每个像素的二进制向量的结果

sz = size(myDoubleIm);
binIm = dec2bin( uint16(myDoubleIm) ); % convert to 16 bit
binIm = reshape( binIm, sz(1), sz(2), [] ); % convert to 3D

【讨论】:

  • 嗨,Shai!正如我告诉塞巴斯蒂安的,这些信息只是为了检查它,因为它是一个云遮罩,而我需要的信息在二进制代码上(我不想代表或类似的东西)。我试过你的代码,我得到了二进制图像的 0 和 1 的结果。我将尝试与其他回复混合!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-02-13
  • 2016-03-04
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多