检测织物图像中的纱线数量

信息处理 matlab 图像处理
2021-12-30 08:22:43

我是图像处理的新手用户,正在从事一个项目以确定织物图像中的纱线数量,即经纱和纬纱(与 x 轴垂直和平行的纱线)。

示例图像

我试图通过分别取经纱和纬纱的列和行的总和来检测纱线,但它似乎不起作用,因为图像不是很好聚焦和清晰。此外,该方法对织物中纱线的排列非常敏感。

如果可能的话,请提出一个更好的算法来检测纱线。此外,是否有可能为每个捕获的图像制作直线。我已经尝试过 IMROTATE 但它会在图像中创建黑色区域,这会干扰行的总和并且算法会失败。

在这方面的任何帮助对我来说都是很有价值的。谢谢。

2个回答

傅立叶变换将为您提供图像中任何周期性特征的周期 - 例如,它会告诉您存在水平 3 像素和垂直 5 像素的结构事件,根据此和像素比例,您可以计算纱线的数量

Mathematica 中的一些代码:

i = ColorNegate@Import@"http://i.stack.imgur.com/Jlhgw.jpg";
i3 = DeleteSmallComponents[Binarize[i, .4], 10];
lines = ImageLines[i3, .6];
Show[i, Graphics[{Thick, Orange, Line /@ lines}]]
(*y coord mean increments at x=0 *)
b = Mean@Differences@ Sort[(#[[2, 1]] #[[1, 2]] - #[[1, 1]] #[[2, 2]])/(#[[1,1]] - #[[2, 1]]) & /@ lines];
(*mean slope*)
a = Mean[-(-#[[1, 2]] + #[[2, 2]])/(#[[1, 1]] - #[[2, 1]]) & /@ lines];
(*Threads*)
- a ImageDimensions[i3][[1]]/b 
(*yarns*)
2 ImageDimensions[i3][[2]]/b

结果>

在此处输入图像描述

34.5541
27.2259