ファブリック画像内の糸の数の検出


12

私は画像処理の初心者ユーザーであり、布地画像の糸の数、つまり縦糸と横糸(x軸に垂直および平行な糸)を決定するプロジェクトに取り組んでいます。

サンプル画像

私は縦糸と横糸のそれぞれの列と行の合計を取得することで糸を検出しようとしていますが、画像の焦点が合っておらずシャープではないため、機能していないようです。また、この方法は、ファブリック内の糸の配列に非常に敏感です。

可能であれば、糸の検出のためのより良いアルゴリズムを提案してください。また、キャプチャされたすべての画像に対して糸を真っ直ぐにする可能性がある場合。IMROTATEを試しましたが、画像の黒い領域が作成され、行の合計が乱れ、アルゴリズムが失敗します。

この点での助けは私にとって非常に価値があります。ありがとう。


FFTを使用します。これは宿題ですか?
エンドリス

ええ、おそらくフーリエ変換が正しい出発点です。あいまいさから画像の規則性を「引き」ます。ただし、部分的な回転の処理方法がわかりません。たぶん、ストライプを変換してその位相を記録し、隣接するストライプが左右に歪んでいるかどうかを判断できます。
ダニエルRヒックス

回答:


9

フーリエ変換は、画像内の任意の周期的特徴の周期を示します。たとえば、構造イベントが水平3ピクセル、垂直5ピクセルであることがわかります。これと糸の数を計算できるピクセルスケールから


3

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


1
このコードで何をしているのかを説明していただければ幸いです。
アビッドラーマンK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.