What is the difference between an impulse response and a kernel? It seems to me they are two terms used to refer to the same concept, but, according to the Wikipedia page on Guassian filter


  a Gaussian filter is a filter whose impulse response is a Gaussian function


So, what is the difference between an impulse response and a kernel? I am particularly interested in knowing the difference in the context of computer vision and image processing.
The impulse response of an operation is the same as the kernel of that operation, but only if the operation can be represented by a kernel (the operation is linear and translation invariant).

For example, consider the following input (the impulse):

  [[0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0.],
   [0., 0., 1., 0., 0.],
   [0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0.]]


If you give it as input to a laplace filter, you get:

  [[ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  1.,  0.,  0.],
   [ 0.,  1., -4.,  1.,  0.],
   [ 0.,  0.,  1.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]]


This corresponds to the kernel of the laplace filter.

But if you give the same input to a 90 degrees rotation around the centre, you get:

  [[0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0.],
   [0., 0., 1., 0., 0.],
   [0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0.]]


(the same as the input)

Obviously, this is not a 'rotation kernel', it is just the identity. This happens because there is no such thing as a rotation kernel, because rotation operations are not translation independent (besides the trivial case of rotating by 0 degrees). 

If the operation was not linear, the kernel would not match the impulse response either (for example, for a thresholding operation).