Необходимо получить ROI пересечений двух областей.
Есть ли в LabVIEW готовый инструмент, выполняющий данную операцию?
На прикрепленном изображении выделены 4 области. Первая пересекается со всеми остальными. На выходе необходимо получить ROI их пересечений (ROI вокруг желтых областей).
Получение ROI пересечений двух областей
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Получение ROI пересечений двух областей
Думаю, это должно помочь.
Convex Polygon Intersection VI
http://zone.ni.com/reference/en-XX/help ... oly_inter/
Computes the intersection of two convex polygons.
If two polygons do not intersect, the VI returns empty arrays to Intersection X and Intersection Y with no error.
Convex Polygon Intersection VI
http://zone.ni.com/reference/en-XX/help ... oly_inter/
Computes the intersection of two convex polygons.
If two polygons do not intersect, the VI returns empty arrays to Intersection X and Intersection Y with no error.
- Мишая
- interested
- Сообщения: 8
- Зарегистрирован: 27 апр 2018, 12:29
- Версия LabVIEW: 17
- Благодарил (а): 1 раз
- Контактная информация:
Re: Получение ROI пересечений двух областей
Спасибо.
Данная функция работает только для выпуклых многоугольников. На прикрепленном рисунке третья смежная область не будет найдена.
Я надеялся, что в палитрах IMAQ есть что-то подобное, что принимает на вход формат ROI, а не массивы.
Данная функция работает только для выпуклых многоугольников. На прикрепленном рисунке третья смежная область не будет найдена.
Я надеялся, что в палитрах IMAQ есть что-то подобное, что принимает на вход формат ROI, а не массивы.
- zxc_pavel
- adviser
- Сообщения: 242
- Зарегистрирован: 02 июн 2016, 12:07
- Версия LabVIEW: 15
- Благодарил (а): 9 раз
- Поблагодарили: 23 раза
- Контактная информация:
Re: Получение ROI пересечений двух областей
В палитре нету.
Пример с NI должен Вам помочь, попробуйте. Можно массив вершин взять с roi.
Я его не нашел, начал пробовать сам сделать. Если интересно, продолжайте. Суть: пускаем лучи из точки к вершинам, потом вычитаем углы между соседними лучами и складываем их. Если точка снаружи - сумма будет равна нулю, внутри - не равна нулю. Долго работает, переборов много, поэтому не все точки, я прореживаю там. В примере работает только для roi - многоугольника, в прямоугольнике надо начало чуть переделать.
Пример с NI должен Вам помочь, попробуйте. Можно массив вершин взять с roi.
Я его не нашел, начал пробовать сам сделать. Если интересно, продолжайте. Суть: пускаем лучи из точки к вершинам, потом вычитаем углы между соседними лучами и складываем их. Если точка снаружи - сумма будет равна нулю, внутри - не равна нулю. Долго работает, переборов много, поэтому не все точки, я прореживаю там. В примере работает только для roi - многоугольника, в прямоугольнике надо начало чуть переделать.
- Вложения
-
- 1304.rar
- (325.23 КБ) 81 скачивание
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Получение ROI пересечений двух областей
>> Данная функция работает только для выпуклых многоугольников. На прикрепленном рисунке третья смежная область не будет найдена.
К сожалению, готовых функций для произвольных многоугольников нет. Здесь есть два варианта: либо писать собственный код, либо подключать сторонний пакет/библиотеку. Например, в Матлабе это так делается: https://www.mathworks.com/help/matlab/r ... 120e954386 Или в HALCON есть ряд операторов для регионов и xld: https://www.mvtec.com/doc/halcon/12/en/ ... s_xld.html
Я когда-то сталкивался с похожей задачей, только для произвольных эллипсов. Частные случаи меня не устраивали. В итоге начал писать свой код, но позднее нашёл dll, на ней и остановился.
>> Я надеялся, что в палитрах IMAQ есть что-то подобное, что принимает на вход формат ROI, а не массивы.
Конвертировать из/в ROI не проблема, есть палитра Region of Interest -> Region of Interest Conversion.
Хотя, можно попробовать ещё такой вариант: создать из многоугольников бинарные маски через IMAQ ROIToMask 2 VI, а потом найти пересечение масок через And. Должна получиться бинарная картинка, на которой область пересечения будет иметь логическую единицу, а фон - ноль. Далее эту картинку можно пропустить через IMAQ MaskToROI VI или IMAQ Particle Analysis VI и получить координаты области.
Quick-and-Dirty пример. Не забудьте добавить IMAQ Dispose для тех картинок, что не нужны по окончании работы.
К сожалению, готовых функций для произвольных многоугольников нет. Здесь есть два варианта: либо писать собственный код, либо подключать сторонний пакет/библиотеку. Например, в Матлабе это так делается: https://www.mathworks.com/help/matlab/r ... 120e954386 Или в HALCON есть ряд операторов для регионов и xld: https://www.mvtec.com/doc/halcon/12/en/ ... s_xld.html
Я когда-то сталкивался с похожей задачей, только для произвольных эллипсов. Частные случаи меня не устраивали. В итоге начал писать свой код, но позднее нашёл dll, на ней и остановился.
>> Я надеялся, что в палитрах IMAQ есть что-то подобное, что принимает на вход формат ROI, а не массивы.
Конвертировать из/в ROI не проблема, есть палитра Region of Interest -> Region of Interest Conversion.
Хотя, можно попробовать ещё такой вариант: создать из многоугольников бинарные маски через IMAQ ROIToMask 2 VI, а потом найти пересечение масок через And. Должна получиться бинарная картинка, на которой область пересечения будет иметь логическую единицу, а фон - ноль. Далее эту картинку можно пропустить через IMAQ MaskToROI VI или IMAQ Particle Analysis VI и получить координаты области.
Quick-and-Dirty пример. Не забудьте добавить IMAQ Dispose для тех картинок, что не нужны по окончании работы.
- Вложения
-
- Untitled 1.vi
- lv2018
- (70.88 КБ) 71 скачивание