What "weighted average of the neighbours" really means
Interpolation kernels
Upscaling is reconstruction: you have samples at whole positions and you need values in between. Every method is just a different kernel — a shape that says how much each nearby sample counts. Drag the dots to change the data, and watch where each method's curve goes.
Slide the kernel over the samples, multiply, add up. Nearest is a box one sample wide; linear is a triangle two wide; cubic spans four and — crucially — dips below zero on either side. Those negative lobes subtract a little of the more distant neighbours, which sharpens the result and is also the sole cause of the overshoot above.
At a = 0 the negative lobes vanish and the cubic becomes a smooth, blurry curve that never overshoots. At a = −0.75 it is at its sharpest and rings the most. Every image library ships one of these two, and the choice is exactly this trade.
In two dimensions the kernel is applied once horizontally and once vertically — which is why bilinear touches 2×2 = 4 samples and bicubic 4×4 = 16, exactly as the notes state. Push the factor to 16× on the sign scene and look along the high-contrast edges: the pale halo just outside a dark stroke is the negative lobe doing its work.
Nearest is a box. One sample gets weight 1, everything else gets 0, so the output can only ever contain colours that were actually measured. That is a real virtue — it is why pixel art and indexed-colour images must be scaled this way — and the price is that the reconstruction is a staircase.
Linear is a triangle. The weight falls off evenly to zero one sample away. The result is continuous and can never overshoot, because every output is an average of two values with non-negative weights. Averages of things are always between those things. It is also, for exactly that reason, soft: an average of a dark and a light sample is grey, so every edge gets a grey ramp across it.
Cubic goes negative, deliberately. By subtracting a fraction of the two outer samples it counteracts that smoothing and keeps edges crisp. But a weighted sum with a negative weight is no longer an average, so the result is no longer confined between the samples — set a step edge above and watch the blue curve dip below the bottom sample just before it climbs. That undershoot is ringing, and near a hard edge in a real image it appears as a faint halo.
None of the three adds information. Set the data to a single impulse and each curve simply traces its own kernel: what you are seeing is not detail recovered from the samples, but the shape the method was always going to draw.