• 比特平面分层(位图切割)


    数字图像处理(中卫第3版)

    http://blog.csdn.net/zqckzqck/article/details/47148465

    比特平面分层

    比特平面分层,代替突出灰度级范围,突出特定比特来为整个图像外观做出贡献。像素是比特组成的数字,一幅8比特图像,可以认为是8个1比特的平面组成,其中平面1包含图像中所有像素的最低阶比特,而平面8包含图像中所有像素的最高阶比特,b表示比特(下标从0开始),B表示比特平面(下标从1开始)。

                 

    基本思想:比特平面本质上是原图像通过某个函数(或者某种映射关系)变换得来的,也就是位平面F(Bn)=T(r),r为原图像,T表示映射关系,T(r)表示映射之后的像素值。

    示例:当我们单独拿出B4比特平面时,也就是取出b3位相对应的位平面,一个比特位的取值只能是0或者1,对于8个比特位的图像来说,将b3取值为0和1时的情况全部罗列出来(这里只罗列前面几组,并得出映射关系):

    00000000,00000001,00000010,00000011,00000100,00000101,00000110,00000111-------当取值为0-7时,b3位一直取值为0,T(r) = 10

    00001000,00001001,00001010,00001011,00001100,00001101,00001110,00001111-------当取值为8-15时,b3位一直取值为1,T(r) = 13

    00010000,00010001,00010010,00010011,00010100,00010101,00010110,00010111-------当取值为16-23时,b3位一直取值为0,T(r) = 17

    00011000,00011001,00011010,00011011,00011100,00011101,00011110,00011111-------当取值为24-31时,b3位一直取值为1,T(r) = 26                     

                                                                              。

                                                                              。

                                                                              。

    继续取值的话,可以得出映射关系:当取出Bn比特平面时,也就是取出bn-1位平面,取值间隔为2n-1,即每经过2n-1个值,b3位是0和1交替互换(这是最初的理解,可以说非常低级),但是在像素点映射取值的时候是可以随便赋值的,因此比特平面分层后的图像的像素值是可以自己定义的。

    比特平面分层的本质:只要让所有像素与00001000进行位与操作就可以将所有b3位取值为0和1的像素点分开,只不过这样的缺点是只能将所有像素点映射成两类,当然了这两类像素值是可以自己随意取的。

     

    比特平面分层的程序实现

    程序思想:在8比特下,遍历整个图像,用像素值与各比特面的值2n-1(n为比特面)进行位与操作,判断该像素值在该比特面是否存在即该比特位是否为1,如果存在进行二值化给该像素值所在位赋值为255,这也是突出显示该比特的核心,否则赋值0。

    位与操作是将两个十进制数值变成二进制,然后按位进行与操作,如果对应的;两个值均为1,则为1,否则均为0(对应位为0,值为0)。

    程序思想的意思是确认该比特位是否为1(因为对应的比特平面值,仅有该比特位为1,其他为均为0),如果该比特位为1,则对该比特平面没有贡献,映射成一个值(一般为255),如果该比特位不为0,则对该比特平面没有贡献,映射成另一个值(一般为0)。

    originalImg = imread('Fig0314(a)(100-dollars).tif');
    tempImg = originalImg;
    figure;
    subplot(3,3,1);
    imshow(originalImg);
    title('原始图像');
    height = size(originalImg,1);
    width = size(originalImg,2);
    for n = 1:8
        for i=1:height
            for j=1:width
                gray =bitand( originalImg(i,j), 2^(n-1) );%位与操作判断
               if(gray==2^(n-1))
                    tempImg(i,j) = 255;%二值化 突出比特平面            
                else
                    tempImg(i,j) = 0;
               end                          
            end
        end
        subplot(3,3,n+1);
        imshow(tempImg);
        title(['',num2str(n),'比特图像 ']);
    end

     

    图像重建

    比特平面分层一般用于图像的压缩,在图像压缩中重建一幅图像所用的平面要比全部平面少,但是重建之后的图像肯定有一些细节是丢失的,因为在分割成位平面的时候就已经丢失了细节。

    基本思想:重建是使用第n个平面的像素乘以常数2n-1来完成的,使用多个平面重建时,将对应像素直接相加。

    例如,我们只用比特平面7重建图像时,用64乘以比特平面7就可以了,如果用比特平面7和8进行重建一幅图像时,我们用128乘以平面8,用64乘以平面7,然后把这两个比特平面相加。

     

  • 相关阅读:
    机器学习周志华- 第六章学习笔记6.1-6.4
    Centos 中 vim 的配置
    github相关的软件安装及配置
    堆/栈的比较 以及 malloc/new动态内存的开辟
    内存管理
    Linux中的搜索命令
    String 类 Copy-On-Write 技术以及使用时存在的风险
    二分查找算法的应用
    二分查找算法
    union关键字 与大小端模式
  • 原文地址:https://www.cnblogs.com/qinguoyi/p/7601179.html
Copyright © 2020-2023  润新知