Back in the day, when people wanted to do computer vision, speech recognition, etc., they extracted some features, apply some decision rules and get some output.
These decision rules were quite rigid, so instead of that we apply a classifier (i.e., let the machine decide for us) to get a much better result. This corresponds to what was discussed previously.
However, since 2012 deep learning revolution began. We are not doing feature extraction any more: the machine itself decides and modifies the features automatically. We let the machine do most of the process:

End-to-end learning means that the end goal (output) is used by the machine to learn feature extraction (input).
Network itself can learn meaningful features. The main drawback is that Deep Learning is uninterpretable/black box.
Generally, it requires large datasets (> 10 000), as it involve a lot of hyperparameters:

Neural networks available in Keras. Other frameworks also usually offer many pretrained models.
Suppose you want to get rid of noisy pixels from:

How can we do it? A simple solution would be to replace each pixel by the neighbourhood average (called box filtering). We end up with:

Left input image, right averaged result
We may notice that we have lost 2 pixels to boundary (1 on each side)!
There are various ways to solve this. I.e., add extra pixels on the sides, take smaller neighbourhood average, etc.
Let’s do this averaging more general → We multiply weights variables per pixel and sum: