MATLAB: Conv2 gives opposite sign

convolutionimage processingmatrixmatrix manipulation

Hi, I have a simple matrix I:
I = [1,2,3,4,5;
6,7,8,9,10;
11,12,13,14,15;
16,17,18,19,20;
21,22,23,24,25]
My kernel is:
k = [0,0,0;
1,0,-1;
0,0,0]
I would like to compute for the non-boundary elements. For each element, I want to compute its left neighbour – its right neighbour,i.e.:
dIx = [~,~,~,~,~;
~,6-8,7-9,8-10,~;
~,11-13,12-14,13-15,~;
~,16-18,17-19,18-20,~;
~,~,~,~,~]
I used this line to achieve this:
dIx = conv2(I,k,'valid');
This gives me the result:
dIx = [0,0,0,0;
0,2,2,2;
0,2,2,2;
0,2,2,2]
which is the opposite sign of what I expected. Why is the case?
Thank you very much.

Best Answer

Remember that a convolution does not slide k over I, but rather a pre-flipped version of k. You can compensate for this by doing,
k = [0,0,0;
1,0,-1;
0,0,0]
k=fliplr(flipud(k));
dIx = conv2(I,k,'valid');
although for the kernel you've shown this pre-flip happens to be equivalent to k=-k.