algorithm - 如何在绝对灰度图像中而不是在二进制图像中检测直线?

标签 algorithm numpy opencv computer-vision detect

我正在尝试寻找一些方法来检测CT扫描中的线。我发现所有Hough变换家族和其他一些算法都需要处理边缘检测器之后产生的轮廓。我发现轮廓不是我想要的并且这两个步骤造成了很多短线。我对此感到困惑。有位帅哥可以告诉我如何处理吗?有些方法或算法直接用于灰度图像,而不用于二进制图像?使用opencv或numpy是完美的!非常感谢!
下面是测试图片。我正在努力检测左上的直线并过滤掉其他直线。

最佳答案

您的背景非常一致,所以我会:

  • 检测轮廓

    与背景颜色不相邻的任何像素一样。
  • 分割/标记轮廓点以形成有序的“折线”
  • 创建ID缓冲区并设置ID = 0(背景或对象像素)
  • 查找任何尚未处理的轮廓像素
    如果找不到,则停止
  • 用ID
  • 填充ID缓冲区中的轮廓
  • 增量ID
  • 转到2

  • 现在ID缓冲区包含您标记的轮廓
  • 为每个轮廓创建形成轮廓“折线”的像素的有序列表

    为了加快速度,您可以记住#2的每个轮廓起点,甚至可以直接在步骤#2中执行此步骤。
  • 检测轮廓“折线”中的直线。

    即简单的直线在相邻点之间具有相似的倾斜角。您还可以应用回归或其他任何方法...必须在相距至少5个像素的像素上计算斜率或单位方向 vector ,否则光栅化像素化会破坏结果。

  • 看到一些相关的东西:
  • Efficiently calculating a segmented regression on a large dataset
  • Given n points on a 2D plane, find the maximum number of points that lie on the same straight line
  • 关于algorithm - 如何在绝对灰度图像中而不是在二进制图像中检测直线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62060920/

    相关文章:

    utf-8 - 如何就地反转 UTF-8 字符串?

    python - 替换数组中值的最快方法

    python - OpenCV/python:如何使用公式更改图像像素的值?

    c++ - Matlab 到 OpenCV : mask of pixels with value inside a range

    algorithm - 除和或除差的最精确的数值方法是什么?

    javascript - 用于对元素进行分组和计算重复项的高效算法

    python - 无需额外检查即可堆叠 Numpy 数组

    python - numpy 用轴上连续元素的总和有效地替换 2d bool 数组

    opencv - LINUX opencv霍夫变换圆

    algorithm - 寻找四边形内最大的矩形