Как я могу найти пересечения трех шестиугольников на этой фигуре?

Поскольку вы загружаете 32-битные значения из памяти, вы должны объявлять array и wordvar, используя dd, а не db / dw, чтобы каждая запись имела четыре байта:

array   dd 89, 10, 67, 1, 4, 27, 12, 34, 86, 3
wordvar dd 123     

Кроме того, неверное индексирование неверно:

mov ebx, [array+1]

Вероятно, вы имели в виду:

mov ebx, [array+1*4]
2
задан meTchaikovsky 18 January 2019 в 11:22
поделиться

1 ответ

Я все еще пытаюсь придумать более быстрый / лучший метод, но думаю, что должно сработать следующее:

  • ограничить ваше изображение чистыми черными и белыми
  • генерировать и сохранять список всех черных пикселей на будущее
  • пометьте ваше изображение так, чтобы каждый белый шестиугольник был эффективно заполнен уникальным цветом (или оттенком серого) - некоторые люди называют это «маркировкой» [111 ] некоторые называют его «Blob Analysis» , некоторые называют его «Анализ связанных компонентов» . Как бы это ни называлось, вы получите что-то вроде этого:

enter image description here

  • Теперь посмотрите на каждый черный пиксель из перечислите, что вы сохранили на втором шаге, и посчитайте, сколько разных цветов, кроме черного, находятся в окружающей области 9x9 или 15x15. Если это три, это, вероятно, пересечение, как вы ищете.

Конечно, есть разные варианты - например, вы могли бы реализовать «минимальное расстояние от другого пересечения» сверху. Или «черная линия истончается первой» . Или расширение каждого шарика, чтобы размыть черные линии и сделать три цвета ближе друг к другу. Вы можете уменьшить свое изображение (стараясь использовать NEAREST_NEIGHBOUR вместо интерполяции) после маркировки, чтобы сократить время обработки - если это важно.

0
ответ дан Mark Setchell 18 January 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: