问题标签 [hough-transform]
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.
computer-vision - 霍夫变换坐标的有效线
我正在使用霍夫变换(极坐标)。我想从霍夫变换的坐标计算直线的矢量表示。
我当前的实现循环遍历图像中从 (0,0) 到 (M, N) 的所有像素坐标,其中 M 和 N 是图像的大小。当循环遍历空间时,计算该值:
// 角度和 rho 是霍夫空间的极坐标。
tmp = (int) ( (i * cos( 角度 ) ) + ( j * sin(角度) ) );
其中 tmp - rho == 0, 是该行的一部分,因此我跟踪该位置。当循环到达图像的末端时(i,j)==(M,N),循环再次从相反的方向(M,N)到(0,0)。
第一个(tmp-rho == 0)从左到右,第二个(tmp-rho == 0)从右到左是线的坐标。然后我减去这些像素坐标以获得霍夫空间中线的向量。
这是非常低效的(慢),我 100% 确定有更好的方法来计算它,但我似乎无法弄清楚。任何帮助将不胜感激!
c - 使用霍夫变换寻找线,还需要跟踪在这些线上找到的点
这并不是真正的 2D 问题,而实际上是 3D 问题的简化。所以这不是一个直接的图像分析问题。
我有一组 2D 点,可用于渲染 3D 表面贴图。我可以将所有点绘制为顶点,但这很浪费,因为其中许多点会形成线条和其他可以更容易渲染的简单形状。我可以使用 Hough 变换和 OpenCV 来找到这些线;但是 OpenCV 函数并没有告诉我我的集合中的哪些点位于这些线上。
我需要知道不在霍夫变换中找到的线上的点的子集,所以我知道将它们渲染为顶点,或者*这样做我知道不渲染它们。
换句话说,如果我不能以某种方式排除我不再需要绘制的顶点,那么找到简化的形状就没有任何好处。
另一个细节:应用程序不断添加可能需要或可能不需要渲染的新点。我想我可以根据需要在整个点集上重新运行霍夫变换(每个渲染帧一次),但这同样是低效的,因为图像不一定会改变那么多。有没有另一种方法来解决这个问题?
python - 如何在 Python 中访问 OpenCV HoughCircles 结果?
我正在为虹膜相关的生物识别技术开发概念验证算法。我希望能够在一系列图像上对其进行测试,但为了做到这一点,我需要知道虹膜边界。按照这里使用的技术,我对图像进行了过滤和智能阈值处理(Otsu 的方法),这让我只剩下瞳孔的黑眼圈。我尝试使用 OpenCV 的HoughCircles
方法,但非 C(++) 文档很少。到目前为止,这是我本节的代码:
最后一行是有问题的行。我关注了在互联网上传播的几篇文章(其中大部分是针对 C/C++ 或 5 岁以上的),并设法想出了那条线。它不返回任何错误。如何访问结果?我是否访问circles
或storage
. 我如何访问它们?我已经尝试过这个问题的建议,但是,正如提问者所说,该cvMat
类型不可迭代,所以它不起作用。编写我自己的 Circular Hough 变换而不是处理这个库的稀疏文档似乎会少一些工作,但我认为我缺少一些简单的东西。
附带说明一下,我如何优化参数以始终在合理的时间内为瞳孔返回拟合圆?
image-processing - 检测圆圈并测量像素
在这张图片中,我需要检测车辆轮辋并通过图像处理测量轮辋的像素长度。我想我应该遵循圆形霍夫变换。你们能告诉我要按照哪些步骤来获得轮辋的宽度吗?ex(灰度->边缘检测,或对此的任何其他评论)
c# - 试图找到一种算法来检测图像中的矩形
目前我已经检测到图像中的边缘,并且我计划使用霍夫变换从边缘中提取线段。一旦我有了这些部分,我就计划找到两个部分交叉的角落。有没有一种算法可以从角落检测矩形?假设我检测到了四个角,是否可以在知道矩形有 4 个直角的情况下获得四个角组成的矩形边的相对长度?
我想这样做的原因是我可以提取矩形绑定的纹理并将其绘制为屏幕上的平面矩形。
编辑:感谢到目前为止的答案,我认为我应该更清楚地解释我的问题,因为我认为我被误解了。我实际上是在尝试将扭曲的矩形转换为扁平矩形。我阅读了一些 aforge 文章并看到了这个功能:链接。我想知道是否可以仅从 4 个角确定矩形边之间的比率?
android - Android OpenCV 绘制霍夫线
我正在尝试在 Android 手机上使用 OpenCV 来检测线路。我修改了'Tutorial 1 Basic - 2. Use OpenCV Camera'示例。我也以霍夫线变换为例。然而,我得到了奇怪的数字(至少我认为是奇怪的数字)。b 在 1000 到 -1000 的范围内。
我不完全理解代码(主要是关于加/减 1000 *(a 或 -b)的部分)。
最后我根本看不到线条。
谁能帮我一把?如果您需要更多信息,请告诉我。
image-processing - 难以找到圆的半径
http://imageshack.us/photo/my-images/189/unledgev.png/
我在找到这个圆的半径时遇到了问题。我将原始图像转换为灰度并执行边缘检测操作。我使用 Aforge.net API 将 circuler Hough 变换应用于此边缘图像。但在应用霍夫变换之前,我需要给出我想要找到的圆半径。问题是我需要找到车轮的圆半径或直径。有人有什么想法吗?
c# - 三维霍夫空间转换
我需要实现检测未知圆半径的三维霍夫空间。我实现了二维霍夫空间。实际上我需要找到图像中圆圈的半径。你们能指出我应该从哪里开始吗?
matlab - 在 MATLAB 中识别相似三角形的方向
我有一个相似三角形的 BW 位图。我试图确定每个三角形所面对的方向。“面对”是指以一种在所有三角形中保持不变的方式来描述方向,例如最长边中线的方向。
到目前为止,我可以单独识别三角形,但我不知道找出每个三角形方向的最佳方法是什么。
作为第一个想法,我考虑使用霍夫变换来拟合每个三角形边的线条。一旦我有了 3 个边,我就可以计算它们的交点,然后我就得到了 3 个顶点的坐标。从 3 个顶点很容易找出最长边的中位数。
我对这种方法的问题是我从未使用过霍夫变换,而且我不知道编写一个找到边并以我可用于计算交点的方式返回它们的函数有多难。您能否将我链接到一些文章或简要解释如何使用 Hough 变换在表示中找到我可以用来计算交叉点的边?
我的另一个想法是直接在位图图像上使用旋转不变矩,而不通过霍夫变换识别它们的侧面。
我对这个解决方案的问题是,当我使用时刻来描述一个方向时,我不知道它的“含义”是什么。如果我使用不变矩,如何定义参考方向?
带有已识别对象的示例图像:
单个对象
algorithm - 圆形霍夫变换改进
我正在研究一种虹膜识别算法,该算法将这些图像处理成唯一的代码,用于识别和认证目的。
在过滤、智能阈值化、然后在图像中找到边缘之后,下一步显然是为瞳孔和虹膜拟合圆圈。我环顾四周使用的技术是圆形霍夫变换。这是我的实现代码。对神秘的变量名称感到抱歉。
这是用 python 编写的,并使用 Python Imaging Library 进行图像处理。如您所见,这是一种非常幼稚的寻找圆圈的蛮力方法。它有效,但需要几分钟。基本思想是在有黑色像素的地方(来自阈值和边缘检测)绘制从 rmin 到 rmax 的圆圈,构建一个累加器数组,该数组包含图像上某个位置被“投票”的次数。x、y 和 r 中得票最多的就是兴趣圈。我试图利用虹膜和瞳孔具有大致相同的中心(变量 ra 和 rb)的事实来降低 r 循环的一些复杂性,但是瞳孔检测需要很长时间,所以这并不重要。
现在,显然我的实现非常幼稚。它使用三维参数空间(x、y 和 r),不幸的是,这使得它运行得比可接受的慢。我可以做哪些改进?有什么办法可以将其简化为二维参数空间?有没有更有效的方法来访问和设置我不知道的像素?
附带说明一下,是否有任何其他技术可以改善我不知道的该算法的整体运行时间?例如近似瞳孔或虹膜最大半径的方法?
注意:我也尝试过为此使用 OpenCV,但我无法将参数调整到足以始终准确的程度。
让我知道您是否需要任何其他信息。
注意:我再一次误解了我自己的代码。它在技术上是 5 维的,但 3 维 x,y,r 循环仅对黑色像素起作用。