认识航拍图像上的人行横道

时间:2014-01-15 23:47:39

标签: python opencv image-processing classification object-detection

我正试图在航拍图像上找到人行横道的x / y坐标。

例如,在此图片上:

enter image description here

...我想在两条黄色人行横道的中心提取两个节点。

我开始在Python上使用OpenCV。我尝试的第一种方法是隔离图像中的黄色部分。结果并不完美。

enter image description here

由于人行横道的模式非常独特,我认为应该有一种方法可以非常可靠地检测人行横道的存在和坐标。由于我没有太多的图像处理经验,你能用一个小例子给我一些正确方向的指示吗?也许我应该使用FFT,或者创建一个分类器?

以下是我用于上述屏幕截图的代码。

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def nothing(x):
    pass

# Create a window
cv2.namedWindow('image')

# Create trackbars
cv2.createTrackbar('H-', 'image', 16, 180, nothing)
cv2.createTrackbar('H+', 'image', 25, 180, nothing)
cv2.createTrackbar('S-', 'image', 40, 255, nothing)
cv2.createTrackbar('S+', 'image', 150, 255, nothing)
cv2.createTrackbar('V-', 'image', 97, 255, nothing)
cv2.createTrackbar('V+', 'image', 172, 255, nothing)

while 1:
    # Choose image
    img = cv2.cvtColor(cv2.imread('img/1.jpg'), cv2.COLOR_BGR2HSV)

    # Get slider values
    h = cv2.getTrackbarPos('H-', 'image'), cv2.getTrackbarPos('H+', 'image')
    s = cv2.getTrackbarPos('S-', 'image'), cv2.getTrackbarPos('S+', 'image')
    v = cv2.getTrackbarPos('V-', 'image'), cv2.getTrackbarPos('V+', 'image')

    # Thresholds
    lower = np.array([h[0], s[0], v[0]], np.uint8)
    upper = np.array([h[1], s[1], v[1]], np.uint8)

    # Calculate mask using thresholds
    mask = cv2.inRange(img, lower, upper)

    # Combine original image and mask
    h, w = img.shape[:2]
    vis = np.zeros((h, w * 2), np.uint8)
    vis = cv2.cvtColor(vis, cv2.COLOR_GRAY2BGR)
    vis[:h, :w] = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
    vis[:h, w:w * 2] = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)

    # Show image
    cv2.imshow('image', vis)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:  # ESC
        break

cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:4)

这不是一个简单的分割任务,因为有多个方向,复杂背景和其他具有相似颜色分布的对象。正如评论中所提到的Haar features对此模式非常具有描述性。 Road feature detection and estimation Stephen Se和Michael Brady讨论了人行横道边缘是有趣的特征,它们通常是具有周期性间隔的直线。可以使用霍夫变换来累积线,然后使用斜率变量过滤线以查找目标模式。关于城市文物检测的这个Masters Thesis - Stefania Pedrazzi谈到了同样的特征:人行横道条纹的主要特性,也称为斑马条纹,是两极的,即 明暗区域的交替。双极性导致高梯度值 条纹的边缘。因此,计算梯度和提取线将提供 一个很好的起点。然后,它将仅保持行和列的迭代 通过图像,检查连续线的几何结构。 虽然这是针对侧面视点,但人们仍然可以使用几何特征。