比特平面重建图像matlab,matlab实现 图像的比特平面分层 代码

题目:自定义一个用于比特平面分层的函数,给定一副8比特灰度图像(EXP3B.tif和EXP3C.tif),输出该图像第1阶至第8阶比特平面图像。

说明:函数模板为imageBit = myImageBitPlaneSlicing(img);其中,输入参数img为一幅m×n×1的8比特图像;输出参数imageBit为一个3维数组,即imageBit为一个m×n×i (i= 1, 2, …, 8)的矩阵,要求该矩阵的第i个通道上存储第i阶比特平面图像,其中最低阶比特平面为i = 1的比特平面。

实现思路:

像素是由比特组成的数字,一幅8比特图像可看为8个1比特图像组成,所以我们可以尝试将图像数据转化为二进制字符串,再来判断每个像素的二进制中的某位是否为1,对此做出相应的处理。

流程:

1. 将图像数据转为double类型的,这样比较节省储存空间

2. 获取图像的高r和宽c

3. 定义一个8层的 r X c的零矩阵,用于存放最后的结果

4. 将图像数据转换为8位的二进制字符串,便于判断位于第几比特平面

5. 将图像的二进制字符串矩阵转化为[r,c,8]的矩阵

6. 遍历每个像素点,取出矩阵中每个像素点的二进制数,并遍历二进制数的每一位的值,判断是否为1,若为1则赋值为1,否则赋值为0

7.依次输出每一层的图像

实现效果:

147155422_1_20181025093058341

实现源代码:

function imageBit = myImageBitPlaneSlicing(img)

img = double(img);%将图像数据转为double类型的,这样比较节省储存空间

[r,c] = size(img)

imageBit = zeros(r,c,8);%定义一个8层的 r X c的零矩阵

img_bin = dec2bin(img,8);%将图像数据转换为二进制字符串,便于判断位于第几比特平面

[r1,c1] = size(img_bin)%此时矩阵的大小为[r * c,8]

img_bin = reshape(img_bin(:),r,c,c1);%将图像的二进制矩阵转化为[r,c,8]的矩阵

%[r,c,l] = size(img_bin)%此时大小为[r,c,8]

for i = 1 :r

for j = 1:c

temp = img_bin(i,j,:);%取出矩阵中每个像素点的二进制数

for k = 1:8

if isequal(temp(9-k),48)%int('1')=48,判断第k位二进制数是否为'1'

imageBit(i,j,k) = 0;

else

imageBit(i,j,k) = 1;

end

end

end

end

end

clc;

clear;

close all;

img1 = imread('EXP3B.tif');

imageBit1 = myImageBitPlaneSlicing(img1);

figure('name','比特平面分层 EXP3B.tif');

subplot(3,3,1);

imshow(img1);

title('原始图像:EXP3B.tif');

for i = 1:8

subplot(3,3,i 1);

imshow(imageBit1(:,:,i))

title(['第',num2str(i),'比特平面']);

end

来源:http://www.icode9.com/content-4-69501.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值