diagonal pixel differences of image matrix

1 view (last 30 days)
is there any method to get the diagonal pixel differences(left right diagonal) of a image matrix.for example , i have to obtain [-8 -2 -4;4 2 -16;0 2 4] from [2 1 8 24;9 10 3 12;2 5 8 19;1 2 3 4]

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 17 Sep 2013
Edited: Andrei Bobrov on 17 Sep 2013
b = [2 1 8 24;9 10 3 12;2 5 8 19;1 2 3 4];
out = rot90(spdiags(tril(triu(flipud(diff(flipud(spdiags(b,-2:2))))),2)));
other variant without spdiags
s = size(b);
c = ones(s + [0 s(1)-1]);
c1 = rot90(tril(triu(c),s(2)-1));
c1(c1>0) = b';
c2 = diff(c1');
c3 = c2(:,end-1:-1:2);
t = tril(triu(ones(size(c3))),s(2)-2);
c3 = rot90(c3);
out = zeros(s-1)';
out(:) = c3(rot90(t)>0);
out = -out';

More Answers (1)

Teja Muppirala
Teja Muppirala on 17 Sep 2013
b = [2 1 8 24;9 10 3 12;2 5 8 19;1 2 3 4];
conv2(b,[-1 0; 0 1],'valid')
  2 Comments
Andrei Bobrov
Andrei Bobrov on 17 Sep 2013
Hi Teja! +1. I again forgotten about conv.
Teja Muppirala
Teja Muppirala on 17 Sep 2013
Hello Andrei! conv is simpler, but your solution is definitely more creative and interesting.

Sign in to comment.

Categories

Find more on Operating on Diagonal Matrices 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!