如何idl读取hdf格式数据SEGY格式的数据

SEGY数据格式
常见的地震数据体有SEG格式和NOSEG 格式, SEG是( The
Society of Exploration Geophysicists)的缩写,
相信大家都知道是什么意思吧!而SEG格式有多种,其中最常用的就是SEGY格式地震数据体文件。它有3200个字节的图头(也叫卷头),400字节的文件头,240字节的道头,道数据,.............道头,道数据,很多个。图头信息我们一般不关心,不太常用。文件头里有些信息可以用到,例如数据格式了,样品数了,采样间隔了。而道头在实际加载的过程中最常用,其中最常用的是X、Y、道号和线号。但在实际的数据中它们存放的位置不一定相同,要具体数据体具体分析,可以用一个SEGY格式分析器进行转换
1 SEGY数据由文件头和数据体组成
1.1 文件头总长度为3600字节,分两部分。
1.1.1 文件头第一部分
长度: 3200bytes& ;组成:
80bytes*40;特性:EBCDIC字符集,参数卡,需要转换为ASCII码后才能显示。
1.1.2 文件头第二部分
长度:400bytes;数据类型:32位、16位的整型;特性:二进制头,记录数据体信息。
1.2 数据体由多个数据道组成。每道数据分两部分:道头、采样数据。
1.2.1 数据道道头
bytes;数据类型:32位、16位的整型;特性:记录采样点数、采样间隔、CDP号、XLine号、Line号以及坐标信息等。
1.2.2 采样数据
长度:采样数*采样点字节数;数据类型:32位的浮点型。
2 工作站SEGY数据存储格式有两种:IEEE和IBM
3 IEEE和IBM格式与微机格式互转
3.1 32位、16位的整型格式数据
IEEE和IBM的整型存储与微机格式的存储不同之处
IEEE和IBM的高字节在前、低字节在后,即BigEndian,微机则是低字节在前、高字节在后,即LittleEndian 。
IEEE和IBM的32位、16位的整型转换成微机格式:只需交换高、低位即可。
以BIGENDIAN位码方式从文件的数据流DATASTREAM读取到Q_INT32、Q_INT16类型的变量中,可实现在微机上读取SEGY数据体中的整型值。
以BIGENDIAN位码方式将Q_INT32、Q_INT16类型的变量值写入文件的数据流DATASTREAM,可实现在微机上向SEGY数据体中写入整型值。
3.2 32位浮点型格式数据
IEEE格式32位浮点型与微机格式的32位浮点型相比:只要进行高、低位交换即可。
BIGENDIAN位码方式,Q_UINT32类型变量,可实现微机上读写SEGY
IEEE格式的32位浮点型值。
IBM格式32位浮点型要转换位微机格式:需要分拆字位,重新进行数值计算才能得到正确的微机数值。
BIGENDIAN位码方式、Q_UINT32类型变量,读后计算浮点数值,写之前先转换数值。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置: &
& 免费下载
sponser links:
segy格式数据的读取程序,可以帮助初学者好好学系地震数据的哦-
最新本分类资源
此源码主要编程工具为VC,通过Windows基本编程实现画图功能,并显示。- ...
实现了
DAA画线法画直
(1) 中点画线法画圆(输入x坐标,y坐标,圆心) (必做)
(2) 二 ...
计算机图形学经典算法,分型算法例程。具体实现了,算法中的技巧- ...
示范了如何实现闪屏,在VC++6.0环境中开发,可直接进行编译-
我的一个新成员。我希望得到的帮助admin用户和其他不同的成员。
非常感谢您 ...
实时曲线绘制的类clPlot,在vc环境下实现曲线图形,vc++以曲线形式实时动态显示数据的控 ...
matlab实现各个混沌系统的绘制,代码简单实用,对初学者有帮助- ...
德丰杰jfdlksfjsdlkfj jdlksfjdlksjf
用于运动目标的检测,是很好的毕业设计参考-
以前的数字图像处理作业,包括直方图,均衡,Sobel,中值,FFT,IFFT,DCT,IDCT,8*8DCT ...
本类热门下载
TinyCad在VC6上重新编译调试成功的一个PCB CAD源码-
实时曲线绘制的类clPlot,在vc环境下实现曲线图形,vc++以曲线形式实时动态显示数据的控 ...
这是一个用matlab编写的图形处理程序源代码,有图形界面-
基于gdi+的一个超强的绘图程序的源代码,可以学习cad编程-
这是用VC6.0编写的绘制三次Bezier曲线的程序,使用MFC框架文档视图结构。程序除实现三 ...
使用MFC实现一个绘图程序
功能:类似于Windows系统的画图程序。具有画图、填充图、打开 ...
此源码主要编程工具为VC,通过Windows基本编程实现画图功能,并显示。- ...
一个很不错的图片处理组件,可以进行扫描打印,及相关的图片处理,包含完整原码,如果 ...
设计思路:
对Windows XP自带的画笔程序进行分析,一般User画图过程:
首先鼠标选择绘图 ...
segy格式数据的读取程序,可以帮助初学者好好学系地震数据的哦- ...
CopyRight & 2008- All Rights reserved. 苏ICP备
号 京公网安备:95热门搜索:
您现在的位置是: &
> 本代码提供读取Segy格式地震数据的SegyReader类(C++)
在segy.h文件中有segy卷头/道头的每一个字段的中文详细说明,方便大家查询使用.
另外, 使用QT3.x制作的G
本代码提供读取Segy格式地震数据的SegyReader类(C++)
在segy.h文件中有segy卷头/道头的每一个字段的中文详细说明,方便大家查询使用.
另外, 使用QT3.x制作的G
资 源 简 介
本代码提供读取Segy格式地震数据的SegyReader类(C++)
在segy.h文件中有segy卷头/道头的每一个字段的中文详细说明,方便大家查询使用.
另外, 使用QT3.x制作的GUI界面程序, 可以选择一个segy文件, 使用SegyReader类读取并显示相关信息在界面上.
===sr.exe的执行需要QT3.3.4的dll文件(因文件较大故未加入,需要者安装QT3.3.4或与本人联系),在主界面上执行菜单 File -& Open,选择提供的test.sgy文件即可
VIP 专区(每个包含40-100个资源包)
您 可 能 感 兴 趣 的
相 关 代 码
相 关 资 源
该 用 户 还 上 传
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员
月度VIP会员segy数据道头格式_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
segy数据道头格式
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢SegY 可视化分析工具 开发笔记(8)
根据SegY的标准规范, 使用工作站格式记录的SegY数据要转换为float数值, 作者写了一些合适的方法, 感兴趣的童鞋可以一起讨论下
在400字节的二进制卷头中,& 25-26 字节是格式编码
String strDataF
switch (formatIndex)
case 1: //4-byte IBM float
strDataFormat = &4-byte IBM float&;
case 2: //4-byte integer
strDataFormat = &4 byte integer&;
case 3: //2-byte integer
strDataFormat = &2-byte integer&;
case 5: //4-byte IEEE float
strDataFormat = &4-byte IEEE float&;
case 8: //1-byte integer
strDataFormat = &1-byte integer&;
default: //others
strDataFormat = &Unknown Format&;
其实个人感觉8bit的就已经很够用了, 256个灰度级已经能够很清晰地表现地下反射特征
&&& /** @brief 二进制数据转换为浮点型
&&& *& @details
&&& *& @param& bufData&& 二进制数据
&&& *& @param& traceData 浮点型道数据
&&& *& @param& iSamples& traceData 的采样点个数
&&& *& @param& format&&& bufData的数据编码格式
&&& *& @return
&&& static void data2float(const uchar* bufData, float* traceData, int iSamples, int format = 1);&&& /** @brief&& 从 ibm float 格式的二进制转换到float数组&&& */
&&& static void ibmFloat2float(const uchar* bufData, float* traceData, int iSamples );
&&& /** @brief&& 从 ieee float 格式的二进制转换到float数组 */
&&& static void ieeeFloat2float(const uchar* bufData, float* traceData, int iSamples );
&&& /** @brief&& 从 定长4字节 格式的二进制转换到float数组 */
&&& static void byte4int_2float(const uchar* bufData, float* traceData, int iSamples );
&&& /** @brief&& 从 定长2字节 格式的二进制转换到float数组 */
&&& static void byte2int_2float(const uchar* bufData, float* traceData, int iSamples );
&&& /** @brief&& 从 定长1字节 格式的二进制转换到float数组 */
&&& static void byte1int_2float(const uchar* bufData, float* traceData, int iSamples );&&&&& /** @brief SegY数据转换静态方法声明
&&& *& @details SegY数据转换静态方法声明
&&& *& @param& traceData&& float类型的道数据
&&& *& @param& bufData&&&& 字节型的SegY数据,要保存进文件
&&& *& @param& iSamples&&& traceData的采样点数
&&& *& @param& format&&&&& bugData的数据格式类型
&&& void float2data(const float* traceData, uchar* bufData, int iSamples, int format /*= 1*/ );
&&& /** @brief&& 从 ibm float 格式的二进制转换到float数组 */
&&& static void float2ibmFloat(const float* traceData,uchar* bufData, int iSamples );
&/** @brief&& 从 float数组转换到 ieee float 格式的二进制*/
&&& static void float2ieeeFloat(const float* traceData,uchar* bufData, int iSamples );
&&& /** @brief&& 从float数组 转换到 定长1字节 格式的二进制 */
&&& static void float2_byte1int(const float* traceData, uchar* bufData, int iSamples);
&&& /** @brief&& 从 float数组转换到 定长2字节 格式的二进制*/
&&& static void float2_byte2int(const float* traceData,uchar* bufData,int iSamples );
&&& /** @brief&& 从 float数组转换到定长4字节 格式的二进制 */
&&& static void float2_byte4int(const float* traceData, uchar* bufData, int iSamples );&&& // 4字节int类型的高低位转换
&&& static void swapBytes4(unsigned char*cp);
&&& // 2字节short类型的高低位转换
&&& static void swapBytes2(unsigned char*cp);
源码以最复杂的ibmfloat为例子吧
void SlSegYDataConvert::ibmFloat2float( const uchar* bufData, float* traceData, int iSamples )
d24 = 1.0f/f;
int byte1,byte2,byte3,byte4,
for(int i = 0; i & iS i++)
int index = i * 4;
byte1 = bufData[index++];
byte2 = bufData[index++];
byte3 = bufData[index++];
byte4 = bufData[index];
bsign = byte1 & 0x80;
exp = (byte1 & 0x7F) -64;
basep = byte2;
basep = (basep &&8) + byte3;
basep = (basep &&8) + byte4;
if (0 == bsign)
traceData[i] =
pow(16.0,exp) * basep * d24;
traceData[i] = -1 * pow(16.0,exp) * basep * d24;
/*关于IBM Float 工作站编码, 可以自己查一下.
要从float 转回去,参照编码格式亦可完成, 此处不再缀述*/
个人感觉这样写的可能高低位转换效率比较好, 请大神斧正, 给不吝回复一下
void SlSegYDataConvert::swapBytes4(unsigned char *cp)
cp[0] ^= (cp[3]^=(cp[0]^=cp[3]));
cp[1] ^= (cp[2]^=(cp[1]^=cp[2]));
void SlSegYDataConvert::swapBytes2(unsigned char* cp)
cp[0] ^= (cp[1]^=(cp[0]^=cp[1]));
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13679次
排名:千里之外
原创:14篇
评论:13条
(1)(1)(3)(9)(1)(1)(1)

我要回帖

更多关于 segy格式 的文章

 

随机推荐