比特图像分层及复原MATLAB实现

比特图像分层原理

图像是由像素组成的,例如对于一张1024×1024的灰度图像,其像素点个数为1024×1024个。灰度图像在计算机中的本质是数的矩阵,数字大小代表其像素点的灰度值,故刚刚的灰度图像在计算机中便是一个1024×1024矩阵。

像素值是由比特位组成的整数。例如256级灰度图像是现有运用最广泛的灰度图像格式,其像素值是由8比特(一字节)组成。比方说,一个像素点的灰度值为8,则其存储数据为00001000.

比特图像分层便是将灰度图像的像素位数进行分别读取,将一幅灰度图像分开为八幅比特图像。8比特图像由8个1比特平面组成,其中平面1包含图像中所有像素的最低有效比特,平面8包含图像中所有像素的最高有效比特。例如,对于灰度值为8的像素,其在平面4中为1(即255),在其他平面中都为0。

MATLAB实现

image = imread('XXXXXXX.jpg');                %得到图像
image = rgb2gray(image);                       %若图像是彩色,先要转化为灰度图像
image1=image;
[m,k,s]=size(image1);                          %获取图像大小
subplot(3,3,1)
imshow(image);
for n=1:8
    for i=1:m
        for j=1:k
            a=bitget(image(i,j),n);             %提取这个位的值
            if(a==1)                            %判断是否在该比特层中
                image1(i,j)=255;
            else
                image1(i,j)=0;
            end
        end

    end
     subplot(3,3,n+1)                           %循环显示
     imshow(image1)
     image1=image;
end

分层结果

 

比特图像复原

从上面的结果可以看出,比特平面对于的比特位数越高,其和原图像的相似度越高,这给我们一个启发:即利用少量比特层进行原图像还原。我们知道比特平面由原图像拆分得到,故我们进行还原的方法为累加。

累加公式为:

y= \sum_{m}^{n}y_{m}2^{m-1}

例如,若对于一个像素,其平面7为255(即为1),平面8为255(即为1),我们用平面7、8进行累加,得到像素值为2^{6}+2^{7}=192.

MATLAB实现

image = imread('XXXXX.jpg'); 
image = rgb2gray(image); 
q=5;                           %选择需要开始累加的比特层,此处为5,即累加5,6,7,8平面
image1=image;
[m,k,s]=size(image1);
subplot(1,2,1)
imshow(image);
for n=1:8
    for i=1:m
        for j=1:k
            a=bitget(image(i,j),n);
            if(a==1)
                image1(i,j)=1;
            else
                image1(i,j)=0;
            end
        end
    end
if(n==q)                                 %遍历到5平面时,保存该平面
    image2=image1*2^(n-1);
end
if(n>q)
    for i=1:m
        for j=1:k
            image2(i,j)=image2(i,j)+image1(i,j)*2^(n-1);     %进行比特平面累加
        end
    end
end

实现结果

将q分别设为7(右上),6(左下),5(右下),可以得到三组图像,我们与原图(左上)放在一起对比:

结论

可以使用MATLAB对指定灰度图像进行比特分层,并利用部分比特图像叠加的方法还原原图像,这或许给图像压缩提供了新的思路。

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值