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

Обсуждение, связанное с разработкой ПО верхнего уровня

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

Postby trittch on 08 Nov 2015, 05:17

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

Решаю такую задачу:
Хочу в 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/C084C87C51976399862562FC00041D0A
Но и по отдельности их размеры никак автоматически не удается изменять - таких свойств просто нет в 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!

Заранее спасибо!
Last edited by trittch on 09 Nov 2015, 03:07, edited 2 times in total.
trittch
interested
interested
 
Posts: 5
Joined: 24 Mar 2012, 02:30
LabVIEW Version: 8.5
Karma: 0

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

Postby Artem.spb on 08 Nov 2015, 13:11

Файл сейчас не скачать, поэтому исходники пока не смотрел
Но если дело только в этом:
trittch wrote: т.к. есть необходимость сохранять картинку в файл для дальнейшей обработки.

то не проще ли сделать так?

img.png
img.png (23.69 KiB) Viewed 5571 times


2. Раз уж решил задать вопрос, воспользуюсь случаем, и спрошу еще: может кто знает, как сделать такой индикатор каким-то другим способом?

есть XControl, но не помню, были ли они в 8.5.
Там зашивается любая функциональность по обработке и отображению входных данных, а ведёт себя готовый комплект как обычный контрол/индикатор, т.е. индикатор на ФП и терминал на БД
Artem.spb
expert
expert
 
Posts: 1295
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

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

Postby trittch on 09 Nov 2015, 00:58

то не проще ли сделать так

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

есть XControl, но не помню, были ли они в 8.5.

За XControl - большое спасибо, они есть в 8.5., буду изучать, возможно это и окажется самый простой путь, по крайней мере, с его помощью удастся обойтись без всяких лишних reference в БД.

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

В дополнение к вопросу 3:
Как-то давно мне еще попался такой вот цветной "Intensity Graph",
(см.файл http://www.my-files.ru/843mum)
но я что-то не пойму, как они сделали ему такую цветную палитру? Если сравнивать с матлабом, то это скорее colormap hsv. А как они вообще меняются?
Last edited by trittch on 09 Nov 2015, 03:16, edited 4 times in total.
trittch
interested
interested
 
Posts: 5
Joined: 24 Mar 2012, 02:30
LabVIEW Version: 8.5
Karma: 0

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

Postby Artem.spb on 09 Nov 2015, 01:54

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

img2.png

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

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

В присланном коде нет файла, про который задавался вопрос, так что тут совсем ничего не могу сказать.
Artem.spb
expert
expert
 
Posts: 1295
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

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

Postby trittch on 09 Nov 2015, 02:20

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

Для того, чтобы записывать "количественные данные" в виде картинки в файл, можно было бы вырезать активную область, но координаты левого-верхнего угла в intensity graph нестабильны и будут меняться при разных размерах изображения
(разное число разрядов для картинки разного разрешения)
http://www.my-files.ru/ade6lr
Last edited by trittch on 09 Nov 2015, 03:12, edited 2 times in total.
trittch
interested
interested
 
Posts: 5
Joined: 24 Mar 2012, 02:30
LabVIEW Version: 8.5
Karma: 0

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

Postby trittch on 09 Nov 2015, 02:46

Я плохо понимаю, что вас не устраивает

Не устраивает, а точнее, не получается сделать, чтобы размер легенды изменялся автоматически вместе с цифрами, расшифровывающими значения чисел, кодируемых определенным цветом.
Т.е. берем например картинку размера 128х128 - картина строится маленькая, и высота легенды - тоже маленькая.
Берем картинку 1024х1024 - картинка становится большой, и легенда - тоже длинной, под стать высоте картинки (ну чтобы сохранить ее и сразу вставить в научную статью :-) )

Стандартные элементы хороши тем, что их не нужно изобретать, и если они устраивают, лучше пользоваться ими.

В том то и дело, что не устраивает intensity graph. Уже писал почему - хочется картинка содержала именно столько пикселей, сколько на ней есть, и чтобы "ничего при этом не ездило", но в то же время хочется, чтобы была легенда справа масштабируемая под стать размерам изображения (ну и желательно, чтобы подписи снизу и справа были. Т.е. чтобы было примерно, как в Маталабе картинки строятся, но число пикселей чтобы не терялось),

Размер графика менять легко:

Это я разобрался (выше выложил тоже картинку и код)

Но можно вычесть константу, или совсем шкалу скрыть

Ну примерно так я и сделал. с помощью customize control сделал прозрачным обрамление intensity graph, а когда она вытаскивается в картинку - сделал фон белым. вроде все хорошо, но появились вопросы, которые я задал в 5 сообщении

