If you're a software engineer, have you worked through general graphics color theory? Played around with Photoshop a bit?
Amplification will multiply the input signal. If you have a range problem, where your min/max values are, say, 3 and 22, then amplifying by 20 dB (multiplying by 10) will make your range be 30-220, which may be better suited to the particular ADC you're using. Yes amplification will amplify all parts of the signal, which includes "noise" (the electronics doesn't know what you'd consider "noise" and what you'd consider "signal.")
If what you want to do is get stronger color (less "muddy") then you can more easily compensate in software. Same thing for calibration. If you calibrate black as 10,10,10 and white as 220,220,220 or whatever, using scale-and-offset, then you're good on neutral. If you don't understand how to calculate scale-and-offset (out = in * scale + offset) then work through the match on paper and try it in Photoshop until you get it!
To "intensify" the color reading, you can use this algorithm:
avg = (red + green + blue) / 3;
red = avg + (red - avg) * intensity;
green = avg + (green - avg) * intensity;
blue = avg + (blue - avg) * intensity;
red = clamp(red, MIN_VAL, MAX_VAL);
green = clamp(green, MIN_VAL, MAX_VAL);
blue = clamp(blue, MIN_VAL, MAX_VAL);
This assumes floating point values or other values with a range larger than the [0..255] range of the input values, as intermediate values may go outside this range.