Detección del número de hilos en la imagen de la tela.

12

Soy un usuario novato en el procesamiento de imágenes y trabajo en un proyecto para determinar el número de hilos en una imagen de tela, es decir, urdimbres y tramas (hilos perpendiculares y paralelos al eje x).

Imagen de muestra

Estoy tratando de detectar los hilos tomando la suma de columnas y filas para urdimbres y tramas, respectivamente, pero no parece funcionar porque la imagen no está muy bien enfocada y nítida. Además, el método es muy sensible a la alineación de los hilos en la tela.

Proponga un mejor algoritmo si es posible para la detección de hilos. Además, si existe alguna posibilidad de hacer hilos rectos para cada imagen capturada. He intentado IMROTAR pero crea las regiones negras en la imagen que perturban la suma de filas y el algoritmo falla.

Cualquier ayuda a este respecto será de gran valor para mí. Gracias.


fuente
Use una FFT. ¿Es esta tarea?
endolith
Sí, una transformación de Fourier es probablemente el punto de partida correcto. Sería "sacar" la regularidad de la imagen fuera de la confusión. Sin embargo, no estoy seguro de cómo manejar la rotación parcial. Tal vez podría transformar las franjas y observar su fase, luego determinar si las franjas adyacentes se inclinaban hacia la izquierda o la derecha.
Daniel R Hicks

Respuestas:

9

Una transformación de Fourier le dará el período de cualquier característica periódica en la imagen, por ejemplo, le indicará que hay un evento de estructura de 3 píxeles horizontalmente y 5 píxeles verticalmente, a partir de esto y la escala de píxeles puede calcular el número de hilos

Martin Beckett
fuente
3

Algún código en 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

Resultado>

ingrese la descripción de la imagen aquí

34.5541
27.2259

Dr. belisario
fuente
1
Sería bueno si explicas lo que estás haciendo en este código.
Abid Rahman K