Если не устраивает, что при этом легенда не меняется то отрисуйте рядом свою

Именно так я и делал, отрисовывал свою, и подприбор, который по ссылке вы привели - как раз использовался в первом сообщении.
Но кроме изображения легенды есть потребность обозначить числа, которые расшифровывают значения, кодируемые определенным цветом. Я пытался взять эти числа из легенды к Intensity graph, но она не масштабируется.

В присланном коде нет файла, про который задавался вопрос, так что тут совсем ничего не могу сказать.

ВЫ про какой файл говорите? в первой сообщении ссылка на Question.zip. Там весь код, хоть и громоздкий.
В третьем сообщении - просто Intensity Graph, в котором поменяли как-то цвета с сине-белых на палитру hsv. Я не понимаю, как они так сделали? при этом никакого ctrl нет, палитра хранится в памяти прибора индикатора. Может заодно и этому научите?
trittch
interested
interested
 
Posts: 5
Joined: 24 Mar 2012, 02:30
LabVIEW Version: 8.5
Karma: 0

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

Postby dadreamer on 09 Nov 2015, 08:33

trittch wrote:но я что-то не пойму, как они сделали ему такую цветную палитру?

2015-11-09_10-29-39.jpg
2015-11-09_10-29-39.jpg (4.88 KiB) Viewed 5506 times

trittch wrote:http://www.my-files.ru/ks1cca

trittch wrote:http://www.my-files.ru/843mum

trittch wrote:http://www.my-files.ru/ade6lr

Правила форума wrote:10. Запрещается размещать изображения на внешних хостингах. Прикрепляйте изображения к посту (вкладка "добавить вложения").
User avatar
dadreamer
professor
professor
 
Posts: 3043
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 750
I/O VIP vision internet

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

Postby Artem.spb on 09 Nov 2015, 13:30

Я вот люблю позаморачиваться, чтобы автоматизировать рутину. Но сейчас есть подозрение, что руками вырезать будет быстрее, чем долбиться головой об стену.

trittch wrote:но координаты левого-верхнего угла в intensity graph нестабильны и будут меняться при разных размерах изображения

координаты угла вытаскиваются из свойств точно так же, как размеры области.

Именно так я и делал, отрисовывал свою, и подприбор, который по ссылке вы привели - как раз использовался в первом сообщении.
Но кроме изображения легенды есть потребность обозначить числа, которые расшифровывают значения, кодируемые определенным цветом. Я пытался взять эти числа из легенды к Intensity graph, но она не масштабируется.

Если уж хочется поизвращаться, то вот несколько вариантов:
Под картинку-легенду спрятать какой-нибудь Slide, так, чтобы были видны только цифры. И растягивать его со шкалой.
Поставить ещё один intensity graph, на который выводить значения min..max в один столбец. И растягивать его вместе с основным графиком. тогда шакала графика будет типа шкалой легенды, а сам график - этой самой легендой.
Artem.spb
expert
expert
 
Posts: 1295
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

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

Postby trittch on 09 Nov 2015, 19:21

Правила форума

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

Я вот люблю позаморачиваться, чтобы автоматизировать рутину. Но сейчас есть подозрение, что руками вырезать будет быстрее, чем долбиться головой об стену.

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

координаты угла вытаскиваются из свойств точно так же, как размеры области.

Имеется ввиду, координаты угла самой картинки на графике? Сейчас посмотрю. Если так, то это, конечно, поможет.

Ну в любом случае спасибо вам за помощь. Узнал кое-что полезное. Свойство "ColorTbl" теперь конечно кажется очевидным. Но как-то не сообразил разыскать его, т.к. мало использовал intesity graph.
В общем, все просто, когда разберешься.
Attachments
Question.zip
(808.2 KiB) Downloaded 85 times
Question-1.vi
(56.73 KiB) Downloaded 92 times
Question-2.vi
(58.62 KiB) Downloaded 89 times
Capture++.PNG
Capture+.PNG
trittch
interested
interested
 
Posts: 5
Joined: 24 Mar 2012, 02:30
LabVIEW Version: 8.5
Karma: 0

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

Postby dadreamer on 10 Nov 2015, 14:58

trittch wrote:В том то и дело, что не устраивает 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 KiB) Downloaded 102 times

Легенда масштабируется при растягивании/сжатии графика. Есть отдельный метод для сохранения картинки контрола в jpeg-файл. В свойствах графика полно различных настроек. Более детально я не копался, оставляю это вам. :wink:
User avatar
dadreamer
professor
professor
 
Posts: 3043
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 750
I/O VIP vision internet


Return to Лицевая панель

Who is online

Users browsing this forum: No registered users and 3 guests

cron