Яркость выделенной области

Простейшие вопросы в области инженерной разработки
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Яркость выделенной области

Сообщение AN-G »

Всем привет. Прошу помощи в решении следующей проблемы: имеется программа обработки изображения с камеры. Программа должна выделять яркие объекты (определенного размера и яркости), затем подсчитывать среднее значение яркости в выделенных объектах,обозначать их цетрмасс и наиболее интенсивному присвоить значение 1, чуть менее яркий объект должен получить значение 2 и т.д. На данный момент получилось следующее(исходник прилагаю). Так же никак не разберусь с тем, чтобы все это производилось на цветном изображении. Заранее благодарю всех неравнодушных.
Вложения
Video_Bright_area_WEExp(2).vi
(75.32 КБ) 23 скачивания
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

Может я неясно задачу обрисовал? Просмотры и скачивания есть, а ни одного комментария по данной теме :dntknw:
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5133
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 16 раз
Поблагодарили: 27 раз

Re: Яркость выделенной области

Сообщение IvanLis »

AN-G писал(а): 26 дек 2020, 20:14На данный момент получилось следующее(исходник прилагаю).
Так а в чем вопрос?
Вы предлагаете разобраться в Вашей программе, и понять что не получилось?
AN-G писал(а): 26 дек 2020, 20:14Так же никак не разберусь с тем, чтобы все это производилось на цветном изображении.
С цветным не получится, т.к. каждая составляющая имеет свое значение, Можно например преобразовать в HSV и выделяете Value, это и есть яркость.
AN-G писал(а): 26 дек 2020, 20:14 Программа должна выделять яркие объекты (определенного размера и яркости), затем подсчитывать среднее значение яркости в выделенных объектах,обозначать их цетрмасс и наиболее интенсивному присвоить значение 1, чуть менее яркий объект должен получить значение 2 и т.д.
Задача не тривиальная, а результат во многом зависит от самого изображения. Сразу даже предположить сложно.
Вы по идее выделили необходимые объекты, получили маску.
Потом делаете сегментацию, объединяете с маской.
Начинаете анализировать каждую область отдельно. Получив из нее маску, наложив на исходное изображение, считаете показатель.
На заключительном этапе ранжируете объекты.

Посмотрите пример ....\examples\Vision\Image Processing\Morphological Segmentation.vi
Станет немного яснее.
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

Благодарю, за наводку! Изображение будет черно-белое. По поводу задачи: мне, в виду малого опыта работы с LV непонятно как в выделенной области подсчитать среднюю яркость и так же непонятно как присвоить номера данным областям(есть ли уже готовые VI или хотя бы примеры).
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5133
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 16 раз
Поблагодарили: 27 раз

Re: Яркость выделенной области

Сообщение IvanLis »

AN-G писал(а): 28 дек 2020, 06:39 Благодарю, за наводку! Изображение будет черно-белое. По поводу задачи: мне, в виду малого опыта работы с LV непонятно как в выделенной области подсчитать среднюю яркость и так же непонятно как присвоить номера данным областям(есть ли уже готовые VI или хотя бы примеры).
Попробуйте размеченное изображение разобрать на ROI используя IMAQ LabelToROI.
Потом на основе примера examples\Vision\Light Meter\Light Meter.vi сделайте свой VI для вычисления средней яркости. У них ROI квадрат, а Вам нужно полученный на предыдущем этапе впихнуть. Только мне не понятно, если изображение ч/б (бинарное), то что там считать... :wink:

Ну а номера, это символическое обозначение. Если вопрос, как эти номера нарисовать на изображении, то используйте IMAQ Draw Text. Самое логичное, размещать в центре масс.
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

Неправильно выразился. У меня изображение будет из серии "50 оттенков серого" :wink: К сожалению тот пример, что я выкладывал не совсем тот, который у меня в действительности. Я его выложил т.к. на нем я отрабатываю поэтапно действительную программу(она написана для ПЛИС). Сегодня мне удалось сделать некоторые подвижки, но вопрос о среднем значении яркости остается открытым. Так же по поводу нумерации выделенных областей: непонятно как присвоить значение 0 самому яркому объекту. Изображение строится с верхнего левого положения и вниз(как мы читаем), отсюда и выходит, что тот объект, который находится выше, тот и будет нулевым. И еще конечно есть желание сделать выделение объекта именно по его контуру, а не вписывать его в прямоугольную или круглую форму.Завтра попробую проделать работу по вашим рекомендациям. Думаю вопросы еще появятся. :wink:
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

IvanLis писал(а): 28 дек 2020, 11:26 Попробуйте размеченное изображение разобрать на ROI используя IMAQ LabelToROI.
Потом на основе примера examples\Vision\Light Meter\Light Meter.vi сделайте свой VI для вычисления средней яркости. У них ROI квадрат, а Вам нужно полученный на предыдущем этапе впихнуть. Только мне не понятно, если изображение ч/б (бинарное), то что там считать... :wink:

Ну а номера, это символическое обозначение. Если вопрос, как эти номера нарисовать на изображении, то используйте IMAQ Draw Text. Самое логичное, размещать в центре масс.
Попробовал сделать , как вы и сказали, но к сожалению в примере \Vision\Light Meter\Light Meter.vi функция , отвечающая за яркость расчитана для одной точки с максимальным значением, поэтому данный трюк не удался :dntknw:. С IMAQ Draw Text так же не разобрался ввиду малого опыта. В итоге получилось, что у меня в программе отметились области с максимальным значением яркости точки под цифрой 0, чуть менее яркие 1 и 2 соответственно.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5133
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 16 раз
Поблагодарили: 27 раз

