автозамена zscalesize в intens. graph? для Pict indicator

Обсуждение, связанное с разработкой ПО верхнего уровня
Ответить
trittch
interested
interested
Сообщения: 5
Зарегистрирован: 24 мар 2012, 02:30
Версия LabVIEW: 8.5
Контактная информация:

автозамена zscalesize в intens. graph? для Pict indicator

Сообщение trittch »

Здравствуйте,

Решаю такую задачу:
Хочу в LabVIEW сделать масштабируемый Picture Indicator с цветной палитрой, соответствующей jet colormap в MATLAB, да такой, чтобы слева выводилась легенда значений по оси z (ColorRange), и чтобы на этой легенде правильно отображались значения также для нецелочисленных массивов. Масштабируемый - значит что размер индикатора автоматом подстраивается под картинки с разным разрешением (256х256, 512х512)
Вроде бы почти все сделал (криво и через одно место вероятно, но как уж сумел): рядом с Picture выводится индикатор Intensity graph, для ColorRange. Через Property Node размеры Picture и Intensity graph синхронизуются, а вот сделать, чтобы ось значений z для Intensiy graph также изменяла свой размер при увеличении разрешения, мне не удается. Загвоздка в том, что для частей элементов управления, состоящих из нескольких блоков (цифры значений по оси z, метки промежуточных делений...) Property node нельзя переключить с Read на Write.
http://digital.ni.com/public.nsf/allkb/ ... FC00041D0A
Но и по отдельности их размеры никак автоматически не удается изменять - таких свойств просто нет в Property Node. (тут поправка - у меня стоит Lаbview версии 8.5. Может потом эта опция и была проработана лучше?, но хочется сделать именно для 8.5)

Помогите пожалуйста разобраться! Тут всплывает сразу несколько вопросов:
1. Помогите победить именно этот способ задания Picture Indicator'а с цветной палитрой, и легендой. Т.е. я хочу понять, что именно я не понимаю в тонкостях использования Property Node.
Код прикладываю:
http://www.my-files.ru/ks1cca
В архиве папка с подпрограммами, запустите пожалуйста Non-Uniform illumination.vi, сгенерируйте картинки запустив программу, а потом через блок диаграмму откройте "Create Color-jet Image (SubVI)". Проблема именно в нем. Если в Non-Uniform illumination менять N, т.е. разрешение картинки, то сами картинки масштабируются, а вот цифры в ColorRange-Intensity graph размера не меняют. (Там еще и Intensity graph в под-приборе верхнего уровня размера не меняет пока-что, но в самом Create Color-jet Image (SubVI) - размер легенды меняется).
Хочу сделать именно через Pictrue indicator, т.к. есть необходимость сохранять картинку в файл для дальнейшей обработки.

2. Раз уж решил задать вопрос, воспользуюсь случаем, и спрошу еще: может кто знает, как сделать такой индикатор каким-то другим способом?
Я знаю про возможности Vision, но не хочу с ним связываться, т.к. чтобы запустить скомпилированную exe-программу написанную с использованием Vision'овхсих библиотек каждому пользователю придется покупать Vision Run-Time Engine за 500 баксов чтоли (давно я это узнавал, может ситуация и изменилась, но в любом случае, хочется обойтись без Vision)
Мне конкретно в моем Picture индикаторе не нравится еще следующее: чтобы картинка изменяла свой масштаб в главной программе (например, в Non-Uniform illumination.vi), приходится еще выносить reference из подприбора. Это занимает много места на блок-диаграмме главного подприбора. Я вообще хочу закинуть этот индикатор в user.lib и использовать как пользовательский индикатор для картинок, чтобы был всегда под рукой. Но пока что не разобрался, как (и вообще можно ли?) сделать свой control, который бы функционально состоял не на основе какого-то существующего ctrl, а включал в себя сразу элементы 2 ctrl. (как в этом примере - картинка от Image indicator, а шкала z от intensity graph)

3. Наверняка есть более простой вариант с Intensity graph. Но мне он как то с самого начала не полюбился, картинка не квадратная, изображение как-то не всегда корректно отображается, палитра скачет.. В общем, накидайте своих примеров, нестандартных Intensity graph'ов пожалуйста, если таковые имеются.

