crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как отобразить 16-битный серый снимок
Emelya
  опции профиля:
сообщение 8.9.2014, 9:58
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.8.2014
Пользователь №: 4203

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.
Есть медицинский файл, полученный от рентгеновского аппарата. В нем черно-белый снимок.
Подскажите, как можно вывести его на экран? Дело в том, что на пиксел приходится 16-бит, то есть в изображении могут присутствовать более 65 000 оттенков серого. В классе QImage такого формата нет, почти все форматы это RGB. В них можно отразить серого на 8-бит, это 256 оттенков. Изображение при этом получается рыхлое не контрастное.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.9.2014, 11:37
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Сразу видится два способа:

1. Использовать RGBA, RGB содержит старший бит, Alpha канал младший. Не совсем уверен как это будет выглядет, но попробовать дешево.
2. Если видеокарта поддерживает 16 бит на канал, то использовать этот режим напрямую через OpenGL, т.е. GL_RGBA16UI например.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 8.9.2014, 11:39
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


Как так нет? А формат QImage::Format_ARGB32 и ему подобные? Как раз 32 бита.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.9.2014, 12:00
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата(ahalaj @ 8.9.2014, 12:39) *
Как так нет? А формат QImage::Format_ARGB32 и ему подобные? Как раз 32 бита.

Нужно 16 бит на канал, это 64 бита.

Попробовал первый вариант, вроде бы результат ничего, только НЕ нужно использовать *_Premultiplied. Но это конечно обман зрения, потому что у меня глубина цвета экрана 32 бита.

Сообщение отредактировал lanz - 8.9.2014, 12:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Emelya
  опции профиля:
сообщение 8.9.2014, 12:02
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.8.2014
Пользователь №: 4203

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 8.9.2014, 14:37) *
Сразу видится два способа:

1. Использовать RGBA, RGB содержит старший бит, Alpha канал младший. Не совсем уверен как это будет выглядет, но попробовать дешево.
2. Если видеокарта поддерживает 16 бит на канал, то использовать этот режим напрямую через OpenGL, т.е. GL_RGBA16UI например.



Я через OpenGL не думал, надо попробовать.
А вот RGB я повсякому заполнял. Сначала младшим вайтом RGB заполнял, затем старшим, затем тоже самое с альфа каналом. Получается ерунда.
Мне вообще кажется, что картинку можно получить либо через какой-нибудь другой класс, либо писать свой класс наследуя его от QImage.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.9.2014, 12:06
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Ерунда получится в любом случае, поскольку видеокарта имеет скорее всего 8 бит на канал и вы либо сами ужмете, либо драйвер это сделает.
По факту у вас получается HDR картинка, поэтому я бы заходил на задачу где то отсюда:
http://en.wikipedia.org/wiki/Tone_mapping
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Emelya
  опции профиля:
сообщение 8.9.2014, 12:09
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.8.2014
Пользователь №: 4203

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ahalaj @ 8.9.2014, 14:39) *
Как так нет? А формат QImage::Format_ARGB32 и ему подобные? Как раз 32 бита.



А я вот не полял, как можно в RGB_32 запихать 64-бит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.9.2014, 12:12
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Скорее всего вам понадобится динамически менять диапазон который вы отображаете, например как здесь:
http://www.eyephysics.com/Madena/MadenaDICOM.html

Сообщение отредактировал lanz - 8.9.2014, 12:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Emelya
  опции профиля:
сообщение 8.9.2014, 12:20
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.8.2014
Пользователь №: 4203

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Emelya @ 8.9.2014, 15:09) *
Цитата(ahalaj @ 8.9.2014, 14:39) *
Как так нет? А формат QImage::Format_ARGB32 и ему подобные? Как раз 32 бита.



А я вот не полял, как можно в RGB_32 запихать 64-бит?


Спасибо за ссылочки, почитаю потом, сейчас бежать надо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 10:49