Я пытался обнаружить изображения рекламных щитов на случайном фоне. Мне удалось локализовать рекламный щит с помощью SSD, это дало мне приблизительную ограничивающую рамку вокруг рекламного щита. Теперь я хочу найти точные углы рекламного щита для своего приложения. Я пробовал использовать разные стратегии, с которыми я столкнулся, такие как определение угла Харриса (с использованием Opencv), поиск пересечений линий с помощью, Canny + морфологические операции + контуры. Подробности о выходе приведены ниже.
Обнаружение угла Харриса. Псевдокод для обнаружения угла Харриса выглядит следующим образом:
img_patch_gray = np.float32(img_patch_gray)
harris_point = cv2.cornerHarris(img_patch_gray,2,3,0.04)
img_patch[harris_point>0.01*harris_point.max()]=[255,0,0]
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(img_patch)
Здесь красные точки - это углы, обнаруженные алгоритмом обнаружения углов Харриса, а точки интереса обведены кружком. в зеленом.
Использование определения линии Хафа. Здесь я пытался найти пересечение линий, а затем выбирал точки. Что-то похожее на ссылку на stackoverflow, но очень сложно получить точные линии, поскольку на рекламных щитах есть текст и графика.
На основе контура. В этом подходе я использовал детектор контуров, за которым следовало расширение (ядро 3 * 3), а затем контур.
bin_img = cv2.Canny(gray_img_patch,100,250)
bin_img = dilate(bin_img, 3)
plt.imshow(bin_img, cmap='gray')
(_,cnts, _) = cv2.findContours(bin_img.copy(),
cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10]
cv2.drawContours(img_patch, [cnts[0]],0, (0,255,0), 1)
,
. Я пробовал использовать функцию октполидп из openCV, но это оказалось не так, как ожидалось, поскольку она также может аппроксимировать большие или меньшие контуры по четырем точкам, а на некоторых изображениях она может не формировать контуры вокруг рамки рекламного щита.
Я использовал openCV 3.4 для всех операций обработки изображений. Используемое можно найти здесь. Обратите внимание, что изображение, обсуждаемое здесь, предназначено только для иллюстрации и может быть любым рекламным щитом. Заранее спасибо, приветствуется любая помощь.