i am unable to zigzag scan image
Show older comments
i am using this code kindly help me to solve
6 Comments
Walter Roberson
on 28 Mar 2018
Are you getting an error message? If so then please post the complete message.
What is size() of the image you are passing to the routine?
juveria fatima
on 28 Mar 2018
Walter Roberson
on 30 Mar 2018
What error message are you seeing?
juveria fatima
on 31 Mar 2018
Edited: Walter Roberson
on 31 Mar 2018
Walter Roberson
on 31 Mar 2018
Why are you reshaping Red into a 3D array? Why are you reshaping it at all? Why not just ZigZagscan(red) ?
juveria fatima
on 31 Mar 2018
Answers (1)
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 Comments
juveria fatima
on 28 Mar 2018
As I said, I don't think that the code you found is of particularly good quality and I'm certainly not going to debug the mistakes that the author has made. In particular, the code assume that the input is a square matrix so if your input is not square, it will error.
Why don't you use the code I've provided which is much simpler and produces the same result (and works even if the input matrix is not square)?
juveria fatima
on 28 Mar 2018
Guillaume
on 28 Mar 2018
It's right up there ^ in my answer!
Copy/paste the code starting at
function v = antizigzag(X)
%...
into a new file, that you'll name antizigzag.m. You can then call it from your own code
X=imread('lena1.jpg');
imshow(X);
v = antizigzag(X);
juveria fatima
on 30 Mar 2018
Walter Roberson
on 30 Mar 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
on 30 Mar 2018
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!