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

📄 vector2zigzagmtx.m

📁 zigZag scan implementation on matlab
💻 M
字号:
%--------------------------------------------------------------------------
%This function performs zigzag scan on a given 2D block.
% Input Arguments: inputMtx = 1D vector, should e square matrix
% Outpuit Argunent: 2D inverse zigzag matrix
%--------------------------------------------------------------------------

function outMtx = Vector2ZigzagMtx(inVector)

[M, N] = size(inVector);

if (M ~= 1)
    error('Input vector should be one dimensional row vector');
end

N = sqrt(N);

if(N ~= round(N))
    error('Number of elements in the input vector should be square of an integer');
end

outMtx = zeros(N, N);
r = 1; c = 1; inc_r = 0; inc_c = 0;

for n = 1:N*N
   outMtx(r, c) = inVector(n);
   
  %for first element
  if (c == 1 && r ==1)
    inc_r = 0; inc_c = 1;

  %for elements at the end of the row or column
  elseif (r == N && mod(c, 2) == 0)
    if(mod(N, 2) == 0)
        inc_r = -1; inc_c = 1;
    else
        inc_r = 0; inc_c = 1;
    end
  elseif (r == N && mod(c, 2) == 1)
    if(mod(N, 2) == 0)
        inc_r = 0; inc_c = 1;
    else
        inc_r = -1; inc_c = 1;
    end
  elseif (c == N && mod(r, 2) == 0)
    if(mod(N, 2) == 0)
        inc_r = 1; inc_c = 0;
    else
        inc_r = 1; inc_c = -1;
    end
  elseif (c == N && mod(r, 2) == 1)
    if(mod(N, 2) == 0)
        inc_r = 1; inc_c = -1;
    else
        inc_r = 1; inc_c = 0;
    end    

  % for elements at the first row or column
  
  elseif (r == 1 && mod(c, 2) == 1)
    inc_r = 0; inc_c = 1;
  elseif (r == 1 && mod(c, 2) == 0)
    inc_r = 1; inc_c = -1;
  elseif (c == 1 && mod(r, 2) == 0)
    inc_r = 1; inc_c = 0;
  elseif (c == 1 && mod(r, 2) == 1)
    inc_r = -1; inc_c = 1;
  end
  c = c + inc_c; r = r + inc_r;
end

end

⌨️ 快捷键说明

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