Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 什么是最快的边缘检测方法?_Algorithm_Performance_Graphics_Image Processing_Edge Detection - Fatal编程技术网

Algorithm 什么是最快的边缘检测方法?

Algorithm 什么是最快的边缘检测方法?,algorithm,performance,graphics,image-processing,edge-detection,Algorithm,Performance,Graphics,Image Processing,Edge Detection,我正在考虑为工业问题实施一个基于图像处理的解决方案 该图像由一个红色矩形组成。在里面我会看到一个圆形矩阵。要求是在以下约束条件下计算圆的数量。(实际应用:数一数瓶子外壳中的瓶子数量。是否有丢失的瓶子??) 手术所需的时间应该很短 我还需要检测红色矩形。我的目标是数一数 包装中的项目,并且没有 触发故障的机构(传感器) 照相机。所以摄像机需要捕捉 照片连续不断,但是 程序应该有一种丢弃的方法 不必要的图像 处理应该是实时的 图像捕获中可能存在“噪声”。您可能会看到椭圆形而不是圆形 我的问题如下:

我正在考虑为工业问题实施一个基于图像处理的解决方案

该图像由一个红色矩形组成。在里面我会看到一个圆形矩阵。要求是在以下约束条件下计算圆的数量。(实际应用:数一数瓶子外壳中的瓶子数量。是否有丢失的瓶子??)

  • 手术所需的时间应该很短
  • 我还需要检测红色矩形。我的目标是数一数 包装中的项目,并且没有 触发故障的机构(传感器) 照相机。所以摄像机需要捕捉 照片连续不断,但是 程序应该有一种丢弃的方法 不必要的图像
  • 处理应该是实时的
  • 图像捕获中可能存在“噪声”。您可能会看到椭圆形而不是圆形
  • 我的问题如下:

  • 与给定图像匹配的最佳边缘检测算法是什么 情景
  • 除了边缘之外,我还可以使用其他机制吗 检测
  • 在我使用的语言和我的表现之间有很大的影响吗 系统
    • 对于圆,请尝试Hough变换
    • 其他机制:不知道
    • 编译语言可能会更快
  • 检测边界的颜色+凸包的总和。你主要需要矩形的四个角,而不是边
  • 没有运动,没有第二个摄像头,一个小小的选择-许多数学方法反对一点输入(颜色直方图,颜色分布矩阵)。不知道
  • java=高内存消耗,Lisp=高脑消耗,C++=内存/CPU /速度/脑利用率最优。 应该对圆形物体有很好的反应-不过它是专利。是一个类似的算法,但我不知道是否有任何现成的实现


    实际上,做更多的研究,是SIFT的一个改进版本,有很多可用的实现,请查看维基百科页面上的链接。

    Surf/SIFT=overkill在这种情况下,您当然不需要它

    如果您想要实时速度(800x600图像上约20fps+),我建议使用来实现边缘检测,使用标准的过滤器方案,如,然后实现二值化+,以确保圆的边缘不被分割

    最难的部分将是拟合圆。这是假设您已经到了提取边缘的步骤,并确保使用图像闭合(形态学)将它们连接起来。此时,我将按照以下步骤进行操作:

  • 运行以分割出不接触的圆。如果圆圈可以触及,下一步将更加棘手
  • 对于每个连接的componet/blob,拟合一个可以实时运行的圆或矩形(与Hough变换相反,我认为Hough变换很难实时运行)
  • 如果您不能将形成圆圈的连接组件分开,那么第2步将更加困难,因此应额外考虑如何保证该条件

    祝你好运

    编辑

    仔细考虑之后,我觉得RANSAC非常适合圆形连接组件接触的情况。假设RANSAC应仅将圆拟合到连接组件的一部分(因为它能够在大部分异常点的情况下表现良好。)这意味着您可以添加一个额外的检查,以查看拟合圆是否包含整个连接部件,如果没有,则在连接部件的遗漏部分重新运行RANSAC。根据需要冲洗并重复多次

    我也意识到我说的是圆,但是你可以很容易地用RANSAC来拟合椭圆而不是圆

    另外,我想说的是,当我说CUDA是一个不错的选择时,我的意思是CUDA是一个很好的选择,可以实现sobel过滤器+双虹膜化+图像关闭。连接的组件和RANSAC可能最好留给CPU,但您可以尝试将它们推到CUDA上,尽管我不知道GPU会给您带来多大的优势

    啊-你现在告诉我们瓶子在固定位置

    这是一个非常简单的问题。

    你所要做的就是看12个斑点中的每一个,看看那里是否有一个黑色区域。没有比这更容易的了

    您根本不必进行任何边缘或形状检测。

    就这么简单

    然后你指出盒子可能会旋转,物体可能会抖动。长方体可能会旋转一点(甚至旋转很多,每次旋转0到360),这一点非常容易处理。瓶子在“槽”中的事实(即使摇动)极大地改变了问题的性质。你的主要问题(这很容易)是等待,直到每个新的红方块(板条箱)在相机下居中。我刚刚意识到,你在最初的问题中的句子中,字面意思是“矩阵”。这完全改变了一切,而不是找到一堆杂乱无章的圆圈。找出一个斑点是否在12个点中的一个点“打开”,与“识别图像中的圆”是完全不同的问题。也许你可以发布一张图片来总结这个问题


    最后,我相信下面的Kenny已经找到了最佳解决方案:blob分析


    “数一数瓶盖中的瓶子数”

    单个瓶子是否位于“插槽”中?即,有4x3=12个孔,每个瓶子一个

    换句话说,你“只”需要确定12个孔中的每个孔中是否有一个瓶子

    对吗

    如果是这样的话,你的问题比“任何地方”一堆瓶子的一般问题要简单得多

    很简单,我们从哪里看到瓶子?顶部、侧面、底部或底部?我们总是看到顶部/底部吗