И последнее: сохраните свои примеры для Labview версии 8.5!

Заранее спасибо!
Последний раз редактировалось trittch 09 ноя 2015, 03:07, всего редактировалось 2 раза.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение Artem.spb »

Файл сейчас не скачать, поэтому исходники пока не смотрел
Но если дело только в этом:
trittch писал(а): т.к. есть необходимость сохранять картинку в файл для дальнейшей обработки.
то не проще ли сделать так?
img.png
img.png (23.69 КБ) 10076 просмотров
2. Раз уж решил задать вопрос, воспользуюсь случаем, и спрошу еще: может кто знает, как сделать такой индикатор каким-то другим способом?
есть XControl, но не помню, были ли они в 8.5.
Там зашивается любая функциональность по обработке и отображению входных данных, а ведёт себя готовый комплект как обычный контрол/индикатор, т.е. индикатор на ФП и терминал на БД
trittch
interested
interested
Сообщения: 5
Зарегистрирован: 24 мар 2012, 02:30
Версия LabVIEW: 8.5
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение trittch »

то не проще ли сделать так
Про такой вариант я был в курсе, но не рассматривал его всерьез, поскольку в изображениях такого рода у нас хранятся точные количественные данные, которые мы записываем в файл в виде картинки (как если бы они хранились виде txt-файла, только картинку глаз читает моментально, а глядя на таблицу еще пойди представь, что за распределение там представлено). И еще, при необходимости, мы эти картинки потом снова считываем из файла, и снова "обрабатываем". Правда, до сих пор я пользовался стандартными grayscale изображениями, без легенды, обозначающей, что показано по оси z.
Стандартный Intensity Graph есть не совсем полноценная картинка, она масштабируется в соответствии с размером окна, а если из Intensity Graph выводится изображение, то саму картинку еще придется вырезать. Конечно, наверняка автоматический подбор правильного размера изображения и вырезание самой картинки тоже можно сделать, но будет ли этот способ проще, чем тот, который я уже начал делать? При этом, вопрос с масштабированием легенды тоже остается не решен.
Изображение
есть XControl, но не помню, были ли они в 8.5.
За XControl - большое спасибо, они есть в 8.5., буду изучать, возможно это и окажется самый простой путь, по крайней мере, с его помощью удастся обойтись без всяких лишних reference в БД.

Но тем не менее, вопрос c Property node, в котором нельзя переключить опцию с Read на Write для элементов управления, состоящих из нескольких блоков, а по частям опции блоков непонятно как настраивать - пока открыт. Просто интересно, поскольку как-то я в него уперся рогом.

