houghlinesp и пороговое значение

Я использую opencv Houghlinesp для обнаружения линий на парковке. Вот исходное изображение

Когда я выполнил преобразование-p, чтобы обнаружить линии, я получил окончательное изображение, подобное этому.

Он обнаружил пустые места. Есть идеи, как можно убрать эти шумные линии на крыше машин? Или любое направление по альтернативным алгоритмам или подходам высоко ценится.

img = cv.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180
edges = cv.Canny(img, 100, 200)
lines = cv.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
 for i in range(len(lines)):
    for line in lines[i]:
        cv.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)

person Balaji    schedule 13.05.2019    source источник


Ответы (1)


Вы можете удалить большую часть шума, установив пороговое значение изображения перед применением обнаружения края. Таким образом, вы удалите (большинство) автомобилей и сохраните интересующие вас пробелы:

import cv2
import numpy as np

img = cv2.imread('Parking-Lot.jpg')
threshold=100
minLineLength = 60
rho=2
maxLineGap=20
theta = np.pi/180

# here you convert the image to grayscale and then threshhold to binary
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,180,255,cv2.THRESH_BINARY)

# continue with the threshholded image instead
edges = cv2.Canny(thresh, 100, 200)
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), minLineLength =minLineLength , maxLineGap=maxLineGap)
for i in range(len(lines)):
  for line in lines[i]:
     cv2.line(img, (line[0],line[1]), (line[2],line[3]), (0,255,0), 2)
cv2.imwrite("lines.jpg", img)

Это даст вам гораздо более чистый результат:

введите здесь описание изображения

Не стесняйтесь экспериментировать с пороговыми параметрами; вам нужно будет найти порог, который исключает большинство автомобилей, сохраняя при этом все линии, которые вы хотите обнаружить.

person T A    schedule 13.05.2019
comment
Большое спасибо! Теперь картинка выглядит лучше. Я буду работать над этим и дам вам знать, как это происходит. - person Balaji; 13.05.2019
comment
Привет, у меня есть еще один вопрос. Машины белого цвета создают шум. Например, внедорожник близко к верхнему левому углу. Можно ли использовать методы предварительной обработки изображений, такие как эрозия? - person Balaji; 13.05.2019
comment
Но этого еще недостаточно для достижения работы, я думаю, что поиск линий - это не способ реализовать функциональность. Следите за автомобилями, которые находятся далеко от зоны покрытия камеры, и за линиями, которые затрудняют правильное определение пустого места. Кроме того, как упомянул @Balaji, белый цвет, вызывающий шум, также является случаем, когда поиск строк невозможен. - person Bahramdun Adil; 13.05.2019
comment
@Balaji Автомобили белого цвета, к сожалению, всегда будут вызывать некоторый шум, и их удаление нетривиально. Эрозия, скорее всего, тоже не сработает, потому что вы уберете линии вместе с автомобилями в бинарном изображении, так как они намного меньше. Если вы хотите, чтобы это было просто, лучшим вариантом будет настройка параметров для получения наилучшего возможного результата. - person T A; 14.05.2019
comment
В противном случае вам нужно будет обнаружить и удалить автомобили на первом этапе с помощью сопоставления шаблонов или подхода к классификации, но это не будет легкой задачей. - person T A; 14.05.2019
comment
@BahramdunAdil К сожалению, нет простого способа обойти это. Иметь шум с аналогичными или такими же свойствами, как у объекта, который вы хотите обнаружить, всегда сложно, и его нельзя удалить без особых усилий, что выходит далеко за рамки вопроса и, возможно, даже того, что OP готов сделать. - person T A; 14.05.2019