Андрей Светлов
Март 3, 2011 09:44:22
Levelup
Могу я с вами связаться по аське или скайпу?
Нет. Это займет много времени и мало чем поможет.
Levelup
Март 3, 2011 10:02:39
Хорошо, тогда скажите, что именно тут непонятно.
Levelup
Март 3, 2011 10:09:07
Входное изображение обладает очень большим динамическим диапазоном: при 16 битах отношение самого яркого фрагмента (с интенсивностью = 65535) к самому слабому (интенсивность 1) равно 65535, тогда как мониторы понимают обычно в 256 раз меньший диапазон (при 8 битах на цветовой канал это 255:1). Идея состоит в том, чтобы выделить сравнительно небольшой интервал интенсивностей (Imin < I < Imax), в котором сосредоточена основная информация, и отобразить его на весь доступный диапазон RGB (от 0 до 255), чтобы этот диапазон был представлен наиболее полно. При этом интенсивности слабее Imin (фон) отображаются в черный цвет, а ярче Imax - в белый. Так что задача - дать возможность человеку на ходу менять значения фона и диапазона. Обычно при их изменении программа визуализации заново применяет линейное преобразование и для кадра 4Кх4К на это уходят десятые секунды, если не секунда, т.е. ни о каком реальном времени (~25 FPS) речи нет. Этого можно добиться на OpenGL-е, который такими вещами занимается средствами видеокарты, в которой для этого есть сейчас сотни конвейеров. То есть нужно загрузить массив в GPU и отображать его там, не выводя обратно.
Андрей Светлов
Март 3, 2011 10:22:53
Ага. А размер картинки? И почему речь идет о 25 FPS? Какие frame per second вообще? Вы что, анимацию проигрываете?
Картинка - grayscale при 16 битном канале, цвета нет?
Levelup
Март 3, 2011 10:27:46
размер картинки 4Кх4К (т.е. шириной и высотой в 4096 пикселов). Нужно чтобы изменяя параметры фона и диапазона в реальном времени изменялось изображение, а не перерисовывалось заново в течение целой секунды. Картинка - grayscale при 16 битном канале, цвета нет - все верно!
Андрей Светлов
Март 3, 2011 10:36:48
Динамический диапазон 16 бит пересчитываем на 8 бит автоматически, без всяких ползунков настроек? Это я пытаюсь представить, как оно будет выглядеть.
Смотрим всю картинку на шести мониторах, чтобы в целом вышло 4Кх4К - или таскаем, масштабируем, показываем только часть в окошке?
Надписи там всякие поверх картинки, отметки и прочее?
И самое непонятное - откуда цифра в 1 секунду?
Levelup
Март 3, 2011 12:16:48
Для начала пусть будет автоматически. Да, таскаем, масштабируем, часть в окошке. Надписей, отметок никаких нет. Дело в том, что в будущем в расчетную формулу будет добавлена нелинейность (для расчета гистограммы, палитры и т.п), поэтому и привожу такую цифру.
Андрей Светлов
Март 3, 2011 18:26:49
Считать гистограмму на GPU в OpenGL, да еще и на 64к элементов… Выберите задачку попроще.
Это помимо того, что OpenGL сам по себе имеет довольно большой порог вхождения.
Вы не пробовали обойтись одним CPU?
Если не хватает скорости - напишите на Cython ваше преобразование массива. Это будет легче.
Шейдеры совсем не похожи на привычный numpy подход.
Levelup
Март 3, 2011 19:03:09
Одним CPU точно не обойтись. Бог с ней, с гистограммой. С яркостью не подскажите как справиться?
Андрей Светлов
Март 3, 2011 22:05:38
Мы опять о чем-то абстрактном говорим - или вы попробовали сделать преобразования на С и вышло недостаточно быстро?