1

因此,我试图在所附照片等图像中找到条纹线的旋转角度。唯一的假设是这些线是平行的,并且它们的方向大约或多或少约为 90 度[比如 5 度公差]。我必须确保结果图像中的条纹线垂直 %100。图像的质量以及它们的直方图/灰度值不同。因此,对于我的案例,基于非自适应阈值的方法已经失败[如果我不能使其自适应,我对基于阈值的方法不感兴趣]。此外,有时条纹线顶部会出现一些随机的黑色簇。

到目前为止我所做的:1)当然,HoughLines 是第一个选项,但我无法让它适用于我的所有图像,尽管遵循了这篇很棒的文章,但我取得了一些部分成功:http: //felix.abecassis.me/ 2011/09/opencv-检测-倾斜角度/。我理解失败的主要原因是,我需要为不同的图像微调参数。Canny/BW/Morphological边缘检测等参数(如果需要) | minLinelength/maxLineGap/等的参数。当然,有一种方法可以破解它并使其工作,但是,对我来说,这是一个脆弱的解决方案!

2)我现在正在做的是将图像划分为顶部切片和底部切片,然后找到每个切片的峰和谷。然后基本上使用图像的宽度和峰的平移来找到角度。我目前正在寻找顶部切片的哪个峰值属于底部切片的哪个峰值,因为由于带状线顶部存在黑色/白色簇,我的计算中会出现一些误报峰值。

示例:切片的峰值位置:Top Slice = { 1, 33,67,90,110} BottomSlice = { 3, 14, 35,63,90,104}

提取峰值时,我实际上得到了相似的向量。可以看出,向量的长度可能会有所不同,知道我怎样才能得到一个像这样的组:

{{1,3},{33,35},{67,63},{90,90},{110,104}}

我对改进任何这些算法或全新方法的任何想法持开放态度。如果需要,我可以上传更多图片。

在此处输入图像描述

4

2 回答 2

1

如果您可以获得单条线的点列表,线性回归将为您提供最适合这些点的直线的公式。一个简单的三角操作会将直线公式转换为角度。

您可能可以使用一些细线操作将条纹变成点列表。

于 2013-02-27T17:21:09.760 回答
0

您可以沿不同角度运行空间导数的累加器。如果您想要半度精度和 5 行样本,则最多有 10*5*1500 = 7.5m 次迭代。您可以安全地将沿线的采样率降低十倍,这将为您提供每个样本 150 个点的样本大小,从而将迭代次数减少到不到一百万。在该点附近的某个地方,拉直图像的操作应该成为瓶颈。

于 2013-02-27T19:49:31.763 回答