我试图通过分别获取经线和纬线的列数和行数之和来检测纱线,但是由于图像的聚焦和清晰度不够好,所以似乎没有用。而且该方法对织物中纱线的排列非常敏感。
如果可能,请提出一种更好的算法来检测纱线。同样,是否有可能使每个捕获的图像都变得笔直。我尝试了IMROTATE,但是它会在图像中创建黑色区域,这会干扰行的总数,并且算法会失败。
在这方面的任何帮助对我来说都是非常值得的。谢谢。
#1 楼
傅立叶变换将为您提供图像中任何周期性特征的周期-例如,它将告诉您水平方向有3个像素,垂直方向有5个像素的结构事件,由此和像素比例,您可以计算出纱线的数量#2 楼
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
评论
$ \ begingroup $
如果您解释此代码中的工作,那就太好了。
$ \ endgroup $
– Abid Rahman K
2012年7月16日14:47
评论
使用FFT。这是家庭作业吗?是的,傅里叶变换可能是正确的起点。它将“模糊”出图像的规则性。不过,不确定如何处理局部旋转。也许您可以变换条纹并记下它们的相位,然后确定相邻条纹是否向左或向右倾斜。