python - 去除行车线中的阴影

标签 python opencv image-processing background-subtraction shadow-removal

我正在研究车道线检测。我当前的工作策略是:

  • 定义车道线可能为
  • 的感兴趣区域
  • 变形图像以获得鸟瞰图
  • 将图像转换为YUV颜色空间
  • 标准化Y通道
  • 拟合二阶多项式和滑动窗口方法

  • 一切正常,但是在有阴影的地方算法不起作用。
    我尝试了自适应阈值,otssu阈值,但未成功。

    没有阴影的源图像:
    enter image description here

    已处理的无阴影源图像:

    enter image description here

    带阴影的源图像:

    enter image description here

    带阴影的已处理源图像:

    enter image description here

    在第二张图像中,可以看出未检测到阴影区域。实际上阴影会降低图像的值,因此我尝试使用低于上一张新图像的新值来对图像进行阈值处理:

    enter image description here

    此技术不起作用,因为它会带来很多噪音

    目前,我正在尝试背景减法和阴影去除技术,但是它不起作用。最近2到3周,我对这个问题感到震惊。
    任何帮助将不胜感激...
    import cv2
    import matplotlib.pyplot as plt
    import numpy as np 
    from helper_functions import undistort, threshholding, unwarp,sliding_window_polyfit
    from helper_functions import polyfit_using_prev_fit,calc_curv_rad_and_center_dist
    from Lane_Lines_Finding import RoI
    img = cv2.imread('./test_images/new_test.jpg')
    new =undistort(img)
    new = cv2.cvtColor(new, cv2.COLOR_RGB2BGR)
    #new = threshholding(new)
    h,w = new.shape[:2]
    # define source and destination points for transform
    imshape = img.shape
    vertices = np.array([[
                          (257,670),
                          (590, 446),
                          (722, 440),
                          (1150,650)
                          ]], 
                          dtype=np.int32)  
    p1 = (170,670)
    p2 = (472, 475)
    p3 = (745, 466)
    p4 = (1050,650)
    
    vertices = np.array([[p1,
                          p2,
                          p3,
                          p4
                          ]], 
                          dtype=np.int32)  
    masked_edges = RoI(new, vertices)
    #masked_edges = cv2.cvtColor(masked_edges, cv2.COLOR_RGB2BGR)
    
    
    src = np.float32([(575,464),
                      (707,464), 
                      (258,682), 
                      (1049,682)])
    dst = np.float32([(450,0),
                      (w-450,0),
                      (450,h),
                      (w-450,h)])
    warp_img, M, Minv = unwarp(masked_edges, src, dst)
    warp_img = increase_brightness_img(warp_img)
    warp_img = contrast_img(warp_img)
    YUV = cv2.cvtColor(warp_img, cv2.COLOR_RGB2YUV)
    Y,U,V = cv2.split(YUV)
    Y_equalized= cv2.equalizeHist(Y)
    YUV = cv2.merge((Y,U,V))
    thresh_min = 253
    thresh_max = 255
    binary = np.zeros_like(Y)
    binary[(Y_equalized>= thresh_min) & (Y_equalized <= thresh_max)] = 1
    
    kernel_opening= np.ones((3,3),np.uint8)
    opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel_opening)
    kernel= np.ones((7,7),np.uint8)
    dilation = cv2.dilate(opening,kernel,iterations = 3)
    

    最佳答案

    在图像处理中,去除阴影并非易事,您可以尝试多种方法。但是请检查本文的第3节http://lxu.me/mypapers/XuL_ShadowRemoval.pdf。看来他们有一个不错的算法,并且编写简洁。

    关于python - 去除行车线中的阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660588/

    相关文章:

    Python 2.7 Cx_Freeze : ImportError: No module named __startup__

    python - 我有一个客户端代码和一个 python 中的服务器代码。服务器启动但客户端找不到

    c++ - 形状检测 - 使用 OpenCV 进行轮廓逼近

    c# - C# 中的 Hough Circle,动态内存

    产生更多结果的 Python 生成器需要更多时间来创建

    python - 如何按未排序的列表对数据框进行分组?

    opencv - OpenCV for Mac 是否使用 Accelerate 框架?

    c# - Emgu OpenCV : Apply different Threshold values depending on text form[sharp/bold]

    python - OpenCV和Python:对象跟踪并将被跟踪的对象保存为图像

    matlab - matlab中循环中矩阵子集的平均值