1

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

Spektre
  • 49,595
  • 11
  • 110
  • 380
AGP
  • 53
  • 8
  • Without sample images are any CV and DIP question meaningless. Also why not use simple IRC or IR detectors to measure the angle directly instead (possibly due to inaccessibility)? – Spektre Feb 03 '17 at 07:59
  • @Spektre - Hi, I've added a couple of images to specify which angle I mean. I hope this clarifies it. – AGP Feb 03 '17 at 09:18
  • instead of using an imaginary horizontal line you could/should use the "pole" of that wind turbine as reference, or isn't that possible? – Micka Feb 03 '17 at 13:22
  • @AnjanaGPillai I had in mind your real images obtained from camera so we can see what noise and other properties of the image you got at hand. The measuring code will depend on it ... – Spektre Feb 03 '17 at 15:49

1 Answers1

1

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.
Jeru Luke
  • 20,118
  • 13
  • 80
  • 87
00zetti
  • 114
  • 8
  • Thanks a lot, I'll definitely try this out. Would you mind terribly if I get back to you after implementing this? I still haven't started working yet, but will soon. Thanks again! – AGP Feb 03 '17 at 09:22
  • Also, where exactly will the horizontal line vector (1,0) be in the image? I cannot understand that. – AGP Feb 03 '17 at 09:28
  • The horizontal line is not a line - it's a vector. Since you need the angle, it doesn't matter where it's in your image, but how the "line" and the blade are aligned to each other. E.g imagin two lines in an image intersecting each other, now move that lines into any other location in the image, but keep the relative positions to each other - the angles remain the same. That's how vectors will work - the length of the line is not important, not even the location of the line is important, but the direction they are laying in the plane. – 00zetti Feb 03 '17 at 10:00
  • Thanks a lot for the explanation, I was still thinking of drawing a line quite literally. :) – AGP Feb 03 '17 at 10:09
  • So instead of 'houghlines' I can use 'houghlinesp' here since there are parameters to restrict the length of the line. This will also return the start and end points of the lines detected if I'm not wrong. And then you mean to use 'arccos(x . y / |x||y|)', to detect the angle right?[However, I cannot find any documentation of this function] Will the following code also give me the angle with respect to a horizontal? - float angle = atan2(p1.y - p2.y, p1.x - p2.x); I am not sure how to obtain the vector from the points here, can you give me an example of using arcos? – AGP Feb 06 '17 at 04:33
  • Hi, it's a c++ feature, you will not find it in opencv (afaik). [std::acos](http://en.cppreference.com/w/cpp/numeric/math/acos) You'll find the dot product in the `cv::Mat` documentation [cv::Mat](http://docs.opencv.org/2.4.10/modules/core/doc/basic_structures.html#matrix-expressions) You need something like this: `acos(vec1.dot(cv::Vec3d(1,0)))` – 00zetti Feb 07 '17 at 09:21
  • Since I can't edit my comments... it should be `Vec2d` – 00zetti Feb 07 '17 at 09:33
  • Hi, so i used atan2 for finding the angle with respect to the horizontal. But, I ma getting some weird results. Here is the image with angles- https://postimg.org/image/3yd9sixl7/ and here is the image with lines found - https://postimg.org/image/ytugjo51n/ Do you know how the angle works? – AGP Feb 21 '17 at 05:54
  • Point p1, p2; p1 = Point(l[0], l[1]); p2 = Point(l[2], l[3]); //calculate angle in radian, if you need it in degrees just do angle * 180 / PI int degAngle = (atan2(p1.y - p2.y, p1.x - p2.x)) * (180 / 3.14159265358979323846); This is the code I used to find the angle after HoughLinesP. – AGP Feb 21 '17 at 06:19
  • Sry for the late response, I am very busy due to my bachelor's thesis. It's in the nature of the tangens function, so there are positiv angles if your endpoint is above your startpoint, otherwise you have negative angles. If you want to obtain a unified angle, you need to add 360 degrees to the negative ones. – 00zetti Mar 11 '17 at 17:48
  • Hi, thank you very much :) You are right, I was getting weird angles because I did not know which were starting points and which were ending point and where the x-axis was considered. Instead, I found the hub (using hough circles), and the center, drew a horizontal line through the center and found the angle with respect to this line. It gave me a more meaningful output.Good luck for your theses! – AGP Mar 13 '17 at 04:29