#python #opencv #opencv-python
Вопрос:
Я готовлю набор данных для определения полосы движения, который я буду обучать своей архитектуре UNET. Я скачал набор данных отсюда. Каждый словарь в ground_truth_labels.txt
имеет структуру:
{
"lanes": [
[-2, -2, -2, -2, 632, 625, 617, 609, 601, 594, 586, 578, 570, 563, 555, 547, 539, 532, 524, 516, 508, 501, 493, 485, 477, 469, 462, 454, 446, 438, 431, 423, 415, 407, 400, 392, 384, 376, 369, 361, 353, 345, 338, 330, 322, 314, 307, 299],
[-2, -2, -2, -2, 719, 734, 748, 762, 777, 791, 805, 820, 834, 848, 863, 877, 891, 906, 920, 934, 949, 963, 978, 992, 1006, 1021, 1035, 1049, 1064, 1078, 1092, 1107, 1121, 1135, 1150, 1164, 1178, 1193, 1207, 1221, 1236, 1250, 1265, -2, -2, -2, -2, -2],
[-2, -2, -2, -2, -2, 532, 503, 474, 445, 416, 387, 358, 329, 300, 271, 241, 212, 183, 154, 125, 96, 67, 38, 9, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2],
[-2, -2, -2, 781, 822, 862, 903, 944, 984, 1025, 1066, 1107, 1147, 1188, 1229, 1269, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2]
],
"h_samples": [240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710],
"raw_file": "path_to_clip"
}
Когда я визуализирую полосы движения, вот что я получаю:
lanes = annots["lanes"]
h_samples = annots["h_samples"]
lane_vis = [[(x, y) for (x, y) in zip(lane, h_samples) if x >= 0] for lane in lanes]
img_vis = img.copy()
for lane in lane_vis:
cv2.polylines(img_vis, np.int32([lane]), isClosed=False, color=(255,255,255), thickness=15)
Итак, как я могу убедиться, что визуализирую только 2 основные полосы движения, т. Е. текущую полосу движения (левую и правую), на которой сейчас находится автомобиль, а не другие. Есть ли какой-либо способ выделить и отфильтровать только основные 2 полосы?
Я знаю, что что-то нужно сделать с lanes
ключом, но я не знаю, какой список lanes
соответствует какому, и на каждом изображении полосы отличаются.
Это хранилище, из которого я загрузил этот набор данных.
https://github.com/TuSimple/tusimple-benchmark/tree/master/doc/lane_detection
https://github.com/IrohXu/lanenet-lane-detection-pytorch
Комментарии:
1. если бы вы получили линии в виде функций, вы могли бы вычислить, какая из всех линий ближе всего к вертикальной середине изображения слева и справа. Я не знаю, может ли это не сработать в определенных ситуациях, но вы могли бы попробовать
2. @TheodorPeifer звучит хорошо, я также попробовал другой подход, я подсчитал сумму каждой полосы и получил наибольшие 2 суммы, так что, по моему мнению, 2 наибольшие суммы будут 2 средними полосами, потому что у них будут большие значения пикселей. Это сработало, но, очевидно, оно не срабатывает в определенных ситуациях, когда крайняя левая или крайняя правая полоса более широкая или из-за некоторых искажений.
3. тогда вы могли бы, возможно, объединить обе идеи для большей достоверности
4. другой подход может заключаться в вычислении углов между каждой линией и вертикальной линией. Две линии с наименьшим углом должны быть линиями вашей текущей полосы движения