【问题标题】:Correlation to distinguish between solid line and dashed line区分实线和虚线的相关性
【发布时间】:2019-10-09 20:47:26
【问题描述】:

想了解自相关是否是区分实线和虚线的好主意。

我得到固定尺寸的图像,由虚线(不同图像中可变频率的间隙)和实线(实线的长度可能不会延伸到整个图像尺寸)组成

首先,我开始收集图像沿其长度的补丁窗口强度,并在浮点的 std::vector 中获得其补丁强度比(每个补丁的总强度/补丁大小 * 255)

考虑使用patch ratio > threshold number作为一种检测形式。但是,如果遇到没有完全延伸到整个图像长度的实线,这将失败。

有人建议使用自相关来检测是否存在满足阈值的多个峰值(希望我做对了)。现在我在这里有几个问题

  1. 这种方法真的可行吗?或者可能有其他指标或方法来区分虚线和实线
  2. 是否有人有代码与 std::vectors 进行自相关?或者可以请我指出一个实现。我正在使用 OpenCV 和 C++

顺便说一句,这是我的图片

虚线

实线

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    一种简单的方法是使用虚线比实线具有更少像素的观察结果。使用此信息,我们可以使用cv2.countNonZero() 来确定非零元素的数量。由于您的图像已经过阈值处理,因此像素较多的图像应为实线,而像素较少的图像应为虚线。

    结果:

    ('虚线', 246)

    ('固体', 1193)

    我的实现是用 Python 实现的,但您可以使用相同的想法轻松地将其转换为 C++

    import cv2
    
    dashed = cv2.imread('dashed.png')
    dashed = cv2.cvtColor(dashed, cv2.COLOR_BGR2GRAY)
    solid = cv2.imread('solid.png')
    solid = cv2.cvtColor(solid, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow('dashed', dashed)
    cv2.imshow('solid', solid)
    
    dashed_pixels = cv2.countNonZero(dashed)
    solid_pixels = cv2.countNonZero(solid)
    
    print('dashed', dashed_pixels)
    print('solid', solid_pixels)
    cv2.waitKey(0)
    

    【讨论】:

    • 感谢您的帮助。可能是一个答案。在某些情况下这可能不起作用...也许我会将其用作要包含在 SVM 中的功能
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多