Структура 16-битного изображения в градациях серого, создаваемого в C или LabView

У меня есть своего рода основная (но до сих пор нерешенная) проблема. Я создаю программу в LabView, в которой я собираю большое количество измерений в матрицу n x m, и мне нужно преобразовать эту матрицу в изображение для обработки/анализа с помощью ImageJ. Из-за разрешения и типа анализа, который мне нужен, это должно быть 16-битное изображение в градациях серого.

Теперь проблемы, с которыми я сталкиваюсь, следующие: LabView не имеет (в базовом пакете) какого-либо ВП для преобразования данных в 16-битные оттенки серого, только 8-битные, что убивает мой динамический диапазон. Я читал, что наборы инструментов Vision и Image в LabView могут иметь больше возможностей в этом смысле, но по причинам, связанным с компанией, я не могу получить доступ к этим наборам инструментов (т.е. мне приходится обходиться только полной версией для разработчиков).

Моя реакция на данный момент состоит в том, чтобы попытаться создать свой собственный VI для создания 16-битного изображения в градациях серого, будь то с использованием стандартных функций LabView, полностью с кодом C или их комбинаций. Однако я не нашел в Интернете достаточно четкой информации о том, как устроена 16-битная шкала серого, какие данные нужны и т. д.

Итак, мой вопрос двоякий: есть ли у кого-нибудь лучший способ создания этого 16-битного изображения в градациях серого (некоторый LabView VI, который я пропустил, внешнее программное обеспечение, которое я могу вызвать, и т. д.)? Если нет, есть ли у кого-нибудь подробная информация или код, полезный для создания такого изображения с нуля?

Любая помощь будет действительно полезной! Спасибо!


person JasonBourne    schedule 19.06.2012    source источник
comment
Просто не существует широкой поддержки или стандартизации форматов изображений 48bpp, учитывая, что для их просмотра требуется специальное оборудование. Работайте в обратном направлении и сосредоточьтесь на потребностях приложения, которое обрабатывает изображения. Обычно что-то медицинское, распространен DICOM. Посмотрите на LeadTools для поддержки библиотеки.   -  person Hans Passant    schedule 19.06.2012
comment
Я буду использовать ImageJ для обработки/анализа изображений, и кажется, что он может поддерживать 16-битные изображения в градациях серого. Я не уверен, почему вы упомянули изображения с 48 битами на пиксель... Мне просто нужно 16 бит на пиксель, так как я буду использовать оттенки серого, а не RGB.   -  person JasonBourne    schedule 19.06.2012


Ответы (3)


Установите модуль IMAQ (отличный от набора инструментов Vision), он бесплатный и имеет базовые возможности управления изображениями. Я использую его для создания 16-битных изображений в градациях серого.

Создание 16-битного изображения в градациях серого

Драйвер IMAQ можно найти здесь (4.6.4 по состоянию на июнь 2012 г.).

person CharlesB    schedule 20.06.2012
comment
Привет, CharlesB, приятно слышать, что это может быть решением... однако ссылка не работает (по крайней мере, для меня). Я загрузил программное обеспечение Vision Acquisition, когда искал то, что вы упомянули, но оно просит меня активировать его. Любые идеи? - person JasonBourne; 20.06.2012
comment
Я исправил ссылку, можете попробовать еще раз? - person CharlesB; 20.06.2012
comment
IMAQ — это бесплатный драйвер для получения изображений, который бесплатен, а программное обеспечение Vision Acquisition — расширенное дополнение к LabVIEW. - person CharlesB; 20.06.2012
comment
Оно работает!!!! Большое спасибо, чувак, ты сэкономил мне много времени и сил. Драйвер IMAQ — это именно то, что мне было нужно. Хотя изображения по-прежнему выглядят 8-битными из-за того, как их отображает Windows, ImageJ распознает их как 16-битные изображения в градациях серого, что мне и было нужно для анализа. - person JasonBourne; 20.06.2012

Поскольку вы упомянули 16-битные оттенки серого, я интерпретирую это как то, что вам нужно 16 бит точности на пиксель.

Итак, если вам не удается создать это непосредственно в оттенках серого, возможно, вы можете создать его как изображение в реальном цвете и просто закодировать свои шестнадцать бит, разделив их, например, на красный и зеленый компоненты?

Таким образом, для каждого 16-битного значения пикселя x вы должны установить red = x / 256;, green = x % 256; и blue = 0;.

person unwind    schedule 19.06.2012
comment
Я думал об этом в какой-то момент, но причина, по которой мне это нужно в оттенках серого, заключается в том, что мне нужно выполнить обработку позже (например, анализ частиц), которая требует, чтобы изображения были в формате оттенков серого. Я думаю, что кодирование моих 16 бит в два цвета RGB могло бы работать для создания изображения, но было бы проблематично для этого анализа. - person JasonBourne; 19.06.2012

Вы уже пытались опубликовать этот вопрос на форумах NI? Возможно, есть и другие разработчики LabVIEW, которые пытались сделать то же самое, что и вы. Надеюсь, вам не придется начинать с нуля. https://bit.ly/NIForums

Вы проверили, можете ли вы получить какие-либо пробные версии наборов инструментов и дополнений LabVIEW Vision?

И если у вашей компании есть SSP (платный вариант поддержки, хотя обычно вы получаете один год бесплатно при покупке LabVIEW), я бы также посоветовал вам позвонить инженерам службы поддержки. Они могут научить вас, как обойти некоторые текущие ограничения.

person LabVIEWHelp    schedule 19.06.2012
comment
Да, я тоже писал там, на данный момент похоже, что в полной версии для разработчиков нет встроенной функции, которая могла бы помочь. Я все еще оглядываюсь, чтобы увидеть, способны ли наборы инструментов - person JasonBourne; 20.06.2012