Над конвейером производственной линии по которой движутся таблетки висит камера. Программа отбраковывает таблетки по соответствию шаблону контура и поверхности таблеток.
Таблетки часто плотно соприкасаются. Алгоритм такой: по определенному уровню происходит обход контуров и затем нарезание контуров на дуги. Затем дуги объединяются в группы. Каждая группа дуг - одна таблетка.
На рис 1 приведен один фрейм (не стандартный, тяжелый ввиду наличия инородных тел - кусков таблеток)
![Изображение](http://s21.postimg.org/3y6oag2ub/5_arcs.jpg)
Рис 1 (чтобы увидеть дуги следует сликнуть по картинке и в открывающемся окне снова кликнуть по новой картинке) Все дуги пронумерованы.
От точки соединения двух дуг отложим например 16 пикселей по каждой дуге и получим на каждой из дуг по точке. Назовем стыком двух дуг три точки: 1 - точка соединения двух дуг и 2 и 3 - точки на дугах отстоящие от точки 1 на 16 пикселей. Точки 2 и 3 соединены красной линией, а 1-2 и 1-3 - белыми линиями (см рис 2)
![Изображение](http://s27.postimg.org/mfwqi47j3/image.jpg)
Рис 2. Стыки видны только при двух кликах на картинках как и в рис 1. Все стыки пронумерованы.
Из этого рисунка видно что есть пары стыков. В них стыки как бы направлены друг на друга, например стыки 11 и 12 образуют пару.
Проблема из-за которой я обратился на этот форум в том как найти все пары стыков. Свое не полное решение привожу ниже.
Пары нужны для того чтобы соединять дуги, например в случае установления парности стыков 11 и 12 можно соединить дуги 13 и 15 и также замкнуть дугу 14 (см рис 1). Для сокращения объединяемых дуг это важно.
![Изображение](http://s28.postimg.org/lfs1tbts9/image.jpg)
Рис 3. Здесь видим что напр стыки 28-31, 25-32, 30-40, 29-38 образуют пары.
Рассмотрим Рис 4
![Изображение](http://s21.postimg.org/4apsrw483/cond_spl.jpg)
Рис 4 На этом рис попытка задать понятие связи между двумя стыками. На Рис 4 (1) изображены два стыка с вершинами Мо1 и Мо2. Расстояние между вершинами d. Середина противоположной вершине стороны и вершина - вектор стыка. Угол между векторами стыка
![$ \beta= \pi - \alpha$ $ \beta= \pi - \alpha$](https://dxdy-01.korotkov.co.uk/f/4/7/c/47c8129ace57416cebdb3d799cc0447182.png)
. Два других угла
![$\alpha_1\ \& \ \alpha_2$ $\alpha_1\ \& \ \alpha_2$](https://dxdy-01.korotkov.co.uk/f/4/9/f/49f62abb87856371112a265f251d5b8c82.png)
. Итак по параметрам
![$d, \alpha, \alpha_1, \alpha_2$ $d, \alpha, \alpha_1, \alpha_2$](https://dxdy-02.korotkov.co.uk/f/5/8/d/58dce7e2dc9877c5cbfadae28224ea0a82.png)
надо построить понятие веса связи между стыками.
Надо интуицию перевести в понятие чтобы затем построить алгоритм нахождения пар стыков.
На Рис 4 (2) приведен другой случай расположения треугольников.
![Изображение](http://s7.postimg.org/5o0axk1rb/cond_spl2.jpg)
Рис 5. Еще различные случаи расположения треугольников. (1) - связи нет, (2) - связь есть, (3) и (4) - пограничные случаи.
Сначала сделал так: если
![$d < limd \ \& \ \alpha < \pi/4\ \& \ \alpha_1 < \pi/6 \ \& \ \alpha_2 < \pi/6$ $d < limd \ \& \ \alpha < \pi/4\ \& \ \alpha_1 < \pi/6 \ \& \ \alpha_2 < \pi/6$](https://dxdy-02.korotkov.co.uk/f/5/2/2/522f6e0ef163a2d9bb7f3f27ea57bc8d82.png)
то связь есть, иначе нет
здесь
![$limd$ $limd$](https://dxdy-03.korotkov.co.uk/f/6/6/f/66fc552f921154958c0ac43fa8e21cd882.png)
- некий порог
Пробовал задать линейную модель для каждого параметра:
1. вес от расстояния
![$w_1$ $w_1$](https://dxdy-01.korotkov.co.uk/f/4/b/4/4b4518f1b7f0fb1347fa21506ebafb1982.png)
меняется линейно от 0 до 1 при изменении расстояния от 0 до порога,
2. вес от угла альфа
![$w_2$ $w_2$](https://dxdy-04.korotkov.co.uk/f/f/7/e/f7eb0e840408d84a0c156d6efb611f3e82.png)
меняется от 0 до 1 при изменении угла от
![$\pi/4$ $\pi/4$](https://dxdy-03.korotkov.co.uk/f/6/6/5/6655af76299cc168cffddfd8e3c8cf9d82.png)
до 0.
Веса от
![$w_3$ $w_3$](https://dxdy-02.korotkov.co.uk/f/9/8/6/9867f3716375bbac4f4022ea2597ceaa82.png)
и от
![$w_4$ $w_4$](https://dxdy-04.korotkov.co.uk/f/b/5/f/b5f7c0fd34279e4f69fb0f2cc1cb30b482.png)
подобно
![$\alpha $ $\alpha $](https://dxdy-04.korotkov.co.uk/f/b/7/9/b7932a8b63ed6ae7ca61921ec2b87d4082.png)
.
И суммарный вес
![$W = w_1 + w_2 + w_3 + w_4$ $W = w_1 + w_2 + w_3 + w_4$](https://dxdy-04.korotkov.co.uk/f/f/7/b/f7b4ae62297cd5b8672befb1bc52e4fd82.png)
Были попытки и посложнее, но в результате пришел к такому все еще неудовлетворительному решению:
После сортировки всех пар по d получил следующую картину
![Изображение](http://s11.postimg.org/uin8n9tpb/image.jpg)
Рис 6. И вот на этом рисунке можно интуитивно указать вес для каждой пары, что я и сделал (столбик Е):
![Изображение](http://s8.postimg.org/615an17pd/calc_W.jpg)
Рис 7. С учетом столбика Е нашел коэф-ты переопределенной системы и посчитал через них новые веса (столбик F)
Например первая строчка: 2,24 - это расстояние между стыками 16 и 17 (см рис 6), 0,02 - угол
![$\alpha$ $\alpha$](https://dxdy-01.korotkov.co.uk/f/c/7/4/c745b9b57c145ec5577b82542b2df54682.png)
в радианах между стыками 16 и 17 и т.д.
Но по строчке 6 видна корявость метода (большое расхождение между интуитивным значением веса равным нулю столбик Е и посчитанным 55 столбик F.
Пробовал добавлять к системе строки 2 и 6, а также 3, но толку мало.
Собирать же данные со многих фреймов да еще разных файлов, разных форм таблеток неудобно, почти невозможно.
Возможно у кого то будет идея как можно построить понятие веса связи между двумя треугольниками.