天天看點

【方塊編碼】基于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

【方塊編碼】基于matlab的圖像方塊編碼仿真

4*4

【方塊編碼】基于matlab的圖像方塊編碼仿真

繼續閱讀