CN105096385B - 一种二维地震剖面三维显示方法 - Google Patents
一种二维地震剖面三维显示方法 Download PDFInfo
- Publication number
- CN105096385B CN105096385B CN201510429027.7A CN201510429027A CN105096385B CN 105096385 B CN105096385 B CN 105096385B CN 201510429027 A CN201510429027 A CN 201510429027A CN 105096385 B CN105096385 B CN 105096385B
- Authority
- CN
- China
- Prior art keywords
- texture
- vertex
- seismic
- earthquake
- rendered
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Image Generation (AREA)
Abstract
一种二维地震剖面三维显示方法,从磁盘中读取地震剖面数据并将其转换为系统使用的编码格式;顶点输入布局创建包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建;调色板纹理创建与采样;倾斜方式纹理创建即渲染到纹理时的渲染目标;地震数据纹理创建,用于存储地震数据;效果文件创建,包括渲染到纹理效果文件创建和渲染输出效果文件创建;渲染到纹理,将数值化的地震样点倾斜方式渲染到纹理并创建网格;创建地震数据网格并渲染输出。本发明将地震数据以浮点纹理的方式传送到GPU,实现了地震数据顶点的准确着色以及顶点之间像素的准确插值,以指数渐进方式创建调色板,提高了地震剖面显示的对比度,实现了二维地震剖面的三维显示。
Description
技术领域
本发明涉及计算机图形学与科学可视化领域,更具体地说,涉及一种二维地震剖面三维显示方法。
背景技术
地震数据的显示技术对于地震勘探中的地震数据解释环节具有关键性的作用。一个直观、正确、特征层次分明的地震显示可以极大地方便地质科研人员对相关数据做出准确的分析、得出正确的结论,这对于油气勘探、地质勘探等领域具有重要的现实意义。
现有的地震数据显示技术主要分为两大类:一类是二维显示;另一类是三维显示。地震数据二维显示是将地震剖面数据在一幅二维图像中进行显示的技术,又可分为波形显示、波形+变面积显示、灰度显示、彩色变密度显示等四个类别。波形显示是将地震剖面数据中同一地震道上的样点用线段连接起来,以反映地震数据的变化,地质分析是通过沿着垂直于波形变化的方向观察波峰或者波谷的变化来实现的,这种方式简单且易于实现,但是不能较好地显示出一些较细微的地质结构变化;波形+变面积显示是将波形显示中每一个周期内的正半轴或负半轴以下区域用自定义的颜色填充,以更清晰地显示出垂直于波形变化方向的波峰或波谷的变化,使对应的地质结构更加清晰,这种方法只可以更直接地显示出波峰或波谷变化所代表的宏观地质结构,对于细微结构的显示能力并没有超越波形显示方法;灰度显示是将地震剖面转换成一幅大小与地震样点数一致的灰度图像,将每一个地震样点的幅度值映射为相应位置像素的灰度值,这种方式对于微观结构的显示能力相对于波形显示和波形+变面积显示有所提高,因为将每一地震样点作为一个像素使得地质结构中宏观和微观事件的连续性更好,但仅用灰度值,不便于视觉分析,所以就出现了彩色变密度显示;彩色变密度显示是将每一地震样点的幅度值映射一彩色值,进而将整个地震剖面映射为一幅二维彩色图像,这种方式对于微观结构的显示优于前面三种显示方法,但是这种显示仍局限于二维平面图像,对于微观地质结构的显示仍然不够直观。
近年来,伴随着计算机图形学研究的进步和显卡计算能力的提高及游戏产业的发展,地震数据的三维显示技术获得了广泛的研究并取得了较大进展,地震数据的三维显示是将三维地震数据在一个三维立体空间中进行显示的技术,这是相关领域的工作人员为解决二维显示中分析较为繁琐、不能有效显示出地震微观结构以作出正确地震解释的不足而提出的,但当前出现的地震数据三维显示技术或软件只是将多个地震剖面的灰度显示或者彩色变密度显示按照其初始相对位置在三维空间进行显示,显示的基本组成部分仍然是前述几种二维显示方法所产生的显示结果中的一种,显示地震微观结构的能力并没有得到实质的提高。
发明内容
有鉴于此,本发明提出并实现了一种二维地震数据三维显示方法,以解决现有技术存在的对地震微观结构显示能力差、不够直观等问题。
一种二维地震剖面三维显示方法,具体实现步骤如下:
步骤1:地震数据读取与解析,以二进制方式从磁盘中读入标准segy地震数据并解析出地震样点数据;
步骤2:顶点输入布局创建,定义顶点的属性结构,包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建;
步骤3:调色板纹理创建与采样,创建用于在显示中为地震数据顶点着色的调色板并定义在GPU着色器中采样调色板纹理的方式;
步骤4:倾斜方式纹理创建,创建一幅纹理,用于存储所渲染显示的每一个地震样点的数值化的倾斜方式;
步骤5:地震数据纹理创建,创建一幅用于存储地震数据的纹理,以通过在GPU中采样地震数据纹理方式将地震数据传递到GPU中;
步骤6:效果文件创建,效果文件封装了与所需绘制效果相关的着色器、设备状态和绘制路径等任务,这里创建的效果文件包括渲染到纹理效果文件创建和渲染输出效果文件创建;
步骤7:渲染到纹理,将所需渲染显示的每一个地震样点的数值化后的倾斜方式渲染到纹理中;
步骤8:网格创建与渲染,创建地震数据网格并渲染输出。
具体包括以下步骤:
步骤1:地震数据读取与解析,用S(x,y)表示读取的标准segy格式的地震数据,(x,y)表示样点在地震剖面中的二维坐标,x、y均为非负整数,要显示的地震剖面的范围是以(j0,i0)为起始点的w道、h个样点,考虑到求相关时窗口大小为5,窗口滑动范围为(-1,1),所以x、y的取值范围为j0≤x≤j0+w-1,i0-3≤y≤i0+h+2,确定了要显示的地震数据大小之后,就可以确定窗口的大小了。以二进制方式从本地磁盘中读取要显示的标准segy地震剖面数据,由于数据中包含3200字节EBCDIC文件头、400字节二进制文件头,每一道地震数据的前面都有240字节的道头信息,读取每一道地震数据时,都要先将读取地址定位到3600+j0×(240+每一道的样点总数×4)位置处,每一道的样点数等信息存储在道头信息中,在本实施例中为4001,然后读取要显示的地震样点数据,标准segy地震剖面数据的编码格式为32位的IBM浮点型格式,将其转换为微机处理的IEEE型格式并存储,即完成了地震数据的读取与解析。
步骤2:顶点输入布局创建,包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建两部分,用于定义顶点的结构属性。创建方法分别如下:
地震数据顶点输入布局创建的步骤是:
第一步,先创建一个包含地震数据顶点所需属性的结构体,此结构体包含了顶点各分量的类型和属性名,这里只需一个三维位置向量,这个三维位置向量用包含三个32位浮点分量的D3DXVECTOR3类型来定义。如果通过将顶点的颜色属性添加到此结构中来对顶点进行着色,将会产生顶点之间颜色不能与地震幅度正确对应的问题,如果将颜色作为顶点结构的属性之一,那么光栅化器在对顶点位置进行插值的同时也对颜色进行了插值,而它对颜色的插值并不是根据地震幅度进行的;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里只需要描述位置分量即可,包括位置分量的语义、格式;
第三步,创建地震顶点输入布局layout,以使Direct3D知道该如何使用每个分量,同时也建立了从顶点结构体到着色器输入之间的映射关系;
第四步,在创建地震数据网格时,用于说明地震顶点的格式。
渲染到纹理顶点输入布局创建的步骤是:
第一步,先创建一个包含渲染到纹理顶点的结构体,包含顶点各分量的类型和属性名,需要一个三维位置分量和一个二维纹理坐标分量,即:D3DXVECTOR3和D3DXVECTOR2两种类型的分量;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里描述了三维位置分量和二维纹理坐标分量;
第三步,创建渲染到纹理顶点输入布局,以使Direct3D知道该如何使用每个分量,同时也建立从顶点结构体到着色器输入之间的映射关系;
第四步,在设备使用渲染到纹理顶点输入布局之前,顶点输入布局绑定到管线的输入汇编阶段。
步骤3:调色板纹理创建与采样,创建用于为地震数据顶点着色的调色板并定义调色板的采样方式,调色板纹理元素的格式为128位浮点数,包含R、G、B、A四个分量,每个纹理坐标对应了一种颜色,本发明定义饱和度为1的红色表示地震幅度最小值,白色表示0幅度,饱和度为1的蓝色表示地震幅度最大值,假设调色板中定义了n个颜色向量,则纹理坐标(U,V)中V=0,U从0到1按n个级别渐变,在U=0.5处为白色,此纹理实现了调色板的功能。显示地震数据时,在渲染输出效果文件的像素着色器中将地震样点幅度值转换为纹理坐标,通过采样调色板纹理来实现地震数据采样点的幅度值与颜色值的一对一映射,本发明将此称为颜色幅度插值,线性颜色幅度插值时地震样点幅度Z与纹理坐标U的映射关系表示为:
其中,Z最大和Z最小分别为所要显示的地震剖面中地震数据样点幅度的最大值(为正)和最小值(为负)。
像素着色器中由地震样点幅度转换得到的纹理坐标之所以可以线性地采样调色板,是由于此调色板是一个1维的浮点纹理,而在采样浮点纹理时,纹理元素的值会根据纹理坐标的不同线性地插值。
由于地震剖面显示的对比度较低,有很大一部分区域都是白色或者浅白色,这是由于地震样点中极少数幅度较大的顶点对应到了调色板的两端,而大部分中间幅度的顶点就自然被着色为颜色较浅的红色、蓝色或者白色,可以用两种方法来解决这个问题。
一种方法是将像素着色器中的线性纹理坐标映射改为指数坐标映射,地震样点幅度与纹理坐标的映射关系表示为:
其中,N为大于1的正整数,取N=5,这样在地震样点幅度大于0或者小于0的地方,顶点颜色就会很快地变为蓝色或者红色,采用这种指数纹理坐标映射后所获得的地震剖面三维显示的对比度明显增强的同时在地震幅度为0值的附近却出现了颜色与地震幅度不一致的情况,之所以会产生这种现象,是由于在将归一化的地震幅度以指数形式映射为纹理坐标的时候,指数小于1,也就是要对小于1的归一化地震幅度做开方运算,这样就难以保证在0值附近的精度,从而导致了在0值附近颜色不一致的现象。
另一种增强对比度的方法是将调色板中的白色区域向中间集中,将线性渐进调色板改为指数渐进即可以产生这种调色板。调色板中R/G分量(蓝色渐变到白色时)或者G/B分量(红色渐变到白色时)与纹理坐标U的对应关系可表示为:
其中,y值的意义为:当U值小于等于0.5时,表示颜色分量中的G/B(G分量或者B分量,G=B)的值,当U值大于0.5时,表示颜色分量中的R/G(R分量或者G分量,R=G)的值,U的值用x表示0≤x≤1。产生这种调色板之后,在像素着色器中仍然采用线性纹理坐标映射,就可以实现地震样点幅度与调色板中颜色的一一对应。采用这种方式后地震剖面显示的对比度可以得到增强,同时由地震幅度为0值附近三角形单元顶点之间的区域,颜色得到了正确的插值,与地震幅度一一对应;
步骤4:倾斜方式纹理创建,创建一个同时用作渲染目标和着色器资源的纹理,每一个纹理元素都含有R、G、B、A四个分量共128位,用于存储地震样点的数值化的倾斜方式,将地震样点的倾斜方式存储在纹理元素的R分量中,在创建地震数据网格时利用地震样点的倾斜方式来定义顶点索引。此纹理同时用作渲染目标和着色器资源,在将GPU中计算得到的地震样点数值化的倾斜方式渲染到此纹理的时候,此纹理作为渲染目标;在根据地震样点数值化的倾斜方式来定义地震数据网格顶点的索引时,此纹理作为着色器资源,对存储在纹理元素中的数值化的地震样点倾斜方式进行读取。之所以要考虑地震样点的倾斜方式,是因为对于相邻两个地震道上同样的四个地震样点,采用不同的镶嵌方式时会产生不同“脊”或“槽”的结构,本发明通过求相关系数的方式来查找与以四边形的控制点(四边形左上角的地震样点)为中心的地震样点序列相关度最大的下一地震道上的相同长度序列的中心点,以此来决定四边形(由四个地震样点镶嵌生成)究竟应该采取哪一种镶嵌方式,本发明在像素着色器中通过下式来计算以当前样点为中心的样点序列与相邻的下一地震道上的若干样点间隔的同样长度的地震样点序列的互相关函数值和相关系数,计算方法可分别表示为:
其中(4)式表示计算序列X和序列Y的互相关序列RXY(τ)的方法,下标xy表明了关联的序列,xy的顺序表示序列X未移动,序列Y移动τ个单位,RXY(τ)表示序列X和序列Y互相关函数值的大小,R'XY(τ)表示序列X和序列Y相关系数的大小;τ是移位参数;T为序列周期,N表示表示序列X和序列Y中元素编号的最大值;k表示元素序号的变量,k取值0~N,计算出对应于每一个τ的相关系数之后,找出对应相关系数最大值时的τ值,根据此τ值来判断当前地震样点应该是上倾斜还是下倾斜或者不倾斜,上倾斜用1表示,下倾斜用-1表示,倾斜幅度较小时视为不倾斜,取值为0,也就是将相关系数最大值对应的τ值取反即可得地震样点数值化的倾斜方式;然后通过渲染到纹理将数值化的倾斜方式渲染到倾斜方式纹理的对应纹理元素的R分量中,纹理元素的其他分量都设为1.0;
步骤5:地震数据纹理创建,根据要显示的地震剖面数据的大小,创建对应的浮点纹理,然后将地震样点数据对应填充到纹理元素中,在GPU中通过顶点着色器和像素着色器采样此纹理来实现对地震数据的访问,本发明要显示地震剖面中以(1400,1150)为起始点的400道、300个样点,根据步骤1中所述,读取的地震道和地震样点(即x、y)的取值范围应为1400≤x≤1799,1147≤y≤1452,创建的地震数据纹理的大小为400×306;
步骤6:效果文件创建,包括创建渲染到纹理效果文件和创建渲染输出效果文件两部分,创建方法分别为:
渲染到纹理效果文件创建:创建用于将每一个地震样点的倾斜方式渲染到纹理的效果文件,包含了一个手法,手法中包含一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中仅将输入的顶点位置和纹理坐标输出给像素着色器,不做任何变换,实现平行投影,将像素着色器输出的值渲染到对应的倾斜方式纹理的纹理元素上,在像素着色器中采样地震数据纹理,利用一个大小为5个地震样点间隔的窗口计算目标样点与下一道上窗口滑动范围(+1、0、-1)内样点的相关系数,用正负号来表示样点是上倾斜还是下倾斜,用数值+1、0、-1表示倾斜幅度,将结果渲染到倾斜方式纹理的纹理元素R分量中;
渲染输出效果文件创建:创建用于将地震数据网格渲染输出的效果文件,包含一个手法,手法中使用一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中根据输入的x、y坐标来采样地震数据纹理中的样点值作为z坐标,然后进行世界变换、观察变换和投影变换,并将地震数据纹理中的样点值转换为纹理坐标输出给像素着色器,转换方式在步骤3中已进行详述,采用的是线性纹理坐标映射。需要说明的是,这里用于转换为纹理坐标的地震样点幅度值已经经过了光栅化器的自动线性插值,在像素着色器中根据顶点着色器输出的纹理坐标采样调色板纹理,为地震数据顶点着色;
步骤7:渲染到纹理,将所需显示的每个地震样点的倾斜方式渲染到倾斜方式纹理中,渲染到纹理的步骤为:
第一步,将可编程管线的渲染目标改为倾斜方式纹理的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备;
第三步,将渲染到纹理顶点输入布局和顶点缓冲区绑定到管线的输入汇编阶段;
第四步,用循环语句遍历手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制渲染到纹理所定义的矩形,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态。
步骤8:网格创建与渲染,创建地震数据网格并渲染输出。创建地震数据网格的步骤为:
第一步,为了在CPU中获取渲染后的倾斜方式纹理中的值,需要创建一个和倾斜方式纹理同样大小、同样纹理元素格式的纹理,纹理的CPU访问标志为只读,然后将倾斜方式纹理资源复制到新创建的目的纹理中;
第二步,获取指向目的纹理的数据起始地址的指针;
第三步,定义一个三维向量型的位置动态链表,从左边第一个道开始遍历每一道上的每一个地震样点,遍历到每一个地震样点时,位置链表增加一个元素,元素的x值为地震样点所处的道号向减去所需显示地震道总数的一半(为了使显示的曲面的中心在窗口的中心上)再乘以水平方向的尺度,y值为地震样点的时间序号向减去每道上所需显示样点总数的一半(为了使显示的曲面的中心在窗口的中心上)再乘以垂直方向的尺度,没有给Z分量赋值,Z分量的值在顶点着色器中基于前两个坐标通过采样地震数据纹理得到,然后将此位置向量赋值给一个临时的地震数据顶点结构对象,并将此对象添加到地震数据顶点动态链表中;
第四步,根据相应位置处倾斜方式纹理中纹理元素的值是表示上倾斜或者下倾斜或者没有倾斜来给索引动态链表增加六个索引值,这六个索引值是的同一道上的两个相邻样点和下一道上的两个相邻样点构成了一个矩形;
第五步,使指向目的纹理的数据起始地址的指针无效,释放目的纹理;
第六步,以地震数据输入顶点布局、地震数据顶点动态链表的大小、索引动态链表的大小等为参数创建地震数据网格。
最后的渲染步骤为:
第一步,将可编程管线的渲染目标改为设备原来的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,获取摄像机的世界、观察、投影矩阵并更新到GPU中对应的常量中;
第三步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备;
第四步,用循环语句遍历渲染输出效果文件手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制地震数据网格,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态。
经过以上步骤之后,即实现了对地震剖面数据的三维显示,实现了一种二维地震数据剖面的三维显示方法。
与现有地震数据显示技术相比,本发明具有以下优点:
(1)二维地震剖面数据三维显示,本发明将二维地震剖面数据转换为三维坐标数据在三维空间中进行立体显示,增加的第三个维度就是地震样点处的幅度值,这样,就可以将地震数据某一剖面中的宏观和微观事件更加直观地显示出来,而现有方法均没有将幅度变化信息在三维立体空间中显示出来。
(2)地震数据浮点纹理传输方式,创建一个适当大小的浮点纹理,将地震数据对应填充到浮点纹理的纹理元素中,在GPU中通过着色器采样此浮点纹理实现地震数据由CPU到GPU的传输,避免因显卡缓冲区较小无法暂存太多地震数据而导致的不能同时显示较多地震数据的不足,有效提高了地震显示能力。
(3)地震数据顶点准确着色,将颜色附加在顶点结构上时,光栅化器对每一样点位置进行插值的同时也对颜色进行了插值,由于光栅化器对颜色进行插值时是对颜色数据线性插值而不是根据地震幅度对颜色进行线性插值,会导致顶点之外的其他像素位置的颜色与地震幅度不能一一对应。本发明在GPU中采样地震数据样点幅度并将其转换为纹理坐标,利用此纹理坐标在像素着色器采样调色板纹理,以此实现地震数据样点幅度与颜色值的一对一映射,避免了将颜色附加在顶点结构上时的弊端,实现了地震数据顶点的准确着色。
(4)地震数据倾斜方式渲染到纹理,本发明通过将渲染目标改为倾斜方式纹理的渲染目标视图,把在GPU中计算得到的数值化的地震样点倾斜方式渲染到倾斜方式纹理中,作为在创建地震数据网格时,定义顶点索引值的依据,有效地提高了显示的实时性。
(5)充分利用GPU并行计算能力,本发明将计算复杂度和耗时较高的顶点坐标变换、纹理坐标映射、倾斜方式计算等转移到GPU中进行,充分利用了GPU的并行计算能力。
附图说明
图1为本发明所述方法的流程图;
图2可编程管线中顶点插值处理流程图;
图3为本发明实施例在线性幅度插值时采用线性纹理坐标映射的原理图;
图4为本发明实施例采样浮点纹理时的纹理坐标线性插值原理图;
图5为本发明实施例采用线性幅度插值时获得的地震剖面显示结果:其中(a)为正视时的结果,(b)旋转一定角度后的结果;
图6为本发明实施例在线性幅度插值时采用指数纹理坐标映射的原理图;
图7为本发明实施例在线性幅度插值时采用指数纹理坐标映射获得的地震剖面显示结果:其中(a)为正视时的结果,(b)旋转一定角度后的结果,(c)沿着某一水平事件的局部观察,(d)某一着色交叉处的细节观察,(e)着色交叉处的线框图;
图8为本发明实施例在采用线性幅度插值和线性纹理坐标映射时,为提高显示对比度所采用的颜色指数渐进调色板生成原理图;
图9为本发明实施例采用颜色指数渐进调色板、线性幅度插值和线性纹理坐标映射时获得的地震剖面显示结果:其中(a)为正视时的结果,(b)旋转一定角度后的结果,(c)沿着某一水平事件的局部观察;
图10为本发明实施例在同样的地震样点数据处采用不同镶嵌方式时会产生不同效果的原理图:其中(a)为采用上倾方式镶嵌时的原理图,这种方式会产生“脊”结构,(b)为采用下倾方式镶嵌时的原理图,这种方式会产生“槽”结构;
图11为本发明实施例采用固定上倾斜镶嵌方式时获得的结果,着色方式为颜色指数渐进调色板、线性幅度插值和线性纹理坐标映射。其中(a)是为了解释固定上倾斜镶嵌方式而生成的三维平面网格;(b)为采用固定上倾斜镶嵌方式生成的地震剖面数据网格线框图实例;(c)为采用固定上倾斜镶嵌方式时生成的地震剖面数据网格填充图实例;
图12为本发明实施例采用固定下倾斜镶嵌方式时获得的结果,着色方式为颜色指数渐进调色板、线性幅度插值和线性纹理坐标映射。其中,(a)是为了解释固定下倾斜镶嵌方式而生成的三维平面网格;(b)为采用固定下倾斜镶嵌方式生成的地震剖面数据网格线框图实例;(c)为采用固定下倾斜镶嵌方式时生成的地震剖面数据网格填充图实例;
图13为本发明实施例所采用的低倾斜相关系数计算原理图,目的是为了查找与以四边形的控制点(相邻两个地震道上的四个地震样点连接成的四边形左上角的地震样点)为中心的地震样点序列相关度最大的下一地震道上的相同长度序列的中心点,以此来决定四边形(由四个地震样点镶嵌生成)究竟应该采取哪一种镶嵌方式;
图14为本发明实施例采用低倾斜相关自适应镶嵌方式时获得的结果,着色方式为颜色指数渐进调色板、线性幅度插值和线性纹理坐标映射。其中(a)是为了解释低倾斜相关自适应镶嵌方式而生成的三维平面网格;(b)为采用低倾斜相关自适应镶嵌方式生成的地震剖面数据网格线框图实例;(c)采用低倾斜相关自适应镶嵌方式生成的地震剖面数据网格填充图实例;
图15为利用地质分析软件Seisee2.5.beta-2以不同的二维方式对本实施例中所显示的segy数据进行显示的相应结果,以本实施例所获得的三维显示结果与之进行对比。其中:(a)为波形显示;(b)为波形负半轴填充显示;(c)为波形正半轴填充显示;(d)为灰度显示;(h)为彩色变密度显示;
图16中列出了本实施例通过采用颜色指数渐进调色板、线性幅度插值、线性纹理坐标映射以及低倾斜自适应相关镶嵌方式得到的地震剖面从各个三维角度观察的显示结果,其中:(a)为正视图;(b)为左下角绕中心垂直向上翻转45度时结果;(c)为左下角绕中心垂直向下翻转45度时结果;(d)为右下角绕中心垂直向下翻转45度时结果;(e)为绕x轴向上旋转30度时结果;(f)为绕x轴向下旋转30度时结果;(g)为左下角向上翻转约45度,然后先绕y轴,再绕x轴向上旋转后的结果;(h)为绕y轴向外旋转大于90度,然后绕x轴向下旋转后的结果。
具体实施方式
下面结合附图和实施方式对本发明做进一步说明。
本发明所述方法的流程图如图1所示,具体包括以下步骤:
步骤1:地震数据读取与解析,用S(x,y)表示读取的标准segy格式的地震数据,(x,y)表示样点在地震剖面中的二维坐标,x、y均为非负整数,要显示的地震剖面的范围是以(j0,i0)为起始点的w道、h个样点,考虑到求相关时窗口大小为5,窗口滑动范围为(-1,1),所以x、y的取值范围为j0≤x≤j0+w-1,i0-3≤y≤i0+h+2,确定了要显示的地震数据大小之后,就可以确定窗口的大小了。在本实施例中将显示从第1400道、第1150个样点开始的400×300个样点数据,即(j0,i0)为(1400,1150),w=400,h=300,所创建的窗口大小应该大于400×300,本实施例创建的窗口大小为640×640;以二进制方式从本地磁盘中读取要显示的标准segy地震剖面数据时,由于数据中包含3200字节EBCDIC文件头、400字节二进制文件头,每一道地震数据的前面都有240字节的道头信息,读取每一道地震数据时,都要先将读取地址指针定位到3600+j0×(240+每一道的样点总数×4)位置处,每一道的样点数等信息存储在道头信息中,在本实施例中为4001,然后读取要显示的地震样点数据,标准segy地震剖面数据的编码格式为32位的IBM浮点型格式,将其转换为微机处理的IEEE型格式并存储,即完成了地震数据的读取与解析。
步骤2:顶点输入布局创建,包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建两部分,用于定义顶点的属性结构。创建方法分别如下:
地震数据顶点输入布局创建的步骤是:
第一步,先创建一个包含地震数据顶点所需属性的结构体,此结构体包含了顶点各分量的类型和属性名,这里只需一个三维位置向量,这个三维位置向量用包含三个32位浮点分量的D3DXVECTOR3类型来定义。如果通过将顶点的颜色属性添加到此结构中来对顶点进行着色,将会产生顶点之间颜色不能与地震幅度正确对应的问题,图2中顶点处理流程解释了产生这一现象的原因,即:如果将颜色作为顶点结构的属性之一,那么光栅化器在对顶点位置进行光栅化与插值的同时也对颜色进行了插值,而它对颜色的插值并不是根据地震幅度进行的,从图2中也可以看出如果将顶点着色放在可编程像素着色器中进行,就可以避免光栅化器对颜色的插值,这种方式正是后面本实施例所采用的,后面将进行详细介绍;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里只需要描述位置分量即可,包括位置分量的语义、格式等;
第三步,创建地震顶点输入布局layout,以使Direct3D知道该如何使用每个分量,同时也建立了从顶点结构体到着色器输入之间的映射关系;
第四步,在创建地震数据网格时,用于说明地震顶点的格式。
渲染到纹理顶点输入布局创建的步骤是:
第一步,先创建一个包含渲染到纹理顶点的结构体,包含了顶点各分量的类型和属性名,这里需要一个三维位置分量和一个二维纹理坐标分量,即:D3DXVECTOR3和D3DXVECTOR2;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里描述了三维位置分量和二维纹理坐标分量;
第三步,创建渲染到纹理顶点输入布局,以使Direct3D知道该如何使用每个分量,同时也建立了从顶点结构体到着色器输入之间的映射关系;
第四步,在设备使用渲染到纹理顶点输入布局之前,顶点输入布局绑定到管线的输入汇编阶段。
步骤3:调色板纹理创建与采样,创建用于为地震数据顶点着色的调色板并定义调色板的采样方式,调色板纹理元素的格式为128位浮点数,包含R、G、B、A四个分量,每个纹理坐标对应了一种颜色,本实施例中调色板纹理大小为12×1,即包含了12种颜色,纹理坐标(U,V)中V=0,U从0到1按12个级别渐变,从红色渐变到蓝色,在U=0.5处为白色,此纹理实现了调色板的功能。显示地震数据时,在渲染输出效果文件的像素着色器中将地震样点幅度值转换为纹理坐标,通过采样调色板纹理来实现地震数据采样点的幅度值与颜色值的一对一映射,负最大值用最红的颜色着色、正最大值用最蓝的颜色着色,0值用白色着色,其他中间值着色线性地渐变,本实施例将此称为颜色幅度插值,线性颜色幅度插值时地震样点幅度与调色板的坐标映射关系如图3所示,地震样点幅度Z与纹理坐标U的映射关系可表示为:
其中,Z最大和Z最小分别为所要显示的地震剖面中地震数据样点幅度的最大值(为正)和最小值(为负)。
像素着色器中由地震样点幅度转换得到的纹理坐标之所以可以线性地采样调色板,是由于此调色板是一个1维的浮点纹理,而在采样浮点纹理时,纹理元素的值会根据纹理坐标的不同线性地插值,其原理如图4所示。采用线性幅度插值、线性纹理坐标映射时最终获得的地震剖面显示结果如图5所示:其中(a)为正视时的结果,(b)旋转一定角度后的结果,完成了地震数据样点的准确着色。
从显示结果不难看出,地震剖面显示的对比度较低,有很大一部分区域都是白色或者浅白色,这是由于地震样点中极少数幅度较大的顶点对应到了调色板的两端,而大部分中间幅度的顶点就自然被着色为颜色较浅的红色、蓝色或者白色,可以用两种方法来解决这个问题。
一种方法是将像素着色器中的线性纹理坐标映射改为指数纹理坐标映射,原理如图6所示,地震样点幅度与纹理坐标的映射关系可表示为:
其中,N为大于1的正整数,在本实施例中取N=5,这样对于幅度大于0或者小于0的地震样点,顶点颜色就会很快地变为蓝色或者红色,采用这种指数纹理坐标映射后所获得的最终地震剖面显示结果如图7中所示,从图中可以看出,地震剖面三维显示的对比度明显增强了,但是在地震幅度为0值的附近却出现了颜色与地震幅度不一致的情况,如图7中(c)、(d)和(e)所示,之所以会产生这种现象,是由于在将归一化的地震幅度以指数方式映射为纹理坐标的时候,指数小于1,也就是要对小于1的归一化地震幅度做开方运算(本实施例选取的是开5次方),这样就难以保证在0值附近的精度,从而导致了在0值附近颜色不一致的现象。
另一种增强对比度的方法是将调色板中的白色区域向中间集中,将调色板颜色的线性渐进方式改为指数渐进方式即可以产生这种调色板。原理如图8所示,调色板中R/G分量(蓝色渐变到白色时)或者G/B分量(红色渐变到白色时)与纹理坐标U的对应关系可表示为:
其中,y值的意义为:当U值小于等于0.5时,表示颜色分量中的G/B(G分量或者B分量,G=B)的值,当U值大于0.5时,表示颜色分量中的R/G(R分量或者G分量,R=G)的值,U的值用x表示0≤x≤1。产生这种调色板之后,在像素着色器中仍然采用图3中所示的线性纹理坐标映射,就可以实现地震样点幅度与调色板中颜色的一一对应。采用这种方式得到的地震剖面渲染结果如图9中所示,可以看出地震剖面显示的对比度得到了增强,同时由地震幅度在0值附近的顶点的着色可以看出,在三角形单元顶点之间的区域,颜色得到了正确的插值,与地震幅度一一对应,这一点由图9(c)可以看出;
步骤4:倾斜方式纹理创建,创建一个同时用作渲染目标和着色器资源的纹理,每一个纹理元素都含有R、G、B、A四个分量共128位,用于存储地震样点的数值化的倾斜方式,将地震样点的倾斜方式存储在纹理元素的R分量中,在创建地震数据网格时利用地震样点的倾斜方式来定义顶点索引。此纹理同时用作渲染目标和着色器资源,在将GPU中计算得到的地震样点数值化的倾斜方式渲染到此纹理的时候,此纹理作为渲染目标;在根据地震样点数值化的倾斜方式来定义地震数据网格顶点的索引时,此纹理作为着色器资源,对存储在纹理元素中的数值化的地震样点倾斜方式进行读取。之所以要考虑地震样点的倾斜方式,是因为对于相邻两个地震道上同样的四个地震样点,采用不同的镶嵌方式时会产生不同的结果,如图10中(a)和(b)所示,采用(a)图所示的镶嵌方式时会产生“脊”的结构,采用(b)图所示的镶嵌方式时会产生“槽”的结构,采用图10中(a)和(b)中的两种镶嵌方式所生成的地震剖面显示分别如图11、12中所示,本实施例通过求相关系数的方式来查找与以四边形的控制点(四边形左上角的地震样点)为中心的地震样点序列相关度最大的下一地震道上的相同长度序列的中心点,以此来决定四边形(由四个地震样点镶嵌生成)究竟应该采取哪一种镶嵌方式,本实施例在像素着色器中通过下式来计算以当前样点为中心的五个样点序列与相邻的下一地震道上的上下移动范围为1个样点间隔的五个地震样点序列的互相关函数值和相关系数,原理如图13所示,计算方法可分别表示为:
其中(4)式表示计算序列X和序列Y的互相关序列RXY(τ)的方法,下标xy表明了关联的序列,xy的顺序表示序列X未移动,序列Y移动τ个单位,RXY(τ)表示序列X和序列Y互相关函数值的大小,R'XY(τ)表示序列X和序列Y相关系数的大小;τ是移位参数,取值为-1、0、1;T为序列周期,本实施例中取为5,N表示表示序列X和序列Y中元素编号的最大值,N=4;k表示元素序号的变量,k取值0~N,计算出τ分别为-1、0、1时的相关系数之后,找出对应相关系数最大值时的τ值,根据此τ值来判断当前地震样点应该是上倾斜还是下倾斜或者不倾斜,上倾斜用1表示,下倾斜用-1表示,倾斜幅度较小时视为不倾斜,取值为0,也就是将相关系数最大值对应的τ值取反即可得地震样点数值化的倾斜方式;然后通过渲染到纹理将数值化的倾斜方式渲染到倾斜方式纹理的对应纹理元素的R分量中,纹理元素的其他分量都设为1.0;图14中(a)是为了解释低倾斜相关自适应镶嵌方式而生成的三维平面网格,(b)和(c)为本实施例采用低倾斜自适应相关镶嵌方式获得的地震剖面显示结果,对比图14(b)和(c)与图11、12中的(b)和(c)可以看出,在水平事件的峰值处锯齿得到了较少;
步骤5:地震数据纹理创建,根据要显示的地震剖面数据的大小,创建对应的浮点纹理,然后将地震样点数据对应填充到纹理元素中,在GPU中通过顶点着色器和像素着色器采样此纹理来实现对地震数据的访问,本实施例要显示地震剖面中以(1400,1150)为起始点的400道、300个样点,根据步骤1中所述,读取的地震道和地震样点(即x、y)的取值范围应为1400≤x≤1799,1147≤y≤1452,创建的地震数据纹理的大小为400×306;
步骤6:效果文件创建,包括创建渲染到纹理效果文件和创建渲染输出效果文件两部分,创建方法分别为:
渲染到纹理效果文件创建:创建用于将每一个地震样点的倾斜方式渲染到纹理的效果文件,包含了一个手法,手法中包含一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中仅将输入的顶点位置和纹理坐标输出给像素着色器,不做任何变换,实现平行投影,将像素着色器输出的值渲染到对应的倾斜方式纹理的纹理元素上,在像素着色器中采样地震数据纹理,利用一个大小为5个地震样点间隔的窗口计算目标样点与下一道上窗口滑动范围(+1、0、-1)内样点的相关系数,用正负号来表示样点是上倾斜还是下倾斜,用数值+1、0、-1表示倾斜幅度,将结果渲染到倾斜方式纹理的纹理元素R分量中;
渲染输出效果文件创建:创建用于将地震数据网格渲染输出的效果文件,包含一个手法,手法中使用一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中根据输入的x、y坐标来采样地震数据纹理中的样点值作为z坐标,然后进行世界变换、观察变换和投影变换,并将地震数据纹理中的样点值转换为纹理坐标输出给像素着色器,转换方式在步骤3中已进行详述,本实施例采用的是线性纹理坐标映射,如图6中所示。需要说明的是,这里用于转换为纹理坐标的地震样点幅度值已经经过了光栅化器的自动线性插值,在像素着色器中根据顶点着色器输出的纹理坐标采样调色板纹理,为地震数据顶点着色;
步骤7:渲染到纹理,将所需显示的每个地震样点的倾斜方式渲染到倾斜方式纹理中,渲染到纹理的步骤为:
第一步,将可编程管线的渲染目标改为倾斜方式纹理的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备,线框方式显示的结果如图7中(e),图11中(a)、(b),图12中(a)、(b),图14中(a)、(b)所示,填充方式显示的结果如图5中(a)、(b),图7中(a)、(b)、(c)、(d),图9中(a)、(b)、(c),图11中(c),图12中(c),图14中(c)以及图16中(a)~(h)所示;
第三步,将渲染到纹理顶点输入布局和顶点缓冲区绑定到管线的输入汇编阶段;
第四步,用循环语句遍历手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制渲染到纹理所定义的矩形,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态。
步骤8:网格创建与渲染,创建地震数据网格并渲染输出。本实施例创建地震数据网格的步骤为:
第一步,为了在CPU中获取渲染后的倾斜方式纹理中的值,需要创建一个和倾斜方式纹理同样大小、同样纹理元素格式的纹理,纹理的CPU访问标志为只读,然后将倾斜方式纹理资源复制到新创建的目的纹理中;
第二步,获取指向目的纹理的数据起始地址的指针;
第三步,定义一个三维向量型的位置动态链表,从左边第一个道开始遍历每一道上的每一个地震样点,遍历到每一个地震样点时,位置链表增加一个元素,元素的x值为地震样点所处的道号向减去所需显示地震道总数的一半(为了使显示的曲面的中心在窗口的中心上)再乘以水平方向的尺度,y值为地震样点的时间序号向减去每道上所需显示样点总数的一半(为了使显示的曲面的中心在窗口的中心上)再乘以垂直方向的尺度,没有给Z分量赋值,Z分量的值在顶点着色器中基于前两个坐标通过采样地震数据纹理得到,然后将此位置向量赋值给一个临时的地震数据顶点结构对象,并将此对象添加到地震数据顶点动态链表中;
第四步,根据相应位置处倾斜方式纹理中纹理元素的值是表示上倾斜或者下倾斜或者没有倾斜来给索引动态链表增加六个索引值,这六个索引值是的同一道上的两个相邻样点和下一道上的两个相邻样点构成了一个矩形,这就是前面所述的本实施例所采用的低倾斜自适应相关倾斜方式,获得的地震剖面数据的显示结果如图20中所示;
第五步,使指向目的纹理的数据起始地址的指针无效,释放目的纹理;
第六步,以地震数据输入顶点布局、地震数据顶点动态链表的大小、索引动态链表的大小等为参数创建地震数据网格。
本实施例最后的渲染步骤为:
第一步,将可编程管线的渲染目标改为设备原来的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,获取摄像机的世界、观察、投影矩阵并更新到GPU中对应的常量中;
第三步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备;
第四步,用循环语句遍历渲染输出效果文件手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制地震数据网格,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态。
经过以上步骤之后,本实施例即实现了对地震剖面数据的三维显示,实现了一种二维地震数据剖面的三维显示方法,为了验证本方法的可行性与先进性,在图15(a)~(e)列出了采用Seisee2.5.beta-2软件对与本实施例中相同的地震剖面数据以几种不同传统二维方式显示的结果,Seisee2.5.beta-2是由国际石油地质界知名的俄罗斯导蒙乃地质技术公司(DMNG-Dalmornefte geophysica)的Sergey Pavlukhin在2006年4月开发出来的,在图16(a)~(h)中列出了本实施例通过采用颜色指数渐进调色板、线性幅度插值、线性纹理坐标映射以及低倾斜自适应相关镶嵌得到的地震剖面的从各个三维角度观察得到的显示结果,通过对比可知本实施例所获得的三维显示结果可以更方便、有效地分析地质结构,证明了本发明的先进性。
Claims (1)
1.一种二维地震剖面三维显示方法,其特征在于:该方法的具体实现步骤如下,
步骤1:地震数据读取与解析,以二进制方式从磁盘中读入标准segy地震数据并解析出地震样点数据;
步骤2:顶点输入布局创建,定义顶点的属性结构,包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建;
步骤3:调色板纹理创建与采样,创建用于在显示中为地震数据顶点着色的调色板并定义在GPU着色器中采样调色板纹理的方式;
步骤4:倾斜方式纹理创建,创建一幅纹理,用于存储所渲染显示的每一个地震样点的数值化的倾斜方式;
步骤5:地震数据纹理创建,创建一幅用于存储地震数据的纹理,以通过在GPU中采样地震数据纹理方式将地震数据传递到GPU中;
步骤6:效果文件创建,效果文件封装了与所需绘制效果相关的着色器、设备状态和绘制路径任务,这里创建的效果文件包括渲染到纹理效果文件创建和渲染输出效果文件创建;
步骤7:渲染到纹理,将所需渲染显示的每一个地震样点的数值化后的倾斜方式渲染到纹理中;
步骤8:网格创建与渲染,创建地震数据网格并渲染输出;
具体包括以下步骤,
步骤1:地震数据读取与解析,用S(x,y)表示读取的标准segy格式的地震数据,(x,y)表示样点在地震剖面中的二维坐标,x、y均为非负整数,要显示的地震剖面的范围是以(j0,i0)为起始点的w道、h个样点,考虑到相关时窗口大小为5,窗口滑动范围为(-1,1),所以x、y的取值范围为j0≤x≤j0+w-1,i0-3≤y≤i0+h+2,确定了要显示的地震数据大小之后,就可以确定窗口的大小了;以二进制方式从本地磁盘中读取要显示的标准segy地震剖面数据,由于数据中包含3200字节EBCDIC文件头、400字节二进制文件头,每一道地震数据的前面都有240字节的道头信息,读取每一道地震数据时,都要先将读取地址定位到3600+j0×(240+每一道的样点总数×4)位置处,每一道的样点数信息存储在道头信息中,在本方法中为4001,然后读取要显示的地震样点数据,标准segy地震剖面数据的编码格式为32位的IBM浮点型格式,将其转换为微机处理的IEEE型格式并存储,即完成了地震数据的读取与解析;
步骤2:顶点输入布局创建,包括地震数据顶点输入布局创建和渲染到纹理顶点输入布局创建两部分,用于定义顶点的结构属性;创建方法分别如下:
地震数据顶点输入布局创建的步骤是:
第一步,先创建一个包含地震数据顶点所需属性的结构体,此结构体包含了顶点各分量的类型和属性名,这里只需一个三维位置向量,这个三维位置向量用包含三个32位浮点分量的D3DXVECTOR3类型来定义;如果通过将顶点的颜色属性添加到此结构中来对顶点进行着色,将会产生顶点之间颜色不能与地震幅度正确对应的问题,如果将颜色作为顶点结构的属性之一,那么光栅化器在对顶点位置进行插值的同时也对颜色进行了插值,而它对颜色的插值并不是根据地震幅度进行的;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里只需要描述位置分量即可,包括位置分量的语义、格式;
第三步,创建地震顶点输入布局layout,以使Direct3D知道该如何使用每个分量,同时也建立了从顶点结构体到着色器输入之间的映射关系;
第四步,在创建地震数据网格时,用于说明地震顶点的格式;
渲染到纹理顶点输入布局创建的步骤是:
第一步,先创建一个包含渲染到纹理顶点的结构体,包含顶点各分量的类型和属性名,需要一个三维位置分量和一个二维纹理坐标分量,即:D3DXVECTOR3和D3DXVECTOR2两种类型的分量;
第二步,创建D3D10_INPUT_ELEMENT_DESC型数组,数组中的每个元素描述了顶点结构体的一个分量,这里描述了三维位置分量和二维纹理坐标分量;
第三步,创建渲染到纹理顶点输入布局,以使Direct3D知道该如何使用每个分量,同时也建立从顶点结构体到着色器输入之间的映射关系;
第四步,在设备使用渲染到纹理顶点输入布局之前,顶点输入布局绑定到管线的输入汇编阶段;
步骤3:调色板纹理创建与采样,创建用于为地震数据顶点着色的调色板并定义调色板的采样方式,调色板纹理元素的格式为128位浮点数,包含R、G、B、A四个分量,每个纹理坐标对应了一种颜色,本方法定义饱和度为1的红色表示地震幅度最小值,白色表示0幅度,饱和度为1的蓝色表示地震幅度最大值,假设调色板中定义了n个颜色向量,则纹理坐标(U,V)中V=0,U从0到1按n个级别渐变,在U=0.5处为白色,此纹理实现了调色板的功能;显示地震数据时,在渲染输出效果文件的像素着色器中将地震样点幅度值转换为纹理坐标,通过采样调色板纹理来实现地震数据采样点的幅度值与颜色值的一对一映射,本方法将此称为颜色幅度插值,线性颜色幅度插值时地震样点幅度Z与纹理坐标U的映射关系表示为:
其中,Z最大和Z最小分别为所要显示的地震剖面中地震数据样点幅度的最大值为正和最小值为负;
像素着色器中由地震样点幅度转换得到的纹理坐标之所以可以线性地采样调色板,是由于此调色板是一个1维的浮点纹理,而在采样浮点纹理时,纹理元素的值会根据纹理坐标的不同线性地插值;
由于地震剖面显示的对比度较低,有很大一部分区域都是白色或者浅白色,这是由于地震样点中极少数幅度较大的顶点对应到了调色板的两端,而大部分中间幅度的顶点就自然被着色为颜色较浅的红色、蓝色或者白色,可以用两种方法来解决这个问题;
一种方法是将像素着色器中的线性纹理坐标映射改为指数坐标映射,地震样点幅度与纹理坐标的映射关系表示为:
其中,N为大于1的正整数,取N=5,这样在地震样点幅度大于0或者小于0的地方,顶点颜色就会很快地变为蓝色或者红色,采用这种指数纹理坐标映射后所获得的地震剖面三维显示的对比度明显增强的同时在地震幅度为0值的附近却出现了颜色与地震幅度不一致的情况,之所以会产生这种现象,是由于在将归一化的地震幅度以指数形式映射为纹理坐标的时候,指数小于1,也就是要对小于1的归一化地震幅度做开方运算,这样就难以保证在0值附近的精度,从而导致了在0值附近颜色不一致的现象;
另一种增强对比度的方法是将调色板中的白色区域向中间集中,将线性渐进调色板改为指数渐进即可以产生这种调色板;调色板中R/G分量或者G/B分量与纹理坐标U的对应关系可表示为:
其中,y值的意义为:当U值小于等于0.5时,表示颜色分量中的G/B的值,G分量或者B分量,G=B,当U值大于0.5时,表示颜色分量中的R/G的值,R分量或者G分量,R=G,U的值用x表示0≤x≤1;产生这种调色板之后,在像素着色器中仍然采用线性纹理坐标映射,就可以实现地震样点幅度与调色板中颜色的一一对应;采用这种方式后地震剖面显示的对比度可以得到增强,同时由地震幅度为0值附近三角形单元顶点之间的区域,颜色得到了正确的插值,与地震幅度一一对应;
步骤4:倾斜方式纹理创建,创建一个同时用作渲染目标和着色器资源的纹理,每一个纹理元素都含有R、G、B、A四个分量共128位,用于存储地震样点的数值化的倾斜方式,将地震样点的倾斜方式存储在纹理元素的R分量中,在创建地震数据网格时利用地震样点的倾斜方式来定义顶点索引;此纹理同时用作渲染目标和着色器资源,在将GPU中计算得到的地震样点数值化的倾斜方式渲染到此纹理的时候,此纹理作为渲染目标;在根据地震样点数值化的倾斜方式来定义地震数据网格顶点的索引时,此纹理作为着色器资源,对存储在纹理元素中的数值化的地震样点倾斜方式进行读取;之所以要考虑地震样点的倾斜方式,是因为对于相邻两个地震道上同样的四个地震样点,采用不同的镶嵌方式时会产生不同“脊”或“槽”的结构,本方法通过求相关系数的方式来查找与以四边形的控制点即四边形左上角的地震样点为中心的地震样点序列相关度最大的下一地震道上的相同长度序列的中心点,以此来决定四边形即由四个地震样点镶嵌生成究竟应该采取哪一种镶嵌方式,本方法在像素着色器中通过下式来计算以当前样点为中心的样点序列与相邻的下一地震道上的若干样点间隔的同样长度的地震样点序列的互相关函数值和相关系数,计算方法可分别表示为:
其中(4)式表示计算序列X和序列Y的互相关序列RXY(τ)的方法,下标xy表明了关联的序列,xy的顺序表示序列X未移动,序列Y移动τ个单位,RXY(τ)表示序列X和序列Y互相关函数值的大小,R'XY(τ)表示序列X和序列Y相关系数的大小;τ是移位参数;T为序列周期,N表示表示序列X和序列Y中元素编号的最大值;k表示元素序号的变量,k取值0~N,计算出对应于每一个τ的相关系数之后,找出对应相关系数最大值时的τ值,根据此τ值来判断当前地震样点应该是上倾斜还是下倾斜或者不倾斜,上倾斜用1表示,下倾斜用-1表示,倾斜幅度较小时视为不倾斜,取值为0,也就是将相关系数最大值对应的τ值取反即可得地震样点数值化的倾斜方式;然后通过渲染到纹理将数值化的倾斜方式渲染到倾斜方式纹理的对应纹理元素的R分量中,纹理元素的其他分量都设为1.0;
步骤5:地震数据纹理创建,根据要显示的地震剖面数据的大小,创建对应的浮点纹理,然后将地震样点数据对应填充到纹理元素中,在GPU中通过顶点着色器和像素着色器采样此纹理来实现对地震数据的访问,本方法要显示地震剖面中以(1400,1150)为起始点的400道、300个样点,根据步骤1中所述,读取的地震道和地震样点即x、y的取值范围应为1400≤x≤1799,1147≤y≤1452,创建的地震数据纹理的大小为400×306;
步骤6:效果文件创建,包括创建渲染到纹理效果文件和创建渲染输出效果文件两部分,创建方法分别为:
渲染到纹理效果文件创建:创建用于将每一个地震样点的倾斜方式渲染到纹理的效果文件,包含了一个手法,手法中包含一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中仅将输入的顶点位置和纹理坐标输出给像素着色器,不做任何变换,实现平行投影,将像素着色器输出的值渲染到对应的倾斜方式纹理的纹理元素上,在像素着色器中采样地震数据纹理,利用一个大小为5个地震样点间隔的窗口计算目标样点与下一道上窗口滑动范围(+1、0、-1)内样点的相关系数,用正负号来表示样点是上倾斜还是下倾斜,用数值+1、0、-1表示倾斜幅度,将结果渲染到倾斜方式纹理的纹理元素R分量中;
渲染输出效果文件创建:创建用于将地震数据网格渲染输出的效果文件,包含一个手法,手法中使用一个路径,在路径中包含一个顶点着色器和像素着色器,在顶点着色器中根据输入的x、y坐标来采样地震数据纹理中的样点值作为z坐标,然后进行世界变换、观察变换和投影变换,并将地震数据纹理中的样点值转换为纹理坐标输出给像素着色器,转换方式在步骤3中已进行详述,采用的是线性纹理坐标映射;需要说明的是,这里用于转换为纹理坐标的地震样点幅度值已经经过了光栅化器的自动线性插值,在像素着色器中根据顶点着色器输出的纹理坐标采样调色板纹理,为地震数据顶点着色;
步骤7:渲染到纹理,将所需显示的每个地震样点的倾斜方式渲染到倾斜方式纹理中,渲染到纹理的步骤为:
第一步,将可编程管线的渲染目标改为倾斜方式纹理的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备;
第三步,将渲染到纹理顶点输入布局和顶点缓冲区绑定到管线的输入汇编阶段;
第四步,用循环语句遍历手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制渲染到纹理所定义的矩形,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态;
步骤8:网格创建与渲染,创建地震数据网格并渲染输出;创建地震数据网格的步骤为:
第一步,为了在CPU中获取渲染后的倾斜方式纹理中的值,需要创建一个和倾斜方式纹理同样大小、同样纹理元素格式的纹理,纹理的CPU访问标志为只读,然后将倾斜方式纹理资源复制到新创建的目的纹理中;
第二步,获取指向目的纹理的数据起始地址的指针;
第三步,定义一个三维向量型的位置动态链表,从左边第一个道开始遍历每一道上的每一个地震样点,遍历到每一个地震样点时,位置链表增加一个元素,元素的x值为地震样点所处的道号向减去所需显示地震道总数的一半即为了使显示的曲面的中心在窗口的中心上再乘以水平方向的尺度,y值为地震样点的时间序号向减去每道上所需显示样点总数的一半即为了使显示的曲面的中心在窗口的中心上再乘以垂直方向的尺度,没有给Z分量赋值,Z分量的值在顶点着色器中基于前两个坐标通过采样地震数据纹理得到,然后将此位置向量赋值给一个临时的地震数据顶点结构对象,并将此对象添加到地震数据顶点动态链表中;
第四步,根据相应位置处倾斜方式纹理中纹理元素的值是表示上倾斜或者下倾斜或者没有倾斜来给索引动态链表增加六个索引值,这六个索引值是同一道上的两个相邻样点和下一道上的两个相邻样点构成了一个矩形;
第五步,使指向目的纹理的数据起始地址的指针无效,释放目的纹理;
第六步,以地震数据输入顶点布局、地震数据顶点动态链表的大小、索引动态链表的大小为参数创建地震数据网格;
最后的渲染步骤为:
第一步,将可编程管线的渲染目标改为设备原来的渲染目标视图,然后将渲染目标绑定到渲染管线的输出合并阶段;
第二步,获取摄像机的世界、观察、投影矩阵并更新到GPU中对应的常量中;
第三步,创建一个光栅化状态块,可以在这里设置图元拓扑方式为线框方式或者填充方式,然后使用这个状态块更新设备;
第四步,用循环语句遍历渲染输出效果文件手法中的每个路径,获取所用路径对象的接口指针,使用路径来绘制地震数据网格,此时Direct3D会启用在路径中指定的着色器和渲染状态,通过路径的Apply方法更新在GPU内存中的常量缓冲区、将着色器程序绑定到管线、并启用在路径中指定的各种渲染状态;
第五步,调用设备的RSSetState()方法并指定空值来恢复光栅化状态块的默认状态;
经过以上步骤之后,即实现了对地震剖面数据的三维显示,实现了一种二维地震数据剖面的三维显示方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510429027.7A CN105096385B (zh) | 2015-07-20 | 2015-07-20 | 一种二维地震剖面三维显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510429027.7A CN105096385B (zh) | 2015-07-20 | 2015-07-20 | 一种二维地震剖面三维显示方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105096385A CN105096385A (zh) | 2015-11-25 |
CN105096385B true CN105096385B (zh) | 2018-06-12 |
Family
ID=54576714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510429027.7A Active CN105096385B (zh) | 2015-07-20 | 2015-07-20 | 一种二维地震剖面三维显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105096385B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105676290B (zh) * | 2016-04-03 | 2017-10-13 | 北京工业大学 | 基于曲面细分的地震数据三维显示方法 |
CN106530388A (zh) * | 2016-09-08 | 2017-03-22 | 上海术理智能科技有限公司 | 一种基于二维图像的3d打印装置及其三维建模方法 |
CN109284952B (zh) * | 2017-07-21 | 2023-04-18 | 菜鸟智能物流控股有限公司 | 一种归属区域的定位方法和装置 |
CN107729105B (zh) * | 2017-09-29 | 2021-02-26 | 中国石油化工股份有限公司 | 一种基于Web的地震底图与剖面联动方法 |
CN108305315B (zh) * | 2018-01-24 | 2022-05-17 | 珠江水利委员会珠江水利科学研究院 | 一种基于wpf的三维地形高效渐变着色方法 |
CN113325475A (zh) * | 2020-02-28 | 2021-08-31 | 中国石油天然气集团有限公司 | 地震剖面显示方法及装置 |
CN112131767B (zh) * | 2020-09-04 | 2023-02-28 | 内蒙古工业大学 | 秸秆揉碎机多重耦合噪声的数值预测方法 |
CN112305607A (zh) * | 2020-10-28 | 2021-02-02 | 中国石油天然气集团有限公司 | 地震数据纵剖面图形绘制方法及装置 |
CN112698403B (zh) * | 2020-12-04 | 2023-08-22 | 中国石油天然气股份有限公司 | 变密度地震剖面显示方法及装置 |
CN112698404B (zh) * | 2020-12-10 | 2024-06-25 | 中国石油天然气股份有限公司 | 波形变面积地震剖面显示方法及装置 |
CN114780666B (zh) * | 2022-06-23 | 2022-09-27 | 四川见山科技有限责任公司 | 一种数字孪生城市中道路标签优化方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102903141A (zh) * | 2012-08-31 | 2013-01-30 | 电子科技大学 | 基于不透明度加权的多地震属性融合纹理映射体绘制方法 |
CN103544675A (zh) * | 2013-10-22 | 2014-01-29 | 中测新图(北京)遥感技术有限责任公司 | 地震波传播展示方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6690820B2 (en) * | 2001-01-31 | 2004-02-10 | Magic Earth, Inc. | System and method for analyzing and imaging and enhanced three-dimensional volume data set using one or more attributes |
-
2015
- 2015-07-20 CN CN201510429027.7A patent/CN105096385B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102903141A (zh) * | 2012-08-31 | 2013-01-30 | 电子科技大学 | 基于不透明度加权的多地震属性融合纹理映射体绘制方法 |
CN103544675A (zh) * | 2013-10-22 | 2014-01-29 | 中测新图(北京)遥感技术有限责任公司 | 地震波传播展示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105096385A (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105096385B (zh) | 一种二维地震剖面三维显示方法 | |
RU2298831C9 (ru) | Способ и устройство для визуализации трехмерных данных вокселов при использовании освещенных непрозрачных объемов с затенением | |
LeBlanc et al. | Exploring n-dimensional databases | |
Clark | Hierarchical geometric models for visible surface algorithms | |
Giertsen | Volume visualization of sparse irregular meshes | |
US8570322B2 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
US7995057B2 (en) | System and method for real-time co-rendering of multiple attributes | |
CN111784833A (zh) | 基于WebGL的洪水演进态势三维动态可视化展示方法 | |
WO2009149332A1 (en) | Systems and methods for imaging a three-dimensional volume of geometrically irregular grid data representing a grid volume | |
CN105701855B (zh) | 基于符号结构的线型地图符号反走样绘制方法 | |
Rocha et al. | Decal-maps: Real-time layering of decals on surfaces for multivariate visualization | |
CN105184843B (zh) | 一种基于OpenSceneGraph的三维动画制作方法 | |
CN108230433A (zh) | 3d地图散点数据展示方法及系统、信息数据处理终端 | |
Bürger et al. | Visualization of multi-variate scientific data. | |
Upson | Volumetric visualization techniques | |
CN110517343A (zh) | 一种基于OpenGL着色语言的程序式纹理的优化方法和系统 | |
Brodlie | Visualization techniques | |
CN102074004B (zh) | 空间实体遮挡类型的判定方法及装置 | |
Gröller | Insight into data through visualization | |
Nordahl | Enhancing the hpc-lab snow simulator with more realistic terrains and other interactive features | |
Lin | Geoscience visualization with GPU programming | |
Tian et al. | Progressive rendering of transparent integral surfaces | |
Stuetzle et al. | Reflection of a Horizon Image on the Surface of Water | |
Ceballos et al. | Visualization of Large Scale Reservoir Models | |
Mei et al. | Cartographic symbol library considering symbol relations based on anti-aliasing graphic library |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |