Detecção do número de fios na imagem do tecido

12

Eu sou um usuário iniciante no processamento de imagens e estou trabalhando em um projeto para determinar o número de fios em uma imagem de tecido, isto é, urdiduras e tramas (fios perpendiculares e paralelos ao eixo x).

imagem de amostra

Estou tentando detectar os fios pegando a soma de colunas e linhas de urdidura e trama, respectivamente, mas não parece funcionar porque a imagem não está muito bem focada e nítida. Além disso, o método é muito sensível ao alinhamento dos fios no tecido.

Por favor, proponha um algoritmo melhor, se possível, para detecção de fios. Além disso, se houver alguma possibilidade de tornar os fios retos para cada imagem capturada. Eu tentei IMROTATE, mas ele cria as regiões negras da imagem que perturbam a soma das linhas e o algoritmo falha.

Qualquer ajuda a esse respeito será de grande valia para mim. Obrigado.


fonte
Use uma FFT. Isso é lição de casa?
Endolith 08/07
Sim, uma transformação de Fourier é provavelmente o ponto de partida correto. Isso "puxaria" a regularidade da imagem para fora da imprecisão. Não tenho certeza de como lidar com a rotação parcial, no entanto. Talvez você possa transformar faixas e anotar sua fase e determinar se as faixas adjacentes estavam inclinadas para a esquerda ou direita.
Daniel R Hicks

Respostas:

9

Uma transformação de Fourier fornecerá o período de qualquer recurso periódico na imagem - por exemplo, informará que há um evento de estrutura 3 pixels na horizontal e 5 pixels na vertical, a partir desta e da escala de pixels você pode calcular o número de fios

Martin Beckett
fonte
3

Algum código no 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>

insira a descrição da imagem aqui

34.5541
27.2259

Dr. belisarius
fonte
1
Seria bom se você explicasse o que está fazendo neste código.
Abid Rahman K