• 数字图像处理 --- 图像的HighBit与LowBit


     图像的HighBit与LowBit

            High-bit与Low-bit的概念和little-endian和big-endian的概念是相辅相成的(虽然,他们是相互独立的)。 他们都是针对计算机中的一个字(WORD)来说的。

            前者说的是在一个16bit的字中,保存一个二进制数。如果不能填满整个16位,那么多出来的0,究竟是放在16bit字中的前面,还是放在后面?比如说一个16bit的字,保存了一个8位的二进制数,究竟是把这8位数放在高bit位,空出来的低bit位补0(也就是High-bit)?还是把这8位数放在低bit位,空出来的高bit位补0(Low-bit)。

            而后者说的是在一个字中,高8位和低8位的两个Byte的位置要不要交换。

    举个例子

    Low-bit与High-Bit的例子:

            4095用二进制表示是111。。。1111共计12位。

     如果把这12个1放在WORD的低位,高位补零,就是Low-Bit的保存方式(实际上Low-Bit也就是按照自然的方式存储数据):

    用Low-Bit的方式来保存,读出来以后还是4095,这也是为什么说Low-bit是一种自然的保存方式的原因。 

      如果把这12个1放在WORD的高位,低位补零,就是High-Bit的保存方式:

     用High-bit的方式保存4095,读出来以后就是65520。(上图的笔记中有误)这不是我们保存的真实值,因为,如果一个数据在保存的时候是用High-bit的方式来保存的,那么我们在读这个数据的时候,就不能直接读,而是要把低位所补的0通通移掉。

             这里要注意一点,这里所说的移位,是按照数据的原始格式来移的,而不是按照数据本身。也就是说,如果你电脑里有个变量(数)是unsign char型的,也就是8位,那么无论这个变量里面保存的数是1(0000 0001)还是255(1111 1111),只要是按照High-bit的方式来保存,保存的时候都是低八位补0,这样一来8bit的1就在一个字(16bit)中就变成了(0000 0001 0000 0000),而8bit中的255就变成了(1111 1111 0000 0000)。这样一来,在读8bit的数时,就要先右移掉低位的8个0。

            依此类推,如果一个字中保存的是10bit的数,读的时候就右移6位。如果是12bit的数,读的时候,就右移4位,等等。如果是在一个字中保存16bit的数,则无需移位。


    如何读取用High-bit方式保存的数据 

    下面的笔记中,我详细记录了读High-bit数据的算法和原理:


    个人笔记(补充):

    (全文完)

    作者 --- 松下J27

    经典歌词赏析:

    《牵手》---节选

    因为爱着你的爱

    因为梦着你的梦

    所以悲伤着你的悲伤

    幸福着你的幸福

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

  • 相关阅读:
    Docker与虚拟机比较
    NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
    如何处理微服务之间的通信和数据一致性?
    【设计模式】Java设计模式 - 迭代器模式
    vue.js javascript页面表单验证滚动
    Vue移动端 / PC端适配解决方案:postcss-px-to-viewport
    人工智能应该怎么学?
    苹果电脑pd工具箱Parallels Toolbox中文
    【Groovy】递归遍历文件,匹配/排除指定的文件
    Git 术语及中英文对照
  • 原文地址:https://blog.csdn.net/daduzimama/article/details/126711342