All of the contrived examples that I've found of convolution in feature recognition "simplify" the convolution operation by having pixel values of either 1 or -1. It makes for a really simple operation (multiply input pixel by filter pixel, sum results, then divide by number of pixels):

However, it's not really helpful for most images where pixel values will have ranges. E.g. (0.0-1.0), or (0-255).
I can't find an example anywhere of which algorithm to use for these input values. I tried summing the difference for each pixel, then dividing by the number of pixels to get an overall "error". Activation then equals max - error. E.g. 255 - error, or 1.0 - error.
It will never output a negative value though so I don't see the need for a ReLU layer. This makes me suspect it's a naive approach and wouldn't actually work, but I'm not sure why.
So what is the operation used when the input data is something other than 1/-1?
EDIT Here's the example I've been looking at: http://brohrer.github.io/how_convolutional_neural_networks_work.html
And the convolution operation it describes:
To calculate the match of a feature to a patch of the image, simply multiply each pixel in the feature by the value of the corresponding pixel in the image. Then add up the answers and divide by the total number of pixels in the feature. If both pixels are white (a value of 1) then 1 * 1 = 1. If both are black, then (-1) * (-1) = 1. Either way, every matching pixel results in a 1. Similarly, any mismatch is a -1.
A concrete example of why I don't think this works for pixels with a value of [0.0,1.0]. Say we have a 1x1 filter with the value [0.5]. If we run that over an input pixel whose value is 0.5 then we get 0.25.
Similarly, if we're using color ranges of [0,255] then we easily end up with values > 255. Although I'm not sure that matters as it's no longer pixel data; it's activation in a feature map, right?