i am unable to zigzag scan image

6 visualizaciones (últimos 30 días)
juveria fatima
juveria fatima el 28 de Mzo. de 2018
Comentada: juveria fatima el 31 de Mzo. de 2018
  6 comentarios
Walter Roberson
Walter Roberson el 31 de Mzo. de 2018
Why are you reshaping Red into a 3D array? Why are you reshaping it at all? Why not just ZigZagscan(red) ?
juveria fatima
juveria fatima el 31 de Mzo. de 2018
thank you very much, it worked.

Iniciar sesión para comentar.

Respuestas (1)

Guillaume
Guillaume el 28 de Mzo. de 2018
Editada: Guillaume el 28 de Mzo. de 2018
You cannot copy the body of a function into your code and expect it to work like a script. The function needs to be in its own m-file which you call from your script. Hence your script should only be:
X=imread('lena1.jpg');
imshow(X);
v = ZigZagScan(X);
Saying that, this ZigZagScan function is not particularly well written and assumes the input is a square matrix.
Below, a simpler code. Note this is also a function, so you'll have to put it into its own m-file named antizigzag.m
function v = antizigzag(X)
%author: G. de Sercey, University of Brighton
%BSD license
%input: X a 2D matrix, not necessarily square
%output: v a row vector of the anti-diagonals of the matrix scanned in a zigzag fashion
validateattributes(X, {'numeric'}, {'2d'});
X = fliplr(X); %flip X so the anti-diagonals become diagonals
v = arrayfun(@(d) diag(X, d), size(X, 2)-1:-1:1-size(X, 1), 'UniformOutput', false); %get the diagonals
v(1:2:end) = cellfun(@flip, v(1:2:end), 'UniformOutput', false); %flip odd diagonals
v = vertcat(v{:}).'; %concatenate the whole lot in a row vector
end
  7 comentarios
Walter Roberson
Walter Roberson el 30 de Mzo. de 2018
jpeg images are 3 dimensional more than 99.9% of the time. You cannot apply zigzag or anti-zigzag routines to them as a whole: you can only apply it to one channel at a time, or else reshape the whole thing as if it were 2D and process the reshaped version. Or convert to grayscale and work with that.
juveria fatima
juveria fatima el 30 de Mzo. de 2018
as u said to apply on one channel i tried
am getting this error
Error in ZigZagscan (line 41)
Vect=zeros(1,N*N);
Error in zz (line 7)
Vect= ZigZagscan(X);
this way am applying one channel to zigzag scan
A= imread('lena1.jpg');
Red = A(:,:,1);
X = reshape(uint8(Red), [1 size(Red)]);
Vect= ZigZagscan(X);
i am unable to find the error please help me out
this is working very fine if i input this
X=[1 2 3
4 5 6
7 8 9]

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by