The Hough transform is probably the best way to detect lines in the image. Let's implement it using neural nets. This approach promises additional benefits because neural nets have useful properties by themselves. Adding them to the already useful method will only improve it. A formal neuron is an elementary voting device so we can apply it as the Hough accumulator. I used the 2-layered perceptron with its synapses preprogrammed so as to perform transformation from the image to the Hough space. That is, each neuron in the 2 layer represents some pair of theta-rho values. Using the same matrix of connections we can pass activity in both directions. If some straight line is presented to the first layer, then 1 definite neuron will be activated in the second. Vice versa, if we activate 1 neuron of the 2 layer, all the pixels of some input line will be highlighted. The simplest 2-layered net works 1:1 as the standard Hough transform.
Here, the left image is a source, the right - the corresponding Hough space with the following coordinates: X - the angle of the line clockwise from X on the image (0 - 180 degrees). Y (downwards) - rho, may be negative. Zero - in the centre.
You can use thresholding or maximum detection so as to determine the most active output neuron and the corresponding line coordinates. The new features begin when we set more complicated goals.
1. Gap filling
On real-world pictures lines are often broken. Some dots may be absent and continuity lost. Neural nets are famous for their ability to correct errors. We can do it in 2 ways. We can use a Convolutional Neural Net. In this case, neurons at the sides of the kernel support one in the centre. If this centre is placed in a small gap, it will be light up from both sides. We can also use a Recurrent Neural Net. If we add positive feedback from the 2 layer to the 1, all the dots of an active line will be enhanced. The disadvantage of CNN is that it will make the line thicker so we can combine both. Recursion will affect not input neurons immediately, but the work of convolution. As a result, only pixels of the same line will enhance each other.
2. Detecting line segments
This is the job of the probabilistic Hough method. The standard Hough can't output coordinates of line ends. Here, if we use RNN, brightness of the line will be boosted relatively to the background and we will be able to cut it off using the simple threshold.
3. Detecting corners
We can even detect corners of 3D rectangular objects. With the common Hough transform it will require rather complicated programming and many lines of code. Here, we only adjust the structure and parameters of the net. The idea is that if we use the aforementioned combination of CNN and RNN, each of 3 lines will be boosted independently and the point where they come together will have triple brightness.
The task of corner detection becomes as simple as finding the maximal intensity.
Copyright (c) I. Volkov, May 29, 2018