И снова здравствуйте!
Продолжаем изучать LabView IMAQ (Visual Assistant)
Спешу напомнить, что подробное описание указанных мною
(да множества других) можно посмотреть в интернете, например тут:
http://zone.ni.com
Итак...
Мы с вами задали начальное положение полярного угла и полярного радиуса. Теперь приступим к автоматизации нашего аналитического инструмента.
Думаете зря я вам рассказал про системы координат и их соотношение? Линии рисуем впустую? Да, Вы правы!
На самом деле мы дифференцируем нашу графическую систему. А именно:
1. Определяем изображение как ROI (Region Of Interest — регион интересов — интересующая область изображения)
2. Заданием координат отрезка мы выделяем сегмент внутри фотоснимка.
Наш отрезок-не что иное, как диагональ прямоугольника, которым мы и выделяем интересующую нас область:
Шаг за шагом мы разбиваем наше изображение на участки для выявления интересующих нас свойств (с повышенной точностью).
И вот настал тот момент, когда от визуальной составляющей мы переходим к аналитической-получаем координаты нашего отрезка.
Для этого воспользуемся следующим
:
-
IMAQ WindGetROI-Возвращает описание выделенного изображения (координаты)
Фрагмент кода:
- CalcROI.png (10.08 КБ) 15816 просмотров
Тут мы получаем данные нашего прямоугольника. Выделяем из него координаты начала и конца отрезка (с помощью Array Palette-набора инструментов для работы с массивами) и вычисляем длину отрезка.
Для вычисления используем
IMAQ Point Distances
Но это только один отрезок, а нам нужно наложить сетку-транспортир, причем автоматически...
Скажу сразу в
такого механизма нет...
Но мы то с вами не зря пришли на наш замечательный форум-мы пришли за знаниями.
Вот тут нам и пригодится полученная информация из предыдущего сообщения. Мы создадим свой механизм автоматического анализа.
Сначала научим систему выводить отрезки через нужный нам интервал относительно исходного радиус-вектора.
Будем смещать наш дискретный ROI (прямоугольник) относительно заданного центра в полярной системе координат.
Для этого применим следующий алгоритм (выводил и программировал сам... потому не шибко красиво, но работает
):
Множество линий привязки, множество блоков формул...
Задачей этой части кода является фиксация начальной точки координат и автоматический расчет положения каждого последующего отрезка.
Согласен, выглядит немного сумбурно, но если запускать в режиме подсветки (Higlight execution-пошаговое выполнение алгоритма)-будет понятно преобразование системы координат
Представленный выше фрагмент будет использован для каждого отрезка в нашей сетке, поэтому разумнее организовать цикл. Для более точного анализа я буду использовать диапазон 0-360 градусов с варьируемым шагом.
Тут у нас целое пространство для творчества....
Внутри цикла мы будем иcкусственно создавать ROI с описанием (блок Bundle by Name) и по созданному алгоритму отображать на нашем бинарном изображении лучи из заданного центра (блоки Формул и
IMAQ Overlay Line).
Да, друзья, все это будет делать
! Доверьтесь мне и увидите какую красоту может творить Visual Assistant
Хорошо...мы худо-бедно написали алгоритм автоматической визуализации процесса расчета...
Но что же сам расчет? А как же пороговая бинаризация? Границы зерен?
Вот тут мы создаем код, который определяет пороги в нашем бинарном изображении, рассчитывает расстояние между порогами и интегрирует наши ROI дабы получить величину изменения микроструктуры до деформации (кол-во исследуемых объектов задается пользователем):
-
IMAQ ROIProfile-Собирает информацию об интересующем нас сегменте изображения
-
IMAQ Edge Tool-Определяет границы порогов на изображении и передает их координаты
В
нет готового
для визуального отображения границ объектов на изображении....
Специально для нашего форума я набросал простенький визуализатор обработки порогов.
В данном блоке мы определяем расстояние между одноименными порогами.
И так на каждом шаге мы определяем средний радиус зерна. А после наложения Всей сетки-транспортира-средний радиус зерна в искомом изображении, а заодно и угол наибольшего изменения линейного удлинения...
Вышеуказанные алгоритмы применимы к изображению поверхности материала уже после деформации. Так же рассчитываются компоненты и происходит определение относительного смещения...
Послесловие
-Вот собственно и все, что я хотел рассказать в рамках данной темы...
-На самом деле возможности IMAQ практически безграничны. Вся соль в ТЗ и знании...
-В свое время я так и не нашел более-менее удобоваримого примера по комплексному IMAQ, а посему пришлось создавать самому-вот и решил поделиться...
-Прекрасно понимаю, что эта тема будет интересна узкому кругу лиц, но поверьте, представленные тут методы и
могут быть применимы в практически любой СТЗ...
-Старался объяснить как можно более простым языком, так что на шутки прошу не обижаться-целью было донести прелести IMAQ до самого рядового посетителя форума...
А теперь пример обещанной красоты. Показываю с уменьшением шага дифференциации... По картинкам станет понятно в чем соль метода
1. Скриншот работы алгоритма при шаге равном 15 градусов:
2. Скриншот работы алгоритма при шаге равном 5 градусов:
Уже более четко выделяются границы объектов, которые удалось проанализировать...
3. Скриншот работы алгоритма при шаге равном 1 градус:
Тут уже невооруженным глазом видно как наша СТЗ сама определяет, вырисовывает и анализирует графический объект...
Любопытные читатели сразу подметят совпадение границ графических объектов при бинаризации и при математическом анализе...
4. Но и это еще не все. Если мощность ПК позволяет-то сделаем акцент на точность... 0.1 градуса-вот шаг на следующем скриншоте (скажу сразу 6-8 Гб RAM минимум... Ибо
изображение загружает именно в ОЗУ) :
"Пакмэн"
И вот видно, как разработанная СТЗ более точно автоматически определяет границы объектов и рассчитывает нужные данные...
Считаю, что это победа. Причем Победа каждого, кто прочитал эту тему от начала и до конца!
Очень надеюсь, что хоть какие то теоретические и практические навыки у Вас, друзья мои, останутся!
З.Ы. Вот незадача-забыл про совмещение уроков. Во вложении-
из двух последних сообщений
З.З.Ы. А мы с вами перейдем к следующему этапу нашего Квеста!
А именно-к сохранению полученных данных! Во вложенном примере используется сохранение данных измерений в текстовый файл.
Это не промышленное решение. А посему будем копить данные в БД...
Предлагаю использовать самую сложную и дорогую БД... Oracle
Но это будет в другой теме...
И с решением других проблем...
А пока надеюсь, что хоть чем-то Вам помог!
С Уважением, Cobb