在envi中读取了图像到数组中,然后把数组用idl输出为其他图像格式,结果惊奇的发现在envi中图像跟原图像相比是上下反转的。经查证这是因为envi和idl坐标系不同所致的,ENVI是以影像左上角作为行列值的起点,即,左上角的像素为[0,0],ENVI保存ASCII的时候也是这个顺序,但是IDL却是以左下角为坐标原点,即【0,0】为左下角。
用时二者要进行转换才可以,对读取了envi中图像的数组的转换公式为:
ENVI:[X,Y]
IDL:[X-1,LINE-Y], 此处,line为影像总行数。
但是这样写法较为复杂,我用的方法是用系统函数rotate和reverse,reverse将数组每行前后反转,但envi和idl的差别是列的前后反转,因此先用rotate旋转90度,做reverse,然后再做270度旋转回到原始位置,即可成功。写法如下:
data=rotate(data,1);
data=reverse(data);
data=rotate(data,3);
不知道有没有更好的办法
---------------------下文地址在这里
1.ENVI是以影像左上角作为行列值的起点,即,左上角的像素为[0,0],ENVI保存ASCII的时候也是这个顺序,但是IDL却是以左下角为坐标原点,即【0,0】为左下角,用时二者要进行转换才可以,列数不变,但行数要变,同一个点,在ENVI和IDL中的行列号不同,例如: