我目前正在MATLAB中进行一些地震建模和处理,并想提出一种简单的方法来静音各种数据集的各个部分。例如,如果我绘制一些数据的频率 - 波数谱,我会得到以下结果:
现在,我想要静音这里的一些数据。我当然可以尝试遍历这里表示的整个矩阵并指定一个阈值,其中高于所述值的所有值都应该设置为零,但是当我稍后将使用更复杂的fk-时,这将是非常困难和耗时的。光谱。我最近了解到MATLAB有一个内置函数impoly
,它允许我以交互方式绘制多边形。例如,我说我在我的情节中用impoly
- 函数:
现在我能做些什么来设置这个多边形内的所有点都等于零?如上所示定义多边形后,我还没有找到如何进行处理以使多边形中包含的信息静音,所以如果有人可以在这里给我一些帮助,那么我将非常感激!
答案 0 :(得分:4)
是的,一旦您在图中描绘了多边形,就可以使用createMask
函数作为impoly
界面的一部分。使用创建此掩码后,您可以使用掩码索引数据并将正确的区域设置为零。
以下是在MATLAB中使用pout.tif
图像的快速示例:
im = imread('pout.tif');
figure; imshow(im);
h = impoly;
我得到这个图,我在这张图片中画了一个多边形:
现在,使用带有createMask
调用句柄的impoly
函数创建一个封装此多边形的二进制掩码:
mask = createMask(h);
我得到这个面具:
imshow(mask);
然后,您可以使用此掩码索引数据并将正确的区域设置为0.首先复制原始数据,然后相应地设置数据。
im_zero = im;
im_zero(mask) = 0;
我现在知道了:
imshow(im_zero);
请注意,这仅适用于单通道(2D)数据。如果你想将它应用于多通道(3D)数据,那么通常可以使用掩码的相反进行通道乘法操作。
这样的事情:
im_zero = bsxfun(@times, im, cast(~mask, class(im)));
上面的代码与多边形蒙版相反,将其转换为与原始输入im
相同的类,然后分别对输入的每个通道执行此蒙版的逐元素乘法。结果将使掩码中定义的每个空间位置归零所有通道。