地下钻孔数据是通过钻孔和提取岩石或土壤芯来收集的,由分散在 3D 空间中的样本组成,这些样本测量不同的连续或分类变量。每个样本记录:(1) 由东、北和高程表示的 3D 空间坐标,(2) 连续变量,例如元素浓度、污染物、矿石品位或温度等等,以及 (3) 分类变量,例如作为岩性、蚀变或矿化单元。
左上图在 3D 散点图中显示钻孔样本的位置,左下图放大显示单个钻孔内的样本,右侧的图像是盒装岩心测井,显示了物理岩石样本的外观。
钻孔数据或类似的 3D 地理空间数据集用于地球科学和自然资源行业,以了解地下的各种不同应用,例如采矿中的矿体建模、石油和天然气中的储层测绘、水文地质中的污染物跟踪以及用于建筑或地质灾害目的的岩石或土壤稳定性划定。除了传播和分析目的之外,可视化 3D 地理空间信息通常也是任何后续地质建模、工作流程或探索性数据分析的第一步。
尽管可视化钻孔数据很重要,但一些地球科学家经常依赖昂贵的软件来绘制他们的 3D 数据,因为大多数处理岩石和土壤的人通常缺乏丰富的编程经验。绘制 3D 钻孔数据实际上非常简单,可以使用任何编程语言完成,例如 Python(使用 numpy 和 matplotlib)、R、Octave 或 Matlab。以下是一个用 Matlab 编码的简单教程,用于可视化应用在来自主要铜矿的真实采矿数据集上的钻孔数据。
使用的挖掘数据集的标题行和前五行数据
尽管本教程是在采矿环境中进行的,但可视化技能可用于相同类型的 3D 地理空间数据集,这些数据集也用于石油和岩土工业以及建筑、地质灾害和水文地质等等。
首先,我们导入将要使用的挖掘数据集和所有相关变量以进行演示。该数据集包含 16,258 个样本,分布在东约 3 公里、北约 2 公里、海拔 1 公里的矩形体积中,每个样本测量连续的地球化学元素浓度以及分类地质改变单元。
data = importdata('Dataset.txt');
%Spatial coordinates
x = data(:,1); %Easting coordinates in km
y = data(:,2); %Northing coordinates in km
z = data(:,3); %Elevation coordinates in km
%Continuous variables
Cu = data(:,4); %Copper grade in ppm
Mg = data(:,5); %Magnesium grade in wt%
Al = data(:,6); %Aluminum grade in wt%
%Categorical variable
Alte = data(:,7); %Geological alteration unit
在绘制任何变量之前,地理坐标将用于使用scatter3函数可视化所有样本的位置。轴的比例应始终相等,除非夸大高程可能会显示由于数据在其他两个主要方向上的空间范围而可能遗漏的要素。使用Matlab中的axis equal命令可以轻松缩放坐标轴。下面的示例将 3D 散点图与未缩放轴和缩放轴进行比较。
使用地理坐标可视化的样本位置在左侧不按比例绘制,而在右侧按比例绘制
现在我们已经正确地缩放了轴,可以使用颜色来绘制变量以表示它们在空间中的值。我们还可以使用对数颜色条或不同的颜色来更好地可视化某些变量或变量比率。下面显示了几个使用不同颜色条和色标的示例。
左侧为线性色标的 Cu 品位 3D 散点图和右侧为对数色标的 Al/Mg 比的 3D 散点图,两者均显示了整个体积中绘制变量的空间分布
还可以通过改变绘图点的大小或形状来引入其他维度,这可以作为空间数据多维探索性分析的附加工具。在下面的示例中,点的大小设置为等于铝镁比 (Al/Mg),颜色用于显示铜的等级。
多维散点图使用位置在 3D 空间中定位样品,尺寸显示 Al/Mg 比,颜色代表铜品位
多维图突出显示了在 Al/Mg 的中间值下如何发现更高品位的铜,因为较大和较小的点通常具有较小的铜浓度。
我们希望可视化采矿数据集中的四个不同类别变量,它们由以下地质蚀变单元组成:绿泥石-绢云母、石英-绢云母、钾和泥质。绘制此分类数据的一种方法是创建一个 3D 散点图并根据其分类值为每个点着色,就像我们对连续变量所做的那样,如下例所示。
散点图显示样品位置和四个地质蚀变单元中的每一个:绿泥石-绢云母 (Chl-Ser)、石英-绢云母 (Qtz-Ser)、钾和 Argillic
在处理分类数据时,当将分类单元或域可视化为块模型中的体积而不是分散在 3D 空间中的点时,我们可以获得更多可操作的信息。块模型是通过以下方式生成的:(1)在整个体积中创建一个规则间隔的点网格,以及(2)根据数据中最近相邻样本的类别为每个点分配一个类别。对于更具代表性的块模型,应过滤点以仅包括来自实际数据样本的设置搜索半径内的点。
这很容易编程和可视化,因为在大多数编程语言中都有几个最近邻库可用,下面显示了在 Matlab 中编码的示例。
%Step size and radius inputs
SS = 0.01; % Step size in km
r = 0.01; % Search radius in km
xp=0:SS:max(x); yp=0:SS:max(y); zp=0:SS:max(z);
[X,Y,Z] = meshgrid(xp,yp,zp); % Create grid of points
Xp = X(:); Yp = Y(:); Zp = Z(:);
Data_xyz = [x y z]; % Spatial coordinates in matrix
Block_xyz = [Xp Yp Zp]; % Block model coordinates in matrix
[Idx D] = knnsearch(Data_xyz,Block_xyz); % Nearest neighbor search
Block_xyz(:,4) = alte(Idx); % Assign block values an alteration unit to nearest sample
Block_xyz = Block_xyz.*(D<=r); %Filter to search radius
%visualize Block_xyz with scatter3
应使用足够小的步长来填充体积,同时保持合理的总点数以便于处理和可视化。适当的步长将取决于所考虑的总体积,较大的体积相应地较大的步长和较小的体积的较短的步长。
对于正在使用的挖掘数据集,步长设置为 10 m,因此在所有三个方向上每 10 m 将有一个点。应测试不同的搜索半径以确定哪一个可以充分可视化体积。根据下面的示例,66 m 到 100 m 之间的搜索半径对于该数据集就足够了。
具有不同搜索半径的地质块模型显示了四个蚀变单元的空间分布
最后,每个域的块模型可以在总体积内单独绘制,以更好地可视化每个域的空间分布,如下例所示:
使用 75 m 搜索半径的蚀变单元的最终地质块模型。组合块模型显示在每个单独绘制的更改单元上方,突出显示每个单元在总体积内的空间分布位置和方式
区块模型更容易总结每个地质蚀变单元的位置:
可视化钻孔数据在地球科学和自然资源行业中至关重要,许多地球科学家目前依靠昂贵的商业软件包来做到这一点。使用任何标准编程语言绘制 3D 地理空间数据实际上都非常简单,本文展示了几种在 3D 空间上下文中可视化连续、分类和多维变量的技术。
尽管此处介绍的教程使用了采矿数据集,但 3D 可视化技术也可以应用于各种其他应用,例如绘制地下水污染物、土壤强度参数、岩石强度和稳定性、油气量以及地下地热温度等一些。
原文链接:地下钻孔数据的3D可视化— BimAnt