问题标签 [edge-detection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4879 浏览

graphics - 从多边形网格中寻找唯一边的算法

我正在寻找一种好的算法,它可以从一组多边形数据中为我提供独特的边缘。在这种情况下,多边形由两个数组定义。一个数组是每个多边形的点数,另一个数组是顶点索引列表。

我有一个正在运行的版本,但是当达到超过 500,000 个多边形时性能会变慢。我的版本遍历每个面并将每个边的排序顶点添加到 stl::set。我的数据集将主要是三角形和四边形,并且大多数边将被共享。

有没有更聪明的算法呢?

0 投票
3 回答
10184 浏览

math - 实现脊检测

我正在尝试编写一个脊检测算法,我发现的所有来源似乎都将边缘检测与脊检测混为一谈。现在,我已经实现了 Canny 边缘检测算法,但这不是我想要的:例如,给定图像中的一条线,它会有效地将其转换为双线边缘(因为它会记录两边该行)-我只想让它读取一行。

wikipedia article about ridge detection 有一堆数学,但这对我作为程序员没有帮助(不是我不喜欢数学,但这不是我的领域,我不明白如何翻译他们的微分方程成代码)。是否有一个很好的资源来实际实现这一点?或者,就此而言,是否有一个好的开源实现?

编辑:这是一个简单的例子。我们从一个简单的行开始:

http://img24.imageshack.us/img24/8112/linez.th.png

并运行 Canny 算法得到:

http://img12.imageshack.us/img12/1317/canny.th.png

(你可以看到这里比较粗——如果你点击图片,你会看到它确实是两条相邻的线,中间有一个空白)

另外,我正在用 C++ 编写,但这并不重要。但我想对算法进行编码,而不仅仅是编写SomePackage::findRidges()并完成它。

0 投票
1 回答
2741 浏览

r - 如何在 R 树状图中正确着色边缘或绘制矩形?

我使用 R和函数生成了这个树状图。hclust()as.dendrogram()plot.dendrogram()

我使用这个dendrapply()函数和一个局部函数来给树叶上色,效果很好。

我有一个统计测试的结果,表明一组节点(例如树右下角的“ _+v\_stat5a\_01_”和“ ”簇)是否重要或重要。_+v\_stat5b\_01_

我还有一个可以使用的本地函数,它可以dendrapply()在我的树状图中找到包含重要叶子的确切节点。

我想(按照示例):

  1. 为连接“ _+v\_stat5a\_01_”和“ _+v\_stat5b\_01_”的边缘着色;或者,
  2. 在“ ”和“ ”rect()周围画一个_+v\_stat5a\_01__+v\_stat5b\_01_

我有以下本地函数(“nodes-in-leafList-match-nodes-in-clusterList”条件的细节并不重要,但它突出了重要的节点):

在此if块中,我尝试调用dendrapply(n, markEdges),但这不起作用:

_+v\_stat5a\_01_在我的理想示例中,连接“ ”和“ ”的边缘_+v\_stat5b\_01_将是红色的虚线。

我也试过rect.hclust()在这个if块中使用:

但结果不适用于水平树状图(带有水平标签的树状图)。这是一个示例(请注意右下角的红色条纹)。生成的东西的尺寸不正确rect.hclust(),我不知道它是如何工作的,以便能够编写我自己的版本。

我很感激任何关于获得edgeParrect.hclust()正常工作的建议,或者能够编写我自己的rect.hclust()等价物。

更新

自从问了这个问题后,我getAnywhere(rect.hclust())就得到了计算参数和绘制rect对象的功能代码。我编写了这个函数的自定义版本来处理水平和垂直叶子,并用dendrapply().

但是,有某种剪裁效果会删除部分rect. 对于水平叶子(绘制在树右侧的叶子),最右边的边缘rect要么消失,要么比 . 的其他三个边的边框宽度更薄rect。对于垂直叶子(在树底部绘制的叶子),最底部的边缘会rect遇到相同的显示问题。

作为标记重要簇的一种方法,我所做的是减小宽度,rect以便在簇边缘的尖端和(水平)叶子标签之间呈现垂直的红色条纹。

这消除了裁剪问题,但引入了另一个问题,即簇边缘尖端和叶子标签之间的空间只有六个左右像素宽,我对此没有太多控制权。这限制了垂直条纹的宽度。

更糟糕的问题是,x标记垂直条纹在两个元素之间的位置的坐标将根据较大树的宽度(par["usr"])而变化,而这又取决于树层次结构的最终结构。

我写了一个“更正”,或者更确切地说,一个 hack 来调整这个x值和rect水平树的宽度。它并不总是始终如一地工作,但对于我正在制作的树木,它似乎不会太靠近(或重叠)边缘和标签。

最终,一个更好的解决办法是找出如何绘制,rect这样就没有剪裁了。或者一种一致的方法来计算x任何给定树的树边缘和标签之间的特定位置,以便正确地居中和调整条带的大小。

我也会对用颜色或线条样式注释边缘的方法非常感兴趣。

0 投票
1 回答
3645 浏览

image - Opencv边缘提取

我有一张图像,我想创建一个边缘直方图。我将图像分成 1100 个图像块,并尝试在每个块中找到边缘及其方向(水平、垂直、45° 对角线、135° 对角线或非定向)。

如何提取有关边缘的信息?你有什么想法?

问候!

0 投票
10 回答
28810 浏览

c# - 在 C# 中检测相机图像中的对象

我有一张从实时网络摄像头拍摄的图像,我希望能够检测到图像中的特定对象并提取该部分以进行进一步处理。

具体来说,图像将是一个游戏板,假设为了这个问题的目的,它是一个数独游戏板。

我最初的方法是寻找对比区域并从那里解决,但我似乎最终有很多潜在的边缘(很多错误)并且没有真正的线索来确定哪些是我真正想要的!

是否有任何算法、库、代码示例,甚至只是一些聪明的想法,关于我将如何查找和提取图像的相关部分?

0 投票
4 回答
4637 浏览

algorithm - 开始学习边缘检测/图像识别的最佳文章

我参与了一个个人项目,该项目需要非常广泛的边缘检测和图像分割/对象识别知识。

我知道在编写代码之前计划/理解的重要性,考虑到这一点,了解这些计算领域的最佳起点是什么?我理想地寻找在线文章/论文。

谢谢

0 投票
3 回答
4861 浏览

c++ - C 语言中的 Canny 边缘检测器

我正在寻找有关 Canny 边缘检测 -维基百科条目- 中实现的算法如何工作的一些说明。使用 2D 高斯滤波器执行降噪似乎很简单,但我听说使用两个 1D 滤波器 - 这是如何实现的?计算梯度和边缘方向也很简单。但是,在执行非最大抑制时,是否有一个巧妙的技巧来获得圆角?我目前正在做的是将边缘方向(theta)值除以 pi/4,将其转换为整数并使用 switch 语句。但是,如何处理负 theta 值 - 即 -pi/4 应该以与 3*pi/4 或 pi/4 相同的方式处理吗?

非常感谢任何建议/链接!

谢谢,本

0 投票
3 回答
695 浏览

directx - 给定世界空间中的法线贴图,找到边缘的合适算法是什么?

如果我将正常场景的顶点法线显示为世界空间中纹理中的颜色,是否有一种方法可以有效地计算边缘,或者在数学上是不可能的?我知道如果您在视图空间中有法线,则可以计算边缘,但我不确定如果您在世界空间中有法线,是否可以这样做(我一直试图找出过去的方法小时..)

我将 DirectX 与 HLSL 一起使用。

0 投票
2 回答
1724 浏览

algorithm - 关于沉卡斯坦算法的资源

我已经开始了一些关于图像中文本检测的简单项目。解决这个问题的步骤之一是边缘检测器的实现。我想实现 Shen Castan,因为它可以在噪声图像上提供更好的结果。问题是我在任何地方都找不到有关此算法的有用资源。有谁知道Shan Castan是如何工作的?或者有一些关于这个的文章?

提前致谢

0 投票
1 回答
3136 浏览

c++ - cvCanny 和浮点 32 位 (IPL_DEPTH_32F) 问题

我对OpenCVcvCanny(...)和它可以处理的 Image 数据类型有一些问题。好吧,也许你们/女孩知道一个解决方案。

我有一个 32 位浮点图像,我想对其执行 cvCanny。问题是 cvCanny 只能处理“IPL_DEPTH_8S”或 U(有符号/无符号短),或者至少这是我怀疑的。OpenCV 手册没有说明它可以处理多少,并且 cv/cvcanny.cpp 中的这一行并没有引起我的希望:

我拥有的图像是灰度/单通道 float32 位,图像中的值介于 0.0 和 16.0 之间。将我的 float32 转换为 unsigned short 并没有多大帮助,因为这些值会失去它们的精度,而且我会错过 OpenCV 精明的边缘。

你们/女孩碰巧知道我的问题的解决方案吗?(除了使用ITK :) )