在IDL里面有颜色空间转换函数 color_convert,但是不知道怎么提取分量,
pro rgbhsi
;读取影像
envi_select,title='Choose Original Sorted MODIS Image',$
fid=fid,dims=dims,pos=pos
ENVI_FILE_QUERY, fid, dims=dims, NS = ns, NL = nl,NB = nb
pos = LINDGEN(nb)
num_cols=dims[2]-dims[1]+1
num_rows=dims[4]-dims[3]+1
num_bands=n_elements(pos)
num_pixels=num_cols*num_rows
img=fltarr(num_cols,num_rows,num_bands)
for k=0,num_bands-1 do img(*,*,k)=$
envi_get_data(fid=fid,dims=dims,pos=pos[k])
R = img(*,*,0)
G = img(*,*,1)
B = img(*,*,2)
h = fltarr(num_cols,num_rows)
s = fltarr(num_cols,num_rows)
i1 = fltarr(num_cols,num_rows)
;RGB->HSI
for i=0,num_cols-1 do begin
for j=0,num_rows-1 do begin
s(i,j) = 2.0/sqrt(6.0)*sqrt((R(i,j)-G(i,j))^2.0+(R(i,j)-B(i,j))*(G(i,j)-B(i,j)))
i1(i,j) = (1.0/sqrt(3.0))* (r(i,j)+g(i,j)+b(i,j))
ct = !pi/2.0-atan((2.0*r(i,j)-g(i,j)-b(i,j))/(sqrt(3.0)*(G(i,j)-b(i,j))))
if g(i,j) ge b(i,j) then begin
H(i,j) = ct
endif else begin
H(i,j) = ct+!pi
endelse
endfor
endfor
envi_write_envi_file,s,out_dt=4,out_name='D:\screen\image\result\test.img'
end
色调图