Ale*_*x I 5 opencv image fft image-processing feature-detection
我有图像处理问题.我有纱线的照片:

单个股线部分(但不是完全)对齐.我想找到它们对齐的主要方向.在示例图像的中心,该方向与水平方向成约30-34度.结果可以是整个图像的平均/中值方向,或者仅是每个局部邻域中的平均值(产生局部方向的矢量图).
我尝试过:我以小步(1度)旋转图像,并在旋转图像的垂直方向与水平方向上计算统计数据(例如:求和行或求和列的标准偏差).我推断,当股线完全垂直或精确水平定向时,统计数据的差异最大,因此旋转角度是原始图像中的正确方向.但是,对于我尝试过的至少几种统计属性,这不起作用.
我进一步认为也许这不起作用,因为在整个图像中同时有太多不同的方向,所以我在一个小社区里厌倦了.在这种情况下,总有一个非常明确的首选方向(每个居委会不同),但它不是使纤维的方向真的去...我可以张贴我的样本代码,但它基本上是无用的.
我一直认为整个图像必须有某种简单的线性代数/统计特性,或者从2D FFT中得到的一些值可以一步给出正确的方向......但是如何?
什么可能不起作用:检测单根纤维.它们不一定是相同的颜色,并且图像可以从浅到深变暗,因此边缘检测器不能很好地工作,并且图像有时甚至可能不会聚焦.因此,甚至不可能总是看到人类的单根纤维(参见示例中的右上角),它们必须在统计意义上被检测为优选方向.
Rog*_*and 10
您可以尝试在频域中执行此操作.傅立叶变换的输出取决于方向,因此,如果您有某种定向模式,则可以应用2D FFT,您将看到围绕特定方向的聚类.
例如,从图像中制作灰度并执行FFT(使用ImageJ)可以得到:

您可以看到一个与纱线方向正交的不同簇.通过对源图像进行一些预处理,去除噪声并增强定向特征,您可以在FFT中获得更强的信号.拥有集群后,您可以使用PCA之类的东西来确定主轴的矢量.
有关信息,这种技术通常用于通过在FFT中应用选择性滤波器来增强定向特征(例如指纹),然后采用反向来获得更清晰的图像.
另一种方法是尝试一系列Gabor滤波器, 这里可以看到预先构建的选择的方向和频率,并使用得到的特征作为识别最可能方向的度量.有一个scikit一篇文章,列举了一些例子在这里.
UPDATE
只需使用ImageJ来了解一些可能的方法 - 我开始使用上面显示的FFT,然后 - 在下图中,我执行了这些操作(从左上角开始顺时针) - Threshold => Close => Holefill =>侵蚀x 3:

最后,我使用这个ImageJ插件计算了左下方斑点的空间矩,而不是使用PCA,它可以根据二阶矩来轻松计算最长轴的方向.结果给出了大约-38度的方向(相对于X轴):

根据您的参考框架,您可以计算纱线的近似平均方向,而不是PCA.