CNN use convolutions to perform many tasks. In some architecture, the first layer(s) are basic filters such as Gabor's. Many CNN work by stacking a number of convolution layers to build detectors which are more and more complex.
Now, it's clear that filters are typically learned and that, at a given depth, usually fully connected layers are used to "match" patterns that are coming out of convolutions with classes/probabilities/logits that are required as network output.
But I am wondering, and I don't know anything on this topic so I am sorry if I don't provide any resource, is it possible (and how) to manually craft convolution layers so that one can detect some specific patterns without needing to train a neural network?
For example, given the task to identify triangles (or even lines) in an image, can we manually assemble a non-machine-learning algorithm that uses stacked convolutions to detect and describe the triangles in the image (e.g. by finding it's corners)?
For example, by synthesizing filters that are known to have a certain property holding for a certain family of patterns and therefore we can infer that the result will be of some kind.