Re: Яркость выделенной области

Сообщение IvanLis »

AN-G писал(а): 11 янв 2021, 20:31 В итоге получилось, что у меня в программе отметились области с максимальным значением яркости точки под цифрой 0, чуть менее яркие 1 и 2 соответственно.
Считайте, что уже все готово :super:
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

IvanLis писал(а): 11 янв 2021, 21:20
AN-G писал(а): 11 янв 2021, 20:31 В итоге получилось, что у меня в программе отметились области с максимальным значением яркости точки под цифрой 0, чуть менее яркие 1 и 2 соответственно.
Считайте, что уже все готово :super:
ну это не совсем то, что нужно. допустим есть массив 2х3 и 3х3 со значениями 222222 и 111111111 соответственно. Складываем элементы первого и второго массива и получаем 12 и 9. массив 2х3 имеет большее значение и ему нужно присвоить значение 0 , а массиву 3х3 значение 1. К сожалению в данный момент не могу выложить даже срин блок-схемы программы, чтобы вы посмотрели. Единственное, еще конечно можно каждый массив разделить на количество элементов входящих в него. Может это и есть ключ к решению?! У меня в программе штук 10 нулевых областей было, но по мере изменения границы минимальной яркости они одна за другой исчезали. Может ли быть так, что значения массива больше 255 воспринимались как максимум и присваивали значение 0 данной области?!
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

Собственно получилось вот так(коряво) и неправильно :buuh: перебрал много вариантов, из которых этот "наилучший". Скрины прикладываю. Скорее всего что-то упустил или просто не знаю :dntknw:
Вложения
Безымянный.jpg
Безымянный2.jpg
Безымянный3.jpg
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

задам тогда другой вопрос: как с элемента Light Meter выдернуть среднее значение выделенной области.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3641
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2020
Благодарил (а): 3 раза
Поблагодарили: 35 раз
Контактная информация:

Re: Яркость выделенной области

Сообщение dadreamer »

AN-G писал(а): 13 янв 2021, 22:48задам тогда другой вопрос: как с элемента Light Meter выдернуть среднее значение выделенной области.
Проще всего перегнать картинку в массив U8 через IMAQ ImageToArray VI, задав Optional Rectangle (ограничивающий прямоугольник) в соответствии с вашим ROI. На выходе получите кусок вашего изображения в виде двумерного массива. И дальше в цикле For пройдите по массиву и возьмите Mean (т.е., среднее) от каждой строки и в конце возьмите Mean от результата - это и будет среднее значение выделенной области. Ну, или так тоже можно.
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

dadreamer писал(а): 14 янв 2021, 08:27
AN-G писал(а): 13 янв 2021, 22:48задам тогда другой вопрос: как с элемента Light Meter выдернуть среднее значение выделенной области.
Проще всего перегнать картинку в массив U8 через IMAQ ImageToArray VI, задав Optional Rectangle (ограничивающий прямоугольник) в соответствии с вашим ROI. На выходе получите кусок вашего изображения в виде двумерного массива. И дальше в цикле For пройдите по массиву и возьмите Mean (т.е., среднее) от каждой строки и в конце возьмите Mean от результата - это и будет среднее значение выделенной области. Ну, или так тоже можно.
Я сделал по-другому, но не могу сейчас присвоить эти значения соответствующим областям. Ума не приложу как это сделать. В "настоящей программе" у меня именно U8 и там изображение складывается из массива(с граббера). Прилагаю код, что сегодня удалось получить. Комментарии и критика приветствуется(я только начинаю изучать, поэтому буду рад любой информации)
Вложения
Mean Light Meter.vi
высчитываем среднее значение яркости области
(39.68 КБ) 15 скачиваний
Video_Bright_area_WEExp - копия.vi
сама программа
(78.78 КБ) 12 скачиваний
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3641
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2020
Благодарил (а): 3 раза
Поблагодарили: 35 раз
Контактная информация:

Re: Яркость выделенной области

Сообщение dadreamer »

AN-G писал(а): 15 янв 2021, 19:16Ума не приложу как это сделать.
Смотря для чего это в дальнейшем будет использоваться. В общем случае, заведите массив из кластеров - на каждую область по кластеру. В основной программе цикл For - самое удобное место, чтобы сформировать такой массив. А внутрь кластера уже можно запихнуть что угодно: координаты области (ROI/Bound Rect), площадь, средняя яркость и т.д. Тип кластера лучше сделать как Typedef, чтобы проще было потом вносить изменения.
AN-G
user
user
Сообщения: 80
Зарегистрирован: 22 мар 2014, 23:22
Версия LabVIEW: 2015
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Яркость выделенной области

Сообщение AN-G »

dadreamer писал(а): 15 янв 2021, 19:26
AN-G писал(а): 15 янв 2021, 19:16Ума не приложу как это сделать.
Смотря для чего это в дальнейшем будет использоваться. В общем случае, заведите массив из кластеров - на каждую область по кластеру. В основной программе цикл For - самое удобное место, чтобы сформировать такой массив. А внутрь кластера уже можно запихнуть что угодно: координаты области (ROI/Bound Rect), площадь, средняя яркость и т.д. Тип кластера лучше сделать как Typedef, чтобы проще было потом вносить изменения.
честно говоря вы для меня разговариваете на "птичьем языке" :think: Задачу я описал выше. По поводу цикла понял, а вот куда и как не понимаю. Может пример какой есть?
Ответить

Вернуться в «Для чайников»