标签: hough-transform

Python/SciPy的峰值查找算法

我可以通过查找一阶导数或其他东西的零交叉来自己编写一些东西,但它似乎是一个通用的函数,可以包含在标准库中.谁知道一个?

我的特定应用是2D阵列,但通常它将用于在FFT等中查找峰值.

具体而言,在这些类型的问题中,存在多个强峰,然后是许多较小的"峰值",这些"峰值"仅由应该忽略的噪声引起.这只是例子; 不是我的实际数据:

一维峰值:

带峰值的FFT输出

二维峰值:

具有圆圈峰值的Radon变换输出

峰值寻找算法将找到这些峰值的位置(不仅仅是它们的值),理想情况下会找到真正的样本间峰值,而不仅仅是具有最大值的索引,可能使用二次插值等.

通常,您只关心一些强峰,因此它们要么被选中,要么是因为它们高于某个阈值,要么是因为它们是有序列表的前n个峰值,按振幅排列.

正如我所说,我知道如何自己写这样的东西.我只是问是否有一个已知的功能或包已知可以正常工作.

更新:

翻译了一个MATLAB脚本,它适用于1-D案例,但可能更好.

更新更新:

sixtenbe 为1-D案例创造了更好的版本.

python fft scipy hough-transform

123
推荐指数
6
解决办法
10万
查看次数

检测照片中纸张角落的算法

检测照片中发票/收据/纸张角落的最佳方法是什么?在OCR之前,这将用于后续的透视校正.

我目前的做法是:

RGB>灰色>带阈值的Canny边缘检测>扩张(1)>移除小物体(6)>清除边界物体>根据凸面区域挑选大型博客.> [角落检测 - 未实施]

我不禁想到必须有一种更强大的"智能"/统计方法来处理这种类型的细分.我没有很多训练样例,但我可能会得到100张图像.

更广泛的背景:

我正在使用matlab进行原型设计,并计划在OpenCV和Tesserect-OCR中实现该系统.这是我需要为此特定应用程序解决的许多图像处理问题中的第一个.因此,我希望推出自己的解决方案并重新熟悉图像处理算法.

以下是我想要算法处理的一些示例图像:如果您想接受挑战,那么大图像位于http://madteckhead.com/tmp

案例1 http://madteckhead.com/tmp/IMG_0773_sml.jpg 案例2 http://madteckhead.com/tmp/IMG_0774_sml.jpg 案例3 http://madteckhead.com/tmp/IMG_0775_sml.jpg 案例4 http:/ /madteckhead.com/tmp/IMG_0776_sml.jpg

在最好的情况下,这给出:

案例1 - canny http://madteckhead.com/tmp/IMG_0773_canny.jpg 案例1 - post canny http://madteckhead.com/tmp/IMG_0773_postcanny.jpg 案例1 - 最大的博客http://madteckhead.com/tmp/ IMG_0773_blob.jpg

但是在其他情况下很容易失败:

案例2 - canny http://madteckhead.com/tmp/IMG_0774_canny.jpg 案例2 - post canny http://madteckhead.com/tmp/IMG_0774_postcanny.jpg 案例2 - 最大的博客http://madteckhead.com/tmp/ IMG_0774_blob.jpg

提前感谢所有伟大的想法!我喜欢!

编辑:霍夫变换进展

问:什么算法会聚集霍夫线找到角落?根据答案的建议,我能够使用Hough变换,拾取线条并过滤它们.我目前的做法相当粗糙.我已经假设发票总是小于15度,与图像不对齐.如果是这种情况,我最终得到合理的线条结果(见下文).但我不完全确定一个合适的算法来聚集线(或投票)来推断角落.霍夫线不连续.并且在嘈杂的图像中,可以存在平行线,因此需要与线原点度量的某种形式或距离.有任何想法吗?

案例1 http://madteckhead.com/tmp/IMG_0773_hough.jpg 案例2 http://madteckhead.com/tmp/IMG_0774_hough.jpg 案例3 http://madteckhead.com/tmp/IMG_0775_hough.jpg 案例4 http:/ /madteckhead.com/tmp/IMG_0776_hough.jpg

opencv image-processing edge-detection image-segmentation hough-transform

91
推荐指数
5
解决办法
5万
查看次数

解释霍夫变换

我只是喜欢冒险,迈出了我的第一步,迈向计算机视觉.我试图自己实现霍夫变换,但我只是没有全面了解.我阅读了维基百科条目,甚至是原始的"使用霍夫变换检测图片中的线条和曲线",由理查德·杜达和彼得·哈特,但没有帮助.

有人可以帮助用更友好的语言向我解释吗?

geometry pattern-recognition image-processing computer-vision hough-transform

44
推荐指数
3
解决办法
2万
查看次数

识别图像中的数字

我正在尝试编写一个应用程序来查找图像中的数字并添加它们.

如何识别图像中的书写号码?

在此输入图像描述

我需要在图像中有许多方框来获取左侧的数字并将它们相加以得出总数.我怎样才能做到这一点?

编辑:我在图像上做了一个java tesseract ocr,但我没有得到任何正确的结果.我怎么训练呢?

我做了边缘检测我得到了这个:

在此输入图像描述

java ocr tesseract image-processing hough-transform

33
推荐指数
4
解决办法
6233
查看次数

在opencv中检测半圆

我试图检测图像中的完整圆圈和半圆.在此输入图像描述

我遵循下面提到的过程:过程图像(包括Canny边缘检测)查找轮廓并在空图像上绘制它们,以便我可以消除不需要的组件.(处理后的图像正是我想要的.)使用HoughCircles检测圆圈.这就是我得到的.

在此输入图像描述

