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]

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 17 Sep. 2013
Bearbeitet: Andrei Bobrov am 17 Sep. 2013

1 Stimme

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';

Weitere Antworten (1)

Teja Muppirala
Teja Muppirala am 17 Sep. 2013

1 Stimme

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by