Created
June 18, 2017 03:17
-
-
Save hackintoshrao/fd17a36ef7415fa942db2ac5262c81d4 to your computer and use it in GitHub Desktop.
Code snippet for fitting a polynomial to the lane lines
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Use histogram on both side of the lane to obtain starting | |
| # point for lane line scanning. | |
| midpoint = np.int(histogram.shape[0]/2) | |
| leftx_base = np.argmax(histogram[:midpoint]) | |
| rightx_base = np.argmax(histogram[midpoint:]) + midpoint | |
| out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255 | |
| # Choose the number of sliding windows | |
| nwindows = 9 | |
| # Set height of windows | |
| window_height = np.int(binary_warped.shape[0]/nwindows) | |
| # Identify the x and y positions of all nonzero pixels in the image | |
| nonzero = binary_warped.nonzero() | |
| nonzeroy = np.array(nonzero[0]) | |
| nonzerox = np.array(nonzero[1]) | |
| # Current positions to be updated for each window | |
| leftx_current = leftx_base | |
| rightx_current = rightx_base | |
| # Set the width of the windows +/- margin | |
| margin = 100 | |
| # Set minimum number of pixels found to recenter window | |
| minpix = 50 | |
| # Create empty lists to receive left and right lane pixel indices | |
| left_lane_inds = [] | |
| right_lane_inds = [] | |
| # Step through the windows one by one | |
| for window in range(nwindows): | |
| # Identify window boundaries in x and y (and right and left) | |
| win_y_low = binary_warped.shape[0] - (window+1)*window_height | |
| win_y_high = binary_warped.shape[0] - window*window_height | |
| win_xleft_low = leftx_current - margin | |
| win_xleft_high = leftx_current + margin | |
| win_xright_low = rightx_current - margin | |
| win_xright_high = rightx_current + margin | |
| # Draw the windows on the visualization image | |
| cv2.rectangle(out_img,(win_xleft_low,win_y_low),(win_xleft_high,win_y_high),(0,255,0), 2) | |
| cv2.rectangle(out_img,(win_xright_low,win_y_low),(win_xright_high,win_y_high),(0,255,0), 2) | |
| # Identify the nonzero pixels in x and y within the window | |
| good_left_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & (nonzerox >= win_xleft_low) & (nonzerox < win_xleft_high)).nonzero()[0] | |
| good_right_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & (nonzerox >= win_xright_low) & (nonzerox < win_xright_high)).nonzero()[0] | |
| # Append these indices to the lists | |
| left_lane_inds.append(good_left_inds) | |
| right_lane_inds.append(good_right_inds) | |
| # If you found > minpix pixels, recenter next window on their mean position | |
| if len(good_left_inds) > minpix: | |
| leftx_current = np.int(np.mean(nonzerox[good_left_inds])) | |
| if len(good_right_inds) > minpix: | |
| rightx_current = np.int(np.mean(nonzerox[good_right_inds])) | |
| # Concatenate the arrays of indices. | |
| left_lane_inds = np.concatenate(left_lane_inds) | |
| right_lane_inds = np.concatenate(right_lane_inds) | |
| # Extract left and right line pixel positions | |
| leftx = nonzerox[left_lane_inds] | |
| lefty = nonzeroy[left_lane_inds] | |
| rightx = nonzerox[right_lane_inds] | |
| righty = nonzeroy[right_lane_inds] | |
| # Fit a second order polynomial to each. | |
| left_fit = np.polyfit(lefty, leftx, 2) | |
| right_fit = np.polyfit(righty, rightx, 2) | |
| # generate continuous y coordinates from (0, image-height). | |
| ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] ) | |
| # find x coordinates using the polyfit coefficients. | |
| left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2] | |
| right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2] | |
| # Generate x and y values for plotting | |
| out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255 | |
| window_img = np.zeros_like(out_img) | |
| out_img[nonzeroy[left_lane_inds], nonzerox[left_lane_inds]] = [255, 0, 0] | |
| out_img[nonzeroy[right_lane_inds], nonzerox[right_lane_inds]] = [0, 0, 255] | |
| plt.plot(left_fitx, ploty, color='yellow') | |
| plt.plot(right_fitx, ploty, color='red') | |
| plt.xlim(0, 1280) | |
| plt.ylim(720, 0) | |
| write_name = "polyfit_" + str(idx+1) + ".png" | |
| plt.savefig("./result/polyfit/"+write_name) | |
| plt.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment