我正在尝试从提取的位平面重建图像。
首先我展示原始图片,然后是每位平面图片。
这是我的代码:
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);
答案 0 :(得分:0)
每个A=bitget(I,...);
都会覆盖之前的A
。没有希望以这种方式取回图像。存储每个,然后你可以把它拿回来。
I = imread('cameraman.tif');
for ib = 1:8, A{ib}=bitget(I,ib); end
现在每个位平面都是A
(clear 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