方块编码基于matlab的图像方块编码仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方块编码基于matlab的图像方块编码仿真相关的知识,希望对你有一定的参考价值。

1.软件版本

matlab2013b

2.系统概述

      方块编码也叫方块截断编码(block truncation coding,简称BTC)是静态图像编码中的一种, 其原理是把一幅图像分为大小为N×N的子像块(简称子块),由于小块内各相邻像素间具有亮度互相近似的相关性,于是只选用两个适当的亮度来近似代表小块内各像素原来的亮度,然后指明子块内的各像素分别属于哪个亮度。

       静态图像编码是研究怎样利用图像固有的统计特性(信源特性),以及视觉的生理学、心理学特性(信宿特性),或者记录设备(如普通照相底片)和显示设备(如电视、监示器)等的特性,经过压缩编码从原始图像信息中提取出有效信息,尽量去掉那些无用的冗余信息,以便高效率地进行图像的数字传输或数字存储;而在复原时仍能获得与原始图像相差不多的复原图像,即保持图像信息中的有效信息。

3.部分源码


function code(tp,I)


fd=fopen('btc.bin','w+');
[m,n]=size(I);
fwrite(fd,m,'long');fwrite(fd,n,'long');
I=double(I);

A=zeros(tp);B=zeros(tp);c(1)=0;
for i=1:tp:m
    for j=1:tp:n
        A=I(i:i+tp-1,j:j+tp-1);
        sum_col_A=sum(A,1);   %子块按列求和
        sum_A=sum(sum_col_A,2);   %子块矩阵的和
        mean_A=mean2(A);    %子块的均值
        for L=1:tp
            for k=1:tp
                if A(L,k)>=mean_A
                   B(L,k)=1;
                else
                   B(L,k)=0;
                end
            end
        end
        nozeronum=nnz(B);  %映像矩阵中非0元素的个数
        AmulB=times(A,B);
        sum_AmulB=sum(sum(AmulB(:,:),1),2);
        if nozeronum==0
            c(1)=0;
            c(2)=0;
        else
            c(1)=round(sum_AmulB/nozeronum);  %子块矩阵中的重建电平
            if nozeronum==tp*tp
                c(2)=c(1);
            else
                c(2)=round((sum_A-sum_AmulB)/(tp*tp-nozeronum));
            end
        end
        fwrite(fd,B,'ubit1');
        fwrite(fd,c,'ubit8');
    end
end
fclose(fd);
fd=fopen('btc.bin','r');
m=fread(fd,1,'long');n=fread(fd,1,'long');
A=zeros(m,n);
for i=1:tp:m
    for j=1:tp:n
        B=fread(fd,[tp,tp],'ubit1');
        c(1)=fread(fd,1,'ubit8');
        c(2)=fread(fd,1,'ubit8');
        for k=1:tp
            for L=1:tp
                if B(k,L)==0
                    A(i+(k-1),j+(L-1))=c(2);
                else
                    A(i+(k-1),j+(L-1))=c(1);
                end
            end
        end
    end
end
A=uint8(A);
imshow(A);title('用方块编码后图象')
imwrite(A,'lenabianma.bmp');
fclose(fd);

                

4.仿真结果

2*2

4*4

8*8

A09-30

以上是关于方块编码基于matlab的图像方块编码仿真的主要内容,如果未能解决你的问题,请参考以下文章

基于matlab的立体图像编码解码算法仿真与分析

基于ODBTC有序抖动块截断编码和DCT域数字水印嵌入提取算法matlab仿真

通信仿真基于matlab信道编码和交织含Matlab源码 1685期

基于空间通信超短QC- LDPC编码的matlab仿真实现

matlab simulink 实现简单的脉宽调制PWM仿真

编码译码基于matlab HDB3编译码仿真含Matlab源码 1961期