Страница 1 из 2

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

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

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

Добавлено: 27 дек 2020, 22:14
AN-G
Может я неясно задачу обрисовал? Просмотры и скачивания есть, а ни одного комментария по данной теме :dntknw:

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

Добавлено: 28 дек 2020, 00:05
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
Станет немного яснее.

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

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

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

Добавлено: 28 дек 2020, 11:26
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. Самое логичное, размещать в центре масс.

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

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

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

Добавлено: 11 янв 2021, 20:31
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 соответственно.

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

Добавлено: 11 янв 2021, 21:20
IvanLis
AN-G писал(а): 11 янв 2021, 20:31 В итоге получилось, что у меня в программе отметились области с максимальным значением яркости точки под цифрой 0, чуть менее яркие 1 и 2 соответственно.
Считайте, что уже все готово :super:

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

Добавлено: 11 янв 2021, 21:38
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 данной области?!

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

Добавлено: 12 янв 2021, 21:30
AN-G
Собственно получилось вот так(коряво) и неправильно :buuh: перебрал много вариантов, из которых этот "наилучший". Скрины прикладываю. Скорее всего что-то упустил или просто не знаю :dntknw:

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

Добавлено: 13 янв 2021, 22:48
AN-G
задам тогда другой вопрос: как с элемента Light Meter выдернуть среднее значение выделенной области.

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

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

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

Добавлено: 15 янв 2021, 19:16
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 и там изображение складывается из массива(с граббера). Прилагаю код, что сегодня удалось получить. Комментарии и критика приветствуется(я только начинаю изучать, поэтому буду рад любой информации)

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

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

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

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