Мне нужно будет определить дорожную полосу из видео. Вот мой способ сделать это.
- Определите область интереса (ROI), нарезая изображение (сфокусируйте среднюю часть)
- Оттенки шкалы ROI
- Уравнили рендеринг рендеринга с сечением
cv2.equalizeHist
- Применить гауссовское размытие к (3)
- Порог (4) с помощью
cv2.adaptiveThreshold
- Скелетонизировать (5) с помощью
skimage.morphology.skeletonize
- Примените
cv2.HoughLines
к (6)
Для cv2.HoughLines
, я настроен так, чтобы:
- Если
rho
положительно (это означает, что прямая линия наклонена вправо (снизу вверх), она будет рисовать линию только в том случае, если она находится под определенными углами (я устанавливаю диапазон угла)) - Если
rho
отрицательно (прямая линия наклонена влево (снизу вверх), она будет рисовать линию только в том случае, если она находится под определенными углами)
Это мой код для рисования строк:
lines = cv2.HoughLines(image_bin, 1, np.pi/180, 50)
try:
range = lines.shape[0]
except AttributeError:
range = 0
for i in xrange(range):
for rho, theta in lines[i]:
if rho > 0 and (np.pi*1/10 < theta < np.pi*4/10):
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(roi, (x1, y1), (x2, y2), (0, 255, 0))
if rho < 0 and (np.pi*7/10 < theta < np.pi*9/10):
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(roi, (x1, y1), (x2, y2), (0, 255, 0))
Если я не сделал то, что я только что сделал для функции cv2.HoughLines
, я считаю, что будет сделано много ненужных строк.
После настройки параметров и т.д., я получил неплохой результат, но это всего лишь одно изображение. Я не думаю, что это будет хорошо для видео, которое будет меняться. Больше всего меня беспокоит мой алгоритм для рисования необходимых линий (это дорожная полоса). Есть ли лучший способ? По крайней мере, лучше, чем у меня.
Это мой результат:
Уравниваемая гистограмма, пороговое и скелетонизированное изображение ROI: