MATLAB实现按Z字形编码矩阵

编程入门 行业动态 更新时间:2024-10-08 06:17:48

MATLAB实现按Z<a href=https://www.elefans.com/category/jswz/34/1745144.html style=字形编码矩阵"/>

MATLAB实现按Z字形编码矩阵

在图像处理中,有的需要将图像进行Z字形编码,编码规则如下图:

134
258
679

即按1 2 3 4 5 6 7 8 9的顺序排列矩阵中的元素。

逆编码是将变换后的矩阵还原。

本文用MATLAB实现了Z字形编码和逆编码。

%% 按Z字形编码
function [B]=zTransform(A)
sizeA=size(A);
B=zeros(sizeA(1),sizeA(2));
i=1;
j=1;
B(i,j)=A(i,j);
i=i+1;
index=0;
tag=1;
while (i+j)<=(sizeA(1)+sizeA(2))&&i<=sizeA(1)&&j<=sizeA(2)
    if i==sizeA(1)&&j==sizeA(2)
        index=index+1;
        B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
        break;
    end
    if tag==1
        while i<=sizeA(1)&&j<=sizeA(2)&&i>=1&&j>=1
            index=index+1;
            B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
            i=i-1;
            j=j+1;
        end
        i=i+1;
        j=j-1;
        if j<sizeA(2)
            j=j+1;
        else
            i=i+1;
        end
        tag=0;
    else if tag==0
            while i<=sizeA(1)&&j<=sizeA(2)&&i>=1&&j>=1
                index=index+1;
                B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
                i=i+1;
                j=j-1;
            end
            i=i-1;
            j=j+1;
            if i<sizeA(1)
                i=i+1;
            else
                j=j+1;
            end
            tag=1;
        end
    end
end

end



%% 按Z字形逆变换
function [B]=iZTransform(A)
sizeA=size(A);
B=zeros(sizeA(1),sizeA(2));
i=1;
j=1;
B(i,j)=A(i,j);
i=i+1;
index=0;
tag=1;
while (i+j)<=(sizeA(1)+sizeA(2))&&i<=sizeA(1)&&j<=sizeA(2)
    if i==sizeA(1)&&j==sizeA(2)
        index=index+1;
        %B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
        B(i,j)=A(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1);
        break;
    end
    if tag==1
        while i<=sizeA(1)&&j<=sizeA(2)&&i>=1&&j>=1
            index=index+1;
            %B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
            B(i,j)=A(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1);
            i=i-1;
            j=j+1;
        end
        i=i+1;
        j=j-1;
        if j<sizeA(2)
            j=j+1;
        else
            i=i+1;
        end
        tag=0;
    else if tag==0
            while i<=sizeA(1)&&j<=sizeA(2)&&i>=1&&j>=1
                index=index+1;
                %B(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1)=A(i,j);
                B(i,j)=A(fix(index/sizeA(2))+1,mod(index,sizeA(2))+1);
                i=i+1;
                j=j-1;
            end
            i=i-1;
            j=j+1;
            if i<sizeA(1)
                i=i+1;
            else
                j=j+1;
            end
            tag=1;
        end
    end
end
end



例子:

A =


     1     2     3
     4     5     6
     7     8     9
    10    11    12
    13    14    15
    16    17    18


B=zTransform(A)


B =


     1     4     2
     3     5     7
    10     8     6
     9    11    13
    16    14    12

    15    17    18


C=iZTransform(B)


C =


     1     2     3
     4     5     6
     7     8     9
    10    11    12
    13    14    15
    16    17    18


更多推荐

MATLAB实现按Z字形编码矩阵

本文发布于:2024-02-28 08:13:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768754.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字形   矩阵   MATLAB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!