Как найти клетки в изображении по цвету? - PullRequest
0 голосов
/ 02 июля 2019

У меня мобильное приложение (флаттер).Это мой пользовательский случай:

1. Я фотографирую документ.Это документ того же типа.Это пример:

enter image description here

Мне нужно найти выбранные ячейки.

Я пробовал несколько способов (Ml Kit, OpenCv), но в конце я выбрал свой собственный алгоритм.Я решил найти клетки по цвету.

Итак, фон моего приложения «зеленый», ячейки ближе к «серому».Я сканирую все пиксели изображения - если начинается «серый» цвет, то начинаю определять координаты ячейки.Если внутри темный цвет, я ищу следующий пиксель и проверяю, серый ли он.

Работает, но у меня проблема: на фотографиях цвет "серый" может отличаться от моего стандарта, а затемалгоритм не работает правильно.

Это мой код сравнения цветов:

import 'package:image/image.dart' as img;

 final ui.Color _colorGrey = ui.Color(4293717743);

double _colorDistance(ui.Color c1, ui.Color c2) {
  double rmean = (c1.red + c2.red) / 2;
  var r = c1.red - c2.red;
  var g = c1.green - c2.green;
  var b = c1.blue - c2.blue;
  var tmp1 = ((512 + rmean) * r * r);
  var res = sqrt((tmp1.toInt() >> 8) +
    4 * g * g +
    (((767 - rmean) * b * b).toInt() >> 8));
  return res;
}

bool _isGrey(ui.Color curr) {
  var distance = _colorDistance(curr, _colorGrey);
  return (distance < 60);
} 

Но на реальных фотографиях он дает ошибку в сравнении.Мне нужен более надежный алгоритм сравнения цветов или определения эталонного цвета на чертеже.

Любые идеи и предложения Буду очень признателен.

Я не использовал OpenCv, так как нет полногоПлагин для Flutter, и нет времени портировать OpenCv.

...