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

数字图像处理(中卫第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,然后把这两个比特平面相加。

 

原文地址:https://www.cnblogs.com/qinguoyi/p/7601179.html