Над конвейером производственной линии по которой движутся таблетки висит камера. Программа отбраковывает таблетки по соответствию шаблону контура и поверхности таблеток.
Таблетки часто плотно соприкасаются. Алгоритм такой: по определенному уровню происходит обход контуров и затем нарезание контуров на дуги. Затем дуги объединяются в группы. Каждая группа дуг - одна таблетка.
На рис 1 приведен один фрейм (не стандартный, тяжелый ввиду наличия инородных тел - кусков таблеток)

Рис 1 (чтобы увидеть дуги следует сликнуть по картинке и в открывающемся окне снова кликнуть по новой картинке) Все дуги пронумерованы.
От точки соединения двух дуг отложим например 16 пикселей по каждой дуге и получим на каждой из дуг по точке. Назовем стыком двух дуг три точки: 1 - точка соединения двух дуг и 2 и 3 - точки на дугах отстоящие от точки 1 на 16 пикселей. Точки 2 и 3 соединены красной линией, а 1-2 и 1-3 - белыми линиями (см рис 2)

Рис 2. Стыки видны только при двух кликах на картинках как и в рис 1. Все стыки пронумерованы.
Из этого рисунка видно что есть пары стыков. В них стыки как бы направлены друг на друга, например стыки 11 и 12 образуют пару.
Проблема из-за которой я обратился на этот форум в том как найти все пары стыков. Свое не полное решение привожу ниже.
Пары нужны для того чтобы соединять дуги, например в случае установления парности стыков 11 и 12 можно соединить дуги 13 и 15 и также замкнуть дугу 14 (см рис 1). Для сокращения объединяемых дуг это важно.

Рис 3. Здесь видим что напр стыки 28-31, 25-32, 30-40, 29-38 образуют пары.
Рассмотрим Рис 4

Рис 4 На этом рис попытка задать понятие связи между двумя стыками. На Рис 4 (1) изображены два стыка с вершинами Мо1 и Мо2. Расстояние между вершинами d. Середина противоположной вершине стороны и вершина - вектор стыка. Угол между векторами стыка

. Два других угла

. Итак по параметрам

надо построить понятие веса связи между стыками.
Надо интуицию перевести в понятие чтобы затем построить алгоритм нахождения пар стыков.
На Рис 4 (2) приведен другой случай расположения треугольников.

Рис 5. Еще различные случаи расположения треугольников. (1) - связи нет, (2) - связь есть, (3) и (4) - пограничные случаи.
Сначала сделал так: если

то связь есть, иначе нет
здесь

- некий порог
Пробовал задать линейную модель для каждого параметра:
1. вес от расстояния

меняется линейно от 0 до 1 при изменении расстояния от 0 до порога,
2. вес от угла альфа

меняется от 0 до 1 при изменении угла от

до 0.
Веса от

и от

подобно

.
И суммарный вес

Были попытки и посложнее, но в результате пришел к такому все еще неудовлетворительному решению:
После сортировки всех пар по d получил следующую картину

Рис 6. И вот на этом рисунке можно интуитивно указать вес для каждой пары, что я и сделал (столбик Е):

Рис 7. С учетом столбика Е нашел коэф-ты переопределенной системы и посчитал через них новые веса (столбик F)
Например первая строчка: 2,24 - это расстояние между стыками 16 и 17 (см рис 6), 0,02 - угол

в радианах между стыками 16 и 17 и т.д.
Но по строчке 6 видна корявость метода (большое расхождение между интуитивным значением веса равным нулю столбик Е и посчитанным 55 столбик F.
Пробовал добавлять к системе строки 2 и 6, а также 3, но толку мало.
Собирать же данные со многих фреймов да еще разных файлов, разных форм таблеток неудобно, почти невозможно.
Возможно у кого то будет идея как можно построить понятие веса связи между двумя треугольниками.