如何分割弯曲的道路/车道/路径/轨道/对象等?

2024-05-23 14:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有像下图一样,利用图像处理技术分割检测轨迹的方法

图1:车轮在沙地上的轨迹
enter image description here

图2:要检测的轨迹的一个示例
enter image description here


Tags: 方法利用示例轨迹图像处理技术车轮沙地
1条回答
网友
1楼 · 发布于 2024-05-23 14:22:58

根据我的说法,答案是否定的。首先我去除了照明效果,然后应用Canny来获得图像的特征,只有部分轨迹可见。接下来,我执行彩色分割以获得二进制掩码。然后我用了一个二元遮罩来去除背景,同样,唯一的部分轨迹是可见的


    1. 消除照明效果:为了使轨迹更清晰,我们需要减少图像中的闪电。为了减少,我们将使用^{}平滑图像,然后使用^{}使像素在比例内均匀分布
    • enter image description here

    • # Load the image
      img = cv2.imread("v1uU4.jpg")
      
      # Convert to the gray-scale
      gry = convert_to_grayscale(img)
      
      # Remove the lightning effect
      blr = cv2.GaussianBlur(gry, (125, 125), 0)
      div = cv2.divide(gry, blr, scale=192)
      
    1. 显示图像特征:然后加载非照明图像,将其转换为灰度,应用高斯平滑获得图像特征:
    • enter image description here

    • # Load non-lightning image
      img = cv2.imread("non-lightning.png")
      
      # Convert to the gray-scale
      gry = convert_to_grayscale(img)
      
      # Remove the lightning effect
      blr = cv2.GaussianBlur(gry, (5, 5), 0)
      
      # Find canny features
      cny = cv2.Canny(blr, 50, 200)
      
    • 在这里,您只看到轨迹的左侧部分部分可见。当然,不同的参数会产生不同的结果。如果您愿意尝试,更多不需要的功能将变得更可用


  • 第二种方法

    1. 颜色分割我们将加载非照明图像,转换为HSV颜色空间,并使用^{}查找二值遮罩。然后我们使用二进制掩码使轨迹更加可见
    • enter image description here

    • # Convert to HSV color-space
      hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
      
      # Perform color-segmentation to get the binary mask
      lwr = np.array([0, 0, 0])
      upr = np.array([179, 255, 194])
      msk = cv2.inRange(hsv, lwr, upr)
      
    1. 使用二进制掩码提取轨迹:
    • enter image description here

    • # Extracting the rod using binary-mask
      krn = cv2.getStructuringElement(cv2.MORPH_RECT, (50, 30))
      dlt = cv2.dilate(msk, krn, iterations=5)
      res = 255 - cv2.bitwise_and(dlt, msk)
      

在我看来,不可能删除背景并只显示可见的轨迹

相关问题 更多 >