Графика в IDL с использованием POLYFILL

Мой руководитель предложил следующий код для извлечения вертикальных срезов из набора изображений 40 x 40 и построения их в виде временного ряда (24 часа), с изображениями, хранящимися в массиве «images = FLTARR(no_images, 40,40)» и соответствующие времена в массиве UT=FLTARR(no_images):

PLOT, [0],[0], /NODATA, XRANGE=[0,24], XSTYLE, YRANGE=[-40,40], /YSTYLE

FOR i=0, no_images-1 DO BEGIN
FOR j=0, 39 DO BEGIN
POLYFILL, UT(i)+[0,0,1,1]*2/60.0, (j+[0,1,1,0])*2-40, COL=[work out what colour you want the pixel to be in terms of the value in images(i,20,j) ]
ENDFOR
ENDFOR

Снимки были сделаны с интервалом в 2 минуты.

Я понимаю, что здесь делается - по сути, рисование небольших прямоугольников для представления пикселей на изображениях. Мой вопрос в том, каким должен быть аргумент COL? Может ли кто-нибудь привести мне пример? В минуту, чтобы проверить код, я просто ввел фиксированное значение (например, 255), что, очевидно, просто дает блок того же цвета. Как я могу получить разные цвета, соответствующие значениям пикселей?


person user2137944    schedule 23.04.2015    source источник
comment
Почему бы не использовать TV вместо POLYPILL? TV (или TVSCL, или одна из сторонних процедур отображения изображений) предназначена для отображения изображений.   -  person mgalloy    schedule 24.04.2015
comment
Спасибо, изначально я использовал TVSCL, но мне очень хотелось легко контролировать размер «пикселей», а также иметь возможность комбинировать график с другими графиками временных рядов в многопанельных окнах.   -  person user2137944    schedule 24.04.2015


Ответы (2)


Просто используйте:

max_value = max(ut[*, 20, *])
color=images[i, 20, j] / float(max_value) * 255

Убедитесь, что вы находитесь в индексированном цвете, т.е. вы сделали:

device, decomposed=0

и использовали LOADCT или TVLCT для загрузки таблицы цветов, которую вы хотите использовать.

person mgalloy    schedule 24.04.2015

Вы также можете использовать новую графику, если у вас IDL 8.4+.

no_images = 100
ut = FINDGEN(100)/100*24
img = bytscl(randomu(seed,no_images,40))
y = FINDGEN(40)
p = PLOT(ut, y, XSTYLE=1, YSTYLE=1, XRANGE=[0,24], YRANGE=[0,40], $
  /NODATA, TITLE='My Data',XTITLE='X',YTITLE='Y')
i = IMAGE(img, ut, y, /OVERPLOT, RGB_TABLE=74, ASPECT_RATIO=0.5)

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

person Chris Torrence    schedule 24.04.2015