Erkennung der Anzahl der Garne im Stoffbild

12

Ich bin ein Anfänger in der Bildverarbeitung und arbeite an einem Projekt zur Bestimmung der Anzahl der Garne in einem Stoffbild, dh Ketten und Schüsse (senkrechte und parallele Garne zur x-Achse).

Beispielbild

Ich versuche, die Garne zu erkennen, indem ich die Summe der Spalten und Reihen für Kette und Schuss nehme, aber es scheint nicht zu funktionieren, weil das Bild nicht sehr scharf und scharf ist. Das Verfahren ist auch sehr empfindlich gegenüber der Ausrichtung von Garnen im Gewebe.

Bitte schlagen Sie nach Möglichkeit einen besseren Algorithmus zur Erkennung von Garnen vor. Auch wenn es irgendeine Möglichkeit gibt, Garne für jedes aufgenommene Bild gerade zu machen. Ich habe IMROTATE versucht, aber es erzeugt die schwarzen Bereiche im Bild, die die Zeilensumme stören, und der Algorithmus schlägt fehl.

Jede Hilfe in dieser Hinsicht wird mir viel wert sein. Vielen Dank.


quelle
Verwenden Sie eine FFT. Ist das Hausaufgabe?
Endolith
Ja, eine Fourier-Transformation ist wahrscheinlich der richtige Ausgangspunkt. Es würde die Regelmäßigkeit des Bildes aus der Unschärfe "herausziehen". Ich bin mir jedoch nicht sicher, wie ich mit partieller Drehung umgehen soll. Vielleicht könnten Sie Streifen transformieren und ihre Phase notieren und dann feststellen, ob benachbarte Streifen nach links oder rechts geneigt sind.
Daniel R Hicks

Antworten:

9

Eine Fourier-Transformation gibt Ihnen die Periode aller periodischen Merkmale im Bild an - z. B. gibt sie an, dass ein Strukturereignis 3 Pixel horizontal und 5 Pixel vertikal vorliegt. Aus dieser und der Pixel-Skala können Sie die Anzahl der Garne berechnen

Martin Beckett
quelle
3

Code in 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

Ergebnis>

Bildbeschreibung hier eingeben

34.5541
27.2259

Dr. belisarius
quelle
1
Es wäre schön, wenn Sie erklären würden, was Sie in diesem Code tun.
Abid Rahman K