В дополнение к вопросу 3:
Как-то давно мне еще попался такой вот цветной "Intensity Graph",
(см.файл http://www.my-files.ru/843mum)
но я что-то не пойму, как они сделали ему такую цветную палитру? Если сравнивать с матлабом, то это скорее colormap hsv. А как они вообще меняются?
Последний раз редактировалось trittch 09 ноя 2015, 03:16, всего редактировалось 4 раза.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение Artem.spb »

Я плохо понимаю, что вас не устраивает в коде сейчас нет времени копаться.
Стандартные элементы хороши тем, что их не нужно изобретать, и если они устраивают, лучше пользоваться ими.
Размер графика менять легко:
img1.png
img2.png
И вытащить картинку только графика тоже просто. Не понял только, почему права-низ не корректный. Но можно вычесть константу, или совсем шкалу скрыть, тогда этих полос не будет.

Если не устраивает, что при этом легенда не меняется то отрисуйте рядом свою
https://decibel.ni.com/content/docs/DOC-9294/version/1

В присланном коде нет файла, про который задавался вопрос, так что тут совсем ничего не могу сказать.
trittch
interested
interested
Сообщения: 5
Зарегистрирован: 24 мар 2012, 02:30
Версия LabVIEW: 8.5
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение trittch »

Вот поковырял немного вариант, предложенный Artem.spb:
Изображение
Вроде, пока он кажется чуть-чуть попроще, но проблема с масштабирванием линейки color range в соответствии с размерами рисунка остается.

Для того, чтобы записывать "количественные данные" в виде картинки в файл, можно было бы вырезать активную область, но координаты левого-верхнего угла в intensity graph нестабильны и будут меняться при разных размерах изображения
(разное число разрядов для картинки разного разрешения)
http://www.my-files.ru/ade6lr
Последний раз редактировалось trittch 09 ноя 2015, 03:12, всего редактировалось 2 раза.
trittch
interested
interested
Сообщения: 5
Зарегистрирован: 24 мар 2012, 02:30
Версия LabVIEW: 8.5
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение trittch »

Я плохо понимаю, что вас не устраивает
Не устраивает, а точнее, не получается сделать, чтобы размер легенды изменялся автоматически вместе с цифрами, расшифровывающими значения чисел, кодируемых определенным цветом.
Т.е. берем например картинку размера 128х128 - картина строится маленькая, и высота легенды - тоже маленькая.
Берем картинку 1024х1024 - картинка становится большой, и легенда - тоже длинной, под стать высоте картинки (ну чтобы сохранить ее и сразу вставить в научную статью :-) )
Стандартные элементы хороши тем, что их не нужно изобретать, и если они устраивают, лучше пользоваться ими.
В том то и дело, что не устраивает intensity graph. Уже писал почему - хочется картинка содержала именно столько пикселей, сколько на ней есть, и чтобы "ничего при этом не ездило", но в то же время хочется, чтобы была легенда справа масштабируемая под стать размерам изображения (ну и желательно, чтобы подписи снизу и справа были. Т.е. чтобы было примерно, как в Маталабе картинки строятся, но число пикселей чтобы не терялось),
Размер графика менять легко:
Это я разобрался (выше выложил тоже картинку и код)
Но можно вычесть константу, или совсем шкалу скрыть
Ну примерно так я и сделал. с помощью customize control сделал прозрачным обрамление intensity graph, а когда она вытаскивается в картинку - сделал фон белым. вроде все хорошо, но появились вопросы, которые я задал в 5 сообщении
Если не устраивает, что при этом легенда не меняется то отрисуйте рядом свою
Именно так я и делал, отрисовывал свою, и подприбор, который по ссылке вы привели - как раз использовался в первом сообщении.
Но кроме изображения легенды есть потребность обозначить числа, которые расшифровывают значения, кодируемые определенным цветом. Я пытался взять эти числа из легенды к Intensity graph, но она не масштабируется.
В присланном коде нет файла, про который задавался вопрос, так что тут совсем ничего не могу сказать.
ВЫ про какой файл говорите? в первой сообщении ссылка на Question.zip. Там весь код, хоть и громоздкий.
В третьем сообщении - просто Intensity Graph, в котором поменяли как-то цвета с сине-белых на палитру hsv. Я не понимаю, как они так сделали? при этом никакого ctrl нет, палитра хранится в памяти прибора индикатора. Может заодно и этому научите?
Аватара пользователя
dadreamer

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

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение dadreamer »

trittch писал(а):но я что-то не пойму, как они сделали ему такую цветную палитру?
2015-11-09_10-29-39.jpg
2015-11-09_10-29-39.jpg (4.88 КБ) 10011 просмотров
trittch писал(а):http://www.my-files.ru/ks1cca
trittch писал(а):http://www.my-files.ru/843mum
trittch писал(а):http://www.my-files.ru/ade6lr
Правила форума писал(а):10. Запрещается размещать изображения на внешних хостингах. Прикрепляйте изображения к посту (вкладка "добавить вложения").
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение Artem.spb »

Я вот люблю позаморачиваться, чтобы автоматизировать рутину. Но сейчас есть подозрение, что руками вырезать будет быстрее, чем долбиться головой об стену.
trittch писал(а):но координаты левого-верхнего угла в intensity graph нестабильны и будут меняться при разных размерах изображения
координаты угла вытаскиваются из свойств точно так же, как размеры области.
Именно так я и делал, отрисовывал свою, и подприбор, который по ссылке вы привели - как раз использовался в первом сообщении.
Но кроме изображения легенды есть потребность обозначить числа, которые расшифровывают значения, кодируемые определенным цветом. Я пытался взять эти числа из легенды к Intensity graph, но она не масштабируется.
Если уж хочется поизвращаться, то вот несколько вариантов:
Под картинку-легенду спрятать какой-нибудь Slide, так, чтобы были видны только цифры. И растягивать его со шкалой.
Поставить ещё один intensity graph, на который выводить значения min..max в один столбец. И растягивать его вместе с основным графиком. тогда шакала графика будет типа шкалой легенды, а сам график - этой самой легендой.
trittch
interested
interested
Сообщения: 5
Зарегистрирован: 24 мар 2012, 02:30
Версия LabVIEW: 8.5
Контактная информация:

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение trittch »

