diagonal pixel differences of image matrix

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]

 Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 17 Sep 2013
Modifié(e) : Andrei Bobrov le 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';

Plus de réponses (1)

Teja Muppirala
Teja Muppirala le 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 commentaires

Andrei Bobrov
Andrei Bobrov le 17 Sep 2013
Hi Teja! +1. I again forgotten about conv.
Teja Muppirala
Teja Muppirala le 17 Sep 2013
Hello Andrei! conv is simpler, but your solution is definitely more creative and interesting.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by