Search code examples
c++opencvimage-processingrotationangle

How to find angle formed by the blades of a wind turbine with respect to a horizontal imaginary axis?


An ideal Wind Energy Farm will have all the turbines rotating with the same Blade Angle*, in a similar fashion. The blades of different turbines spin at variable speeds. As a result of this, the Blade Angle for every Wind Turbine is different. Considering a case of 4 Wind Turbines, each placed a 100 meter apart and forming a Blade Angle of ө1, ө2, ө3 and ө4, we can use OpenCV to monitor the Blade angles of each turbine by using suitable computer vision algorithms and by taking into account the distance, location and other such factors of the WebCam used to monitor the same. The idea is to get an accurate value of the Blade Angles formed.

*Blade Angle(here)- the angle formed between the first blade and an imaginary horizontal axis, measured in an anti-clockwise direction.

I hope this provides clarity.

In OpenCV, I have the following methodology planned- 

Get image/ frame- use canny edge detection- use Hough lines transform to find lines-recognise blade lines-find blade angles- go to next frame.

My problem here is- I don't know how to recognize only the blade lines after finding Hough lines. I know probabilistic Hough lines will return 'lines', that is, the end points of all lines detected. But then how do I know which lines belong to the blades? Another problem I face is how exactly I should make an imaginary horizontal line through the hub to measure the blade angle.

Another approach- Basically what I want is to synchronize the rotation and finding blade angle for this purpose. Another way to do this can be- Use background subtraction, find and draw contours of all the 4 turbines. Consider one turbine as the reference. Compare the contours of all the other turbines found with the reference one and find the difference in angles of each blade. But how do I compare and find the different angles between them? Any code snippet will be helpful.

Do you have any thoughts on this? I am a complete beginner in using openCV and would appreciate any help. Thanks a lot.

Edit: A crude reference to the angle in concern ө1 is the Blade Angle here:

img

Another reference to the angle, considering the line does not go through the blades:

img


Solution

  • Here is the process flow I had in mind:

    1. Since your camera is static, you can define regions to crop(submatrix) and detect edges only in this regions to apply the Houghtransform.
    2. Since you know the exact length of the blades (due to static camera), you can constraint the Houghlines to the length of the blades.
    3. After obtaining the Houghlines, you need to get the average Line between two (nearly parallel) lines (I think the blade edges are not parallel, so they are thicker in the base and become thinner in the tip) - to obtain the exact center line of a blade.
    4. Afterwards you can obtain a vector of the blade, by (endPoint - startPoint).
    5. Now you just need to compute arcos of the dot product from the vector and a horizontal line vector (1,0) - this is your angle between the blade and the horizontal line.