输入图像为1.jfif,以下是将彩色图像转化为灰度图像之后分八个位平面进行分离的图像代码
【代码】
I = rgb2gray(imread('1.jfif'));
[h w] = size(I);
subplot(3,3,1);
imshow(I);title('原始图像');
for k=1:8
for i=1:h
for j=1:w
b1(i,j) = bitget(I(i,j),k);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,k+1);
imshow(b1,[]);
ind = num2str(k);imti = ['第',ind-1,'个位平面'];
title(imti);
end
【分别代码】分开为单个二进制图像进行展示
I = rgb2gray(imread('1.jfif'));
[h w] = size(I);
subplot(3,3,1);
imshow(I);title('原始图像');
for i=1:h
for j=1:w
b1(i,j) = bitget(I(i,j),1);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,1+1);
imshow(b1,[]);
ind = num2str(1);imti = ['第',0,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b2(i,j) = bitget(I(i,j),2);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,2+1);
imshow(b2,[]);
ind = num2str(2);imti = ['第',1,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b3(i,j) = bitget(I(i,j),3);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,3+1);
imshow(b3,[]);
ind = num2str(3);imti = ['第',2,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b4(i,j) = bitget(I(i,j),4);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,4+1);
imshow(b4,[]);
ind = num2str(4);imti = ['第',3,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b5(i,j) = bitget(I(i,j),5);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,5+1);
imshow(b5,[]);
ind = num2str(5);imti = ['第',4,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b6(i,j) = bitget(I(i,j),6);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,6+1);
imshow(b6,[]);
ind = num2str(6);imti = ['第',5,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b7(i,j) = bitget(I(i,j),7);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,7+1);
imshow(b7,[]);
ind = num2str(7);imti = ['第',6,'个位平面'];
title(imti);
for i=1:h
for j=1:w
b8(i,j) = bitget(I(i,j),8);%bitget函数首先将I(i,j)处灰度值分解为二进制串,然后取第k位
end
end
subplot(3,3,8+1);
imshow(b8,[]);
ind = num2str(8);imti = ['第',7,'个位平面'];
title(imti);
【示例】