Contenu connexe
Similaire à Linqで画像処理 (20)
Plus de Fumihito Yokoyama (20)
Linqで画像処理
- 2. 自己紹介
● 某北見市で働く職業プログラマ
● 趣味でもプログラム書くことがあります
● お仕事:C言語、(Python、C#)
● 趣味:ほぼ何でも(※アセンブリを除く)
● パネルでポン(以下、パネポン)ができます
● タグ「友達がいないとこうなります」で検索!
● あと、手元を映したUst動画もあったりします
- 5. 自己紹介
● 某北見市で働く職業プログラマ
● 趣味でもプログラム書くことがあります
● お仕事:C言語、(Python、C#)
● 趣味:ほぼ何でも(※アセンブリを除く)
● パネルでポン(以下、パネポン)ができます
● タグ「友達がいないとこうなります」で検索!
● あと、手元を映したUst動画もあったりします
- 9. LINQについて
Language Integrated Query の略称で、 C# や VB
などの .NET Framework 対応言語に、 リレーショ
ナルデータや XML に対するデータ操作構文を組
み込む (+ データベースや XML 操作用のライブ
ラリ)
引用:http://ufcpp.net/study/csharp/sp3_linq.
html
- 10. LINQについて
0 1 2 3 0 2
4 5 6 7 4 6
Where(p => p % 2 == 0)
8 9 10 11 8 10
12 13 14 15 12 14
- 11. LINQについて
0 2 "0" "2"
4 6 "4" "6"
Select(p => p.ToString())
8 10 "8" "10"
12 14 "12" "14"
- 25. 各画素をグレースケール化
Enumerable.Range(0, bmp.Width * bmp.Height * 4) // 1
.Where(p => p % 4 == 0) // 2
.AsParallel() // 並列化
.ForAll(p => {
double cr = 0.298912, cg = ..., cb = ...;
byte g = (byte)(cr * ba[i + 0] +
cg * ba[i + 1] +
cb * ba[i + 2])
ba[i + 0] = ba[i + 1] = ba[i + 2] = g;
});
- 26. 各画素を二値化
Enumerable.Range(0, bmp.Width * bmp.Height * 4) // 1
.Where(p => p % 4 == 0) // 2
.AsParallel() // 並列化
.ForAll(p => {
double cr = 0.298912, cg = ..., cb = ...;
byte g = (byte)(cr * ba[i + 0] +
cg * ba[i + 1] +
cb * ba[i + 2])
ba[i + 0] = ba[i + 1] = ba[i + 2] =
g < th ? 0 : 255;
});
- 27. テンプレート画像でマッチング
● 空白・数字「1−9」までのテンプレート画像を用
意
● 上記のテンプレート画像を二値化した画像と、
マスの画像を二値化した画像を比較
● 比較結果が最も似ているものをその数値と断定
する。
37
370
- 31. テンプレート画像でマッチング
Enumerable.Range(0, 10) // 1
.Select((p, i) => new {
Num = i,
Count = Enumerable.Range(0, 37 * 37)
.Count(
q => CellImgByte[q] ==
TmplImgByte[i * 37 + q % 37 + q / 37 + i * 370] ) // 2
})
- 32. テンプレート画像でマッチング
Enumerable.Range(0, 10) // 1
.Select((p, i) => new {
Num = i,
Count = Enumerable.Range(0, 37 * 37)
.Count(
q => CellImgByte[q] ==
TmplImgByte[i * 37 + q % 37 + q / 37 + i * 370] ) // 2
})
.OrderByDescending( p => p.Count )
- 33. テンプレート画像でマッチング
Enumerable.Range(0, 10) // 1
.Select((p, i) => new {
Num = i,
Count = Enumerable.Range(0, 37 * 37)
.Count(
q => CellImgByte[q] ==
TmplImgByte[i * 37 + q % 37 + q / 37 + i * 370] ) // 2
})
.OrderByDescending( p => p.Count )
.First()
- 34. テンプレート画像でマッチング
Enumerable.Range(0, 10) // 1
.Select((p, i) => new {
Num = i,
Count = Enumerable.Range(0, 37 * 37)
.Count(
q => CellImgByte[q] ==
TmplImgByte[i * 37 + q % 37 + q / 37 + i * 370] ) // 2
})
.OrderByDescending( p => p.Count )
.First()
.Num; // 3