В настоящее время меня интересует проблема распознавания изображений, которая должна быть простой, но пока не может найти легкого решения.
Ввод - это прямоугольное изображение размером около 1 мегапикселя с легкой деревянной поверхностью. У него тонкая, но видимая сетка. Сетка черного черного цвета, правильная и почти квадратная (примерно на 8% длиннее ширины). Размер сетки ровно 19х19. Основной цвет доски - «дерево», оно может быть разным, но обычно светло-коричневого цвета. ( подробнее )
На поверхности много маленьких круглых черных и белых камней. Они всегда размещаются на перекрестках, но из-за человеческой ошибки они могут быть немного не в порядке. Их цвет чисто черный и белый.
Доска покрыта от 0 до примерно 300 камнями (80% из 361 пересечений). Количество черных и белых камней примерно одинаково.
Размер границы (края доски, где камни никогда не размещаются) варьируется, но, как известно, «маленький».
Свет может вызвать появление на доске теней камней. Кроме того, это приводит к появлению единственной белой точки на камнях (в направлении света).
![goban](https://i.stack.imgur.com/iYDMf.jpg)
Я бы хотел определить положение камней на сетке.
Моя идея заключается в том, чтобы посмотреть на яркость каждого пикселя и разбить их на 3 класса: светлый (белые камни), средний (доска) и темный (черные камни). Области с большим количеством черных пикселей считаются черными камнями и т. Д.
Впоследствии размер черно-белых областей можно использовать для расчета фактического размера сетки.
Другая идея состоит в том, чтобы распознавать линии сетки и использовать их для расчета размера и положения сетки. Поскольку линии очень тонкие (и часто покрыты камнями), я не уверен, как это сделать.
Мне бы очень хотелось услышать ваши идеи по этому вопросу. Есть ли алгоритмы, которые кажутся подходящими? Можете ли вы придумать классные трюки, которые очень помогают? Я сошел с ума, и эта проблема неразрешима? Я работаю в C #, но любой язык приветствуется.