我尝试改变HoughCircles中的参数,但结果不一致,因为它根据光线和图像中圆圈的位置而变化.我根据它的大小接受或拒绝一个圆圈.所以结果是不可接受的.此外,我还有一长串"可接受的"圈子,所以我需要在HoughCircle参数中留出一些余量.至于完整的圆圈,很容易 - 我可以简单地找到轮廓的"圆度".问题是半圈!

请在hough变换前找到编辑过的图像在此输入图像描述

geometry opencv hough-transform

28
推荐指数
2
解决办法
3万
查看次数

检测图像中线条的好方法?

我写了一些代码,使用OpenCV库来检测草地上画的白线.我需要某人对我使用的方法的看法(因为我确信有比我更好的方法).此外,我得到的结果不如我预期的好,因为图像中的微小变化需要调整参数(我需要对固定参数进行操作).

到目前为止我的方法:

  1. 从网络摄像头抓取图像(显然变成灰度)
  2. 通过阈值过滤器运行它(使用THRESH_TO_ZERO模式,它将任何像素都归零阈值以下).
  3. 模糊图像
  4. 通过侵蚀过滤器运行它
  5. 通过Canny边缘探测器运行它
  6. 最后,拍摄此处理后的图像并使用概率Hough变换HoughLinesP查找线条

我应该更改过滤器的顺序吗?

PS我不太关心处理能力; 我正在GPU B上运行HoughLinesP-)

另外,这是一个示例图像: 原始图像

我得到的结果:与canny 与canny 没有canny(略微调整参数) 这次没精算

任何帮助或指导将不胜感激!我只是不知道如何改进它!

更新 根据所选答案使用非常快速的骨架实现(使用TONS of blur)后,我得到了: 有用!

opencv image-processing edge-detection feature-detection hough-transform

27
推荐指数
3
解决办法
3万
查看次数

用Hough变换检测矩形

我正在尝试使用Hough变换实现矩形检测,基于 本文.

我使用Matlab编程,但在检测到平行线对和正交对之后,我必须检测这些对的交集.我的问题是关于霍夫空间中两线交叉口的质量.

我通过求解四个方程系统找到了交点.这些交叉点是否位于笛卡尔坐标或极坐标空间中?

image-processing computer-vision hough-transform

26
推荐指数
2
解决办法
3万
查看次数

在HoughLines(opencv)之前Canny有什么用?

我是图像处理的新手,我正在研究文档图像中的线条.我读了霍夫线变换的理论,但我不明白为什么我必须在使用opencv中的函数之前使用Canny,就像在许多教程中说的那样.在这种情况下找到边缘有什么意义?事实是,如果我在HoughLines()之前不使用Canny或阈值,结果将非常混乱.我希望有人能为我解释原因.

我读过的2个教程:

  1. Imgproc特征检测
  2. 霍夫线变换

opencv edge-detection hough-transform

25
推荐指数
3
解决办法
2万
查看次数

使用OpenCV进行水平线检测

我试图找到来自"文档"的图像的水平和垂直线.文档是从合同中扫描的页面,因此这些行看起来就像您在表格或合同块中看到的那样.

我一直在尝试OpenCV来完成这项工作.OpenCV中的Hough变换实现似乎对这项工作很有用,但是我找不到任何能够干净地找到垂直和水平线的参数组合.我尝试了边缘检测和不边缘检测.没运气.如果有人做过类似事情,我有兴趣知道如何做.

在这里看到我在OpenCV中使用HoughP进行实验之前和之后的图像.这是我能做的最好的,http://dl.dropbox.com/u/3787481/Untitled%201.png

所以现在我想知道是否有另一种我可以使用的变换,这将允许我可靠地找到水平和垂直线(并且最好也是虚线).

我知道这个问题是可以解决的,因为我有Nuance和ABBYY OCR工具,它们可以可靠地提取水平和垂直线并返回线条的边界框.

谢谢!帕特里克.

opencv image-processing hough-transform straight-line-detection

22
推荐指数
5
解决办法
5万
查看次数

使用OpenCV和Python检测触摸/重叠的圆/椭圆

我想测量圆的圆度("圆"高度和宽度或椭圆参数的差异).圆圈在图片中给出,如下所示:

在做了像color2gray,阈值处理和边界检测之类的常用操作后,我得到如下图所示:

有了这个,我已经尝试了很多不同的东西:

  • 列表项目使用findContour分水岭(类似于此问题) - > openCV将圆圈之间的空间检测为闭合轮廓而不是圆圈,因为它们粘在一起而不形成闭合轮廓
  • fitEllipse也存在同样的问题.我将椭圆拟合在黑色背景轮廓上,而不是介于两者之间.
  • 只是尝试应用hough transforamtion(如代码和第三张图片所示)也会导致奇怪的结果:

看到这里的代码:

import sys
import cv2
import numpy
from scipy.ndimage import label

# Application entry point
#img = cv2.imread("02_adj_grey.jpg")
img = cv2.imread("fuss02.jpg")

# Pre-processing.
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    
cv2.imwrite("SO_0_gray.png", img_gray)

#_, img_bin = cv2.threshold(img_gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY)
_, img_bin = cv2.threshold(img_gray, 170, 255, cv2.THRESH_BINARY)
cv2.imwrite("SO_1_threshold.png", img_bin)

#blur = cv2.GaussianBlur(img,(5,5),0)
img_bin = cv2.morphologyEx(img_bin, cv2.MORPH_CLOSE, numpy.ones((3, 3), dtype=int))
cv2.imwrite("SO_2_img_bin_morphoEx.png", img_bin)

border = img_bin - cv2.erode(img_bin, None)
cv2.imwrite("SO_3_border.png", border)


circles …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing feature-detection hough-transform

21
推荐指数
1
解决办法
1万
查看次数