数字图像处理 --- 图像的大小端Big-endian (BE) or Little-endian (LE)

细说数据的大小端

        图像的大小端或者说数据的大小端就是我们常说的Big-endian与Little-endian, 当你要用一个看图软件去打开一个raw格式的图像时,他除了让你输入图像的基本信息以外,还会让你选择该图是Big-endian还是Little-endian?例如,下图展示的是我用看图软件ImageJ来打开一个raw图时的操作界面。


大小端就是数据的Byte Order 

        一般情况下,当我们按照unsigned short(即,WORD)或者说是按照一个字来保存图像的数据时,一般会有两个选择:

1,区分数据的Bit Order也就是High bit和Low bit。

2,区分数据的Byte Order, 即,Little-endian和Big-endian

其实,图像的大小端指的就是保存图片时,图像数据格式中的Byte order一般情况下raw格式默认的是Big-endian(也就是自然的,正常的,保存数据的格式)如果你的图像是Little-endian,就需要把byte order反转过来。

首先,我们先来简答的了解一下,字节byte和bit比特概念。

假定我定义某个系统的一个字长为16bit,那么对于这个系统而言,我们可以有如下表述:

1,1byte=8bit

 2,1word=2byte=16bit

Big-endian就是说按照正常顺序保存数据

比如说我们把数4080存在一个字中:

        首先,log(4080)/log(2)向2的整数次幂取整得到12。说明我们在二进制模式下要保存这个数需要12位,也就是12bit。这样一来就会有16-12=4个空位。而正常的保存方式是,从零开始往大写,大于最高位的地方空下来,如下:

 如果用Little-endian来保存则需要翻转byte order

 可见,经过交换左右byte中的数据后(注意,只交换byte而不改变byte中的内容),原来的4080变成了61455,但这不是我们想要的原始数据,如果要读little-endian保存的数据就需要解码。


解码Little-endian

        如果你手头有一个以Little-endian的方式保存的图片,你该怎么读呢?reverse byte order。我这里分别记录了如何从理论上反转byte order,以及在计算机上反转byte order的详细算法。

反转byte order的原理

        我在下图的笔记里,记录了如果反转byte order的过程,也就是怎样把Little-Endian变成Big-Endian。

        其中,笔记中的第一步和第二部,分别记载了如果取出数据的低八位和高八位。第三步,记录了如何把little-endian的数据变成big-endian的数据,也就是如果解密Little-Endian。

反转byte order的详细算法 (C语言)

(8位表示一个byte)


 

(全文完) 

作者 --- 松下J27

(*配图与本文无关*)

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松下J27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值