私は現在、簡単なはずの画像認識の問題について疑問に思っていますが、これまで簡単な解決策を見つけることができませんでした。
入力は、明るい木の表面を示す約 1 メガピクセルの長方形の画像です。薄いが目に見えるグリッドがあります。グリッドは黒色で、規則的でほぼ正方形です (幅より約 8% 長い)。グリッド サイズは正確に 19x19 です。一般的なボードの色は「木」で、さまざまですが、明るい茶色がかった色になる傾向があります。(詳細)
表面には小さな丸い黒と白の石がたくさん置かれています。それらは常に交差点に配置されていますが、人的エラーにより、わずかにずれている可能性があります。彼らの色は純粋な黒と白です。
ボードは、0 から約 300 の石で覆われています (361 の交差点の 80%)。黒と白の石の数はほぼ同じです。
ボーダー (石が配置されていないボードの端) のサイズはさまざまですが、「小さい」ことが知られています。
光の加減で盤面に石の影が出る場合がございます。また、石の上に(光の方向に)単一の白い点が現れます。
グリッド上の石の位置を検出したいと思います。
私の考えは、各ピクセルの明るさを見て、それらを 3 つのクラスに分類することです: 明るい (白い石)、中間 (ボード)、暗い (黒い石)。黒いピクセルが多い領域は、黒い石などと見なされます。
その後、黒と白の領域のサイズを使用して、実際のグリッド サイズを計算できます。
もう 1 つのアイデアは、グリッド ラインを認識し、それを使用してグリッドのサイズと位置を計算することです。線が非常に細い (石で覆われていることが多い) ため、どうすればよいかわかりません。
この問題に関するアイデアをぜひお聞かせください。適切と思われるアルゴリズムはありますか? 非常に役立つクールなトリックを思いつくことができますか? 私は気が狂っていて、この問題は解決できませんか? 私はC#で作業していますが、どの言語でも大歓迎です。