Правила форума
Извините, я сначала не нашел формы добавить вложение, т.к. использовал опцию быстрого ответа. Подумал было даже, что добавлять файлы в этом форуме могут только давние пользователи с хорошей кармой :D
Я перезалил файлы на всякий случай как положено.
Я вот люблю позаморачиваться, чтобы автоматизировать рутину. Но сейчас есть подозрение, что руками вырезать будет быстрее, чем долбиться головой об стену.
Ну мы в общем-то долго вырезали руками, но всегда появляются новые студенты, которым надо объяснять "рисунок в статью или тезис вставил, а расшифровку цветовых значений забыл, исправь". Вот надоело, решил заняться этим вопросом. Надеялся, конечно, что есть какой-то более простой способ сделать это.
координаты угла вытаскиваются из свойств точно так же, как размеры области.
Имеется ввиду, координаты угла самой картинки на графике? Сейчас посмотрю. Если так, то это, конечно, поможет.

Ну в любом случае спасибо вам за помощь. Узнал кое-что полезное. Свойство "ColorTbl" теперь конечно кажется очевидным. Но как-то не сообразил разыскать его, т.к. мало использовал intesity graph.
В общем, все просто, когда разберешься.
Вложения
Question.zip
(808.2 КБ) 199 скачиваний
Question-1.vi
(56.73 КБ) 196 скачиваний
Question-2.vi
(58.62 КБ) 191 скачивание
Capture++.PNG
Capture+.PNG
Аватара пользователя
dadreamer

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

Re: автозамена zscalesize в intens. graph? для Pict indicato

Сообщение dadreamer »

trittch писал(а):В том то и дело, что не устраивает intensity graph. Уже писал почему - хочется картинка содержала именно столько пикселей, сколько на ней есть, и чтобы "ничего при этом не ездило", но в то же время хочется, чтобы была легенда справа масштабируемая под стать размерам изображения (ну и желательно, чтобы подписи снизу и справа были. Т.е. чтобы было примерно, как в Маталабе картинки строятся, но число пикселей чтобы не терялось)
Легенду (по идее это называется Ramp) программно масштабировать у Intensity Graph нельзя, т.к. нет доступных свойств/методов контрола. И вряд ли это изменится в будущем. Вы можете попробовать какие-нибудь сторонние ActiveX/.NET контролы. Есть вот такая тема на форуме NI, правда там обсуждается платный компонент, однако выглядит весьма красиво (особенно в комментах картинка). Есть ещё вот такие темы, посвящённые Microsoft'овским компонентам (правда, на мой взгляд, они несколько "топорные" и там вроде бы нет сабжа):
https://decibel.ni.com/content/docs/DOC-9946
https://decibel.ni.com/content/docs/DOC-12073
https://code.msdn.microsoft.com/Samples ... 61#content
Я нашёл ещё вот такой довольно неплохой набор компонентов - DAQBench. Там есть парочка нужных контролов: Intensity Chart и Intensity Graph. Компоненты скачиваются бесплатно после регистрации на сайте. Однако их в процессе установки требуется зарегистрировать, код я вам выслал в ЛС.
Выглядит это как-то так:
DIntenGraph_FP.jpg
DIntenGraph_BD.jpg
daqbench.vi
lv8.5
(9.46 КБ) 213 скачиваний
Легенда масштабируется при растягивании/сжатии графика. Есть отдельный метод для сохранения картинки контрола в jpeg-файл. В свойствах графика полно различных настроек. Более детально я не копался, оставляю это вам. :wink:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Лицевая панель»