⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code1.m

📁 matlab写的lzw和huffman的编码
💻 M
字号:
img1=imread('lenna.bmp');
A=double(img1);
B=zeros(256);
C=zeros(256);
%=======================均衡化=====================
rate=be_count(A);%调用计算图象灰度直方图函数
add_rate=rate;
for i=2:256
    add_rate(i)=add_rate(i)+add_rate(i-1);
    %累积直方图
end
ave=ceil(add_rate.*(255-1)+0.5);%均衡化算子
   for i=1:256
      for j=1:256
         k=A(i,j)+1;
         B(i,j)=ave(k);%均衡化后的图像像素值
      end
   end
 k=be_count(B);%调用计算均衡化后的图象灰度直方图函数
 %-------输出
 img2=uint8(B);
 l=0:255;
 subplot(4,2,1);plot(l,rate);
 subplot(4,2,3);plot(l,k);
 subplot(4,2,2);imshow(img1);title('原图');
 subplot(4,2,4);imshow(img2);title('均衡化');

%=====================单映射======================
  C=floor(A./5);
 rate2=be_count2(C);%调用计算图象灰度(分成52段)直方图函数
 add_rate2=rate2;
for i=2:52
    add_rate2(i)=add_rate2(i)+add_rate2(i-1);
    %累积直方图
end
   img3=uint8(C);
   std=[ones(1,9)*0.1,0.1,ones(1,9)*0.2,0.2,ones(1,10)*0.3,0.3,ones(1,10)*0.3,0.3,ones(1,9)*0.1,0.1];%规定化直方图
   add_std=[ones(1,9)*0.1,0.1,ones(1,9)*0.3,0.3,ones(1,10)*0.6,0.6,ones(1,10)*0.9,0.9,ones(1,9)*1,1];%"累计"规定化直方图
   for i=1:52 
       if add_rate2(i)<=0.2  p(1)=i;%离0.1最近,记录
       elseif add_rate2(i)<=0.45  p(2)=i;%离0.3最近,记录
           elseif add_rate2(i)<=0.75  p(3)=i;%离0.6最近,记录
                   elseif add_rate2(i)<=0.95  p(4)=i;%离0.9最近,记录
                       else break;  
                       end
   end
   
   for j=1:256
      for i=1:256
         l=C(i,j)+1;%k为1--52的数,表示A(i,j)所属的段号(分段的下标)
         if l<=p(1)%映射到0--45
                         C(i,j)=C(i,j).*(45/p(1));
             elseif l<=p(2)%映射到46--95
                              C(i,j)=C(i,j).*(95/p(2));
                 elseif l<=p(3)%映射到96--150
                                   C(i,j)=C(i,j).*(150/p(3));
                     elseif l<=p(4)%映射到151--205
                                       C(i,j)=C(i,j).*(205/p(4));
                                  elseif   l<=42  
                                          C(i,j)=205; 
                                      else C(i,j)=C(i,j)*5;
                              end
                         
      end
 end
  %-------输出
   img4=uint8(C);
   l=0:5:255;
 subplot(4,2,5);plot(0:255,[rate2 zeros(1,204)]);
 subplot(4,2,7);stem(l,(std));
 subplot(4,2,6);imshow(img3);title('分段原图');
 subplot(4,2,8);imshow(img4);title('单映射规定化');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -