利用位平面进行数字图像重建

时间:2014-10-30 21:39:43

标签: image matlab image-processing bit-manipulation

我正在尝试从提取的位平面重建图像。

首先我展示原始图片,然后是每位平面图片。

这是我的代码:

I = imread('myphoto.jpg');
A=bitget(I,1); subplot(3,3,1), imshow(logical(A));title('Bit plane 1');
A=bitget(I,2); subplot(3,3,2), imshow(logical(A));title('Bit plane 2');
A=bitget(I,3); subplot(3,3,3), imshow(logical(A));title('Bit plane 3');
A=bitget(I,4); subplot(3,3,4), imshow(logical(A));title('Bit plane 4');
A=bitget(I,5); subplot(3,3,5), imshow(logical(A));title('Bit plane 5');
A=bitget(I,6); subplot(3,3,6), imshow(logical(A));title('Bit plane 6');
A=bitget(I,7); subplot(3,3,7), imshow(logical(A));title('Bit plane 7');
A=bitget(I,8); subplot(3,3,8), imshow(logical(A));title('Bit plane 8');

现在我想使用位平面照片重建我的照片。我必须从最重要的位开始添加下一个最重要的位等。我必须一起显示所有照片。我写了一些这样的代码,但我不确定这是不对的。

M1 = bitget(A,8)*2^0;
M2 = bitget(A,7)*2^1;
M3 = bitget(A,6)*2^2;
M4 = bitget(A,5)*2^3;
M5 = bitget(A,4)*2^4;
M6 = bitget(A,3)*2^5;
M7 = bitget(A,2)*2^6;
M8 = bitget(A,1)*2^7;

figure,subplot(3,3,1),imshow(M1); subplot(3,3,2),imshow(M2); subplot(3,3,3),imshow(M3); subplot(3,3,4),imshow(M4); subplot(3,3,5),imshow(M5); subplot(3,3,6),imshow(M6); subplot(3,3,7),imshow(M7); subplot(3,3,8),imshow(M8);

1 个答案:

答案 0 :(得分:0)

每个A=bitget(I,...);都会覆盖之前的A。没有希望以这种方式取回图像。存储每个,然后你可以把它拿回来。

I  = imread('cameraman.tif');
for ib = 1:8, A{ib}=bitget(I,ib); end

现在每个位平面都是Aclear A的单元格,如果它出错,则首先出现。)

通过求和重建:

Iout = zeros(size(I),'like',I);
for ib = 1:8, Iout = Iout + A{ib}*(2^(ib-1)); end

或者根据练习的精神使用bitset

Iout = zeros(size(I),'like',I);
for ib = 1:8, Iout = bitset(Iout,ib,A{ib}); end

对于具有整数值像素的图像,它应该是无损的:

>> isequal(I,Iout)
ans =
     1