Finding Lane Lines on the Road
The goals / steps of this project are the following:
- Make a pipeline that finds lane lines on the road
- Reflect on your work in a written report
Reflection
1. Describe your pipeline. As part of the description, explain how you modified the draw_lines() function.
My pipeline consisted of 5 steps. First, I got a image-copy and converted the images to grayscale:
Then I used gauss blur to reduce the noise point
At first ,the kernel size I’v been used was 5,but there was still have some noise point so I turned it to 7.
The next step is to get the region of interest I used function as blew
Then I use houg_lines function to find lines , and combine two image together.
In order to draw segmented or solid line I change the hough_lines function , adding a parameter flag like the code blew. When the flag eques 1 , the function use the draw_lines2() which is I modified the draw_lines().
In the draw_lines2() function ,I use slope to distinguish between left and right. If the slope was greater than 0.5 it might be the right line. And if it less than -0.5 I consider it belongs to left. The slope in the [-0.5,0.5] , for example slope == 0, are wrong numbers .
Knowing slope and bias can I calculate x for any y that I know, and with the two point which are at the beginning and the end of the line I can draw a single line segment. So , at first, the average of slope and bias was used . but in some frame it might not work well . The other problem is the line shook in the videos. Then I use the np.ployfit() to find the slope and bias in draw_lines2 function.
It works well in the single frame ,but it still shook as if they were been struck by an earthquake! I’m very upset…….T^T
But life goes on.
Finally I got two ideas. I write them in function find_top_and bottom_point()
In this function I use two ways to make the bias and slope robust. One way is using two global queues with max-length of 5 to save the past 4 frames‘ bias and slope and bias. The current slope is the average of the past 4 and 1 current frames. The current bias is the same
Other way is to use the old and new slopes combining to generate the slope. The Formula is globlas_slope * 0.4 + slope * 0.6 .The globlas_slope was the one in the previous fram.
globals_slope_r and globlas_bias_r are lists used to record the slope and bias of adjacent 5 frames. globals_slope_l and globals_bias_l are float parameters to use the formula. Both of them work well.
The right was using formula and the left line using the queue. I think using queue is better than using formula . It was more robust.
2. Identify potential shortcomings with your current pipeline
I think there are many shortcomings in my curruet pipeline.
First of all, the worst one is that can not work well with the challenge! There are many noise point in the challenge. So when I use hough_lines() function to find the line it show many short line that are’t the lane line.The solution I will talk in next part.
Another potential shortcoming would be that many parameters were fixed. This will cause the program to fail in many case: the lane Line region changed, the illumination changed ,the road may white also ,there is a car in the font and so on……..
3. Suggest possible improvements to your pipeline
A possible improvement would be to use color_select. In challenge , only few objects were in the white or yellow. If I use it, I think it may reduce many noise points.
I think I can use contours to reduce some miss-finding. The line area size may in an interval of one scense.