Why conv2 gives opposite sign

Illustration
Hazel - 2020-11-02T11:43:13+00:00
Question: Why conv2 gives opposite sign

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?

Expert Answer

Profile picture of Neeta Dsouza Neeta Dsouza answered . 2025-11-20

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.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!