admin 发表于 2012-8-29 21:16:42

matlab实现灰度图像的位平面分解

看到一位会员提出的问题:matlab实现灰度图像的位平面分解。开始是不是很理解,以为只是图像的分割,后来“小绿”会员给出提示,由于uint8(范围0~255)存储时占1bit,8位二进制表示,提取每一位就成为了位平面分解,基于这个思想,编写代码:


admin 发表于 2012-8-29 21:17:20

clc; clear all;
A = imread('rice.png');
= size(A);
% 读取图片,获取图像阵行列大小
A_bin1 = []; A_bin2 = []; A_bin3 = []; A_bin4 = [];
A_bin5 = []; A_bin6 = []; A_bin7 = []; A_bin8 = [];
% 分别存储8位
for i = 1 : r
      r_bin1 = []; r_bin2 = []; r_bin3 = []; r_bin4 = [];
      r_bin5 = []; r_bin6 = []; r_bin7 = []; r_bin8 = [];
      % 分别存储8位矩阵对应的行
      dec_col = zeros(1, 8);
      for j = 1 : c
          num_bin = dec2bin( A(i, j) );
          for k = 1 : length(num_bin)
            str_bin = '00000000';
            % uint8占1bit,8位
            str_bin(k) = num_bin( length(num_bin) - k + 1 );
            % 获取对应的位上的数值
            dec_temp = bin2dec(str_bin);
            % 转成十进制的
            dec_col(k) = dec_temp;
          end
          r_bin1 = ; r_bin2 = ;
          r_bin3 = ; r_bin4 = ;
          r_bin5 = ; r_bin6 = ;
          r_bin7 = ; r_bin8 = ;
      end
      A_bin1 = ; A_bin2 = ;
      A_bin3 = ; A_bin4 = ;
      A_bin5 = ; A_bin6 = ;
      A_bin7 = ; A_bin8 = ;
end
figure;
subplot(3, 3, 1); imshow(A);      title('origin image');
subplot(3, 3, 2); imshow(A_bin1); title('1 image');
subplot(3, 3, 3); imshow(A_bin2); title('2 image');
subplot(3, 3, 4); imshow(A_bin3); title('3 image');
subplot(3, 3, 5); imshow(A_bin4); title('4 image');
subplot(3, 3, 6); imshow(A_bin5); title('5 image');
subplot(3, 3, 7); imshow(A_bin6); title('6 image');
subplot(3, 3, 8); imshow(A_bin7); title('7 image');
subplot(3, 3, 9); imshow(A_bin8); title('8 image');
页: [1]
查看完整版本: matlab实现灰度图像的位平面分解