MATLAB:设置绘图多边形内的点等于零

时间:2015-10-20 17:14:25

标签: image matlab plot

我目前正在MATLAB中进行一些地震建模和处理,并想提出一种简单的方法来静音各种数据集的各个部分。例如,如果我绘制一些数据的频率 - 波数谱,我会得到以下结果:

enter image description here

现在,我想要静音这里的一些数据。我当然可以尝试遍历这里表示的整个矩阵并指定一个阈值,其中高于所述值的所有值都应该设置为零,但是当我稍后将使用更复杂的fk-时,这将是非常困难和耗时的。光谱。我最近了解到MATLAB有一个内置函数impoly,它允许我以交互方式绘制多边形。例如,我说我在我的情节中用impoly - 函数:

绘制下面的多边形

enter image description here

现在我能做些什么来设置这个多边形内的所有点都等于零?如上所示定义多边形后,我还没有找到如何进行处理以使多边形中包含的信息静音,所以如果有人可以在这里给我一些帮助,那么我将非常感激!

1 个答案:

答案 0 :(得分:4)

是的,一旦您在图中描绘了多边形,就可以使用createMask函数作为impoly界面的一部分。使用创建此掩码后,您可以使用掩码索引数据并将正确的区域设置为零。

以下是在MATLAB中使用pout.tif图像的快速示例:

im = imread('pout.tif');
figure; imshow(im);
h = impoly;

我得到这个图,我在这张图片中画了一个多边形:

enter image description here

现在,使用带有createMask调用句柄的impoly函数创建一个封装此多边形的二进制掩码:

mask = createMask(h);

我得到这个面具:

imshow(mask);

enter image description here

然后,您可以使用此掩码索引数据并将正确的区域设置为0.首先复制原始数据,然后相应地设置数据。

im_zero = im;
im_zero(mask) = 0;

我现在知道了:

imshow(im_zero);

enter image description here

请注意,这仅适用于单通道(2D)数据。如果你想将它应用于多通道(3D)数据,那么通常可以使用掩码的相反进行通道乘法操作。

这样的事情:

im_zero = bsxfun(@times, im, cast(~mask, class(im)));

上面的代码与多边形蒙版相反,将其转换为与原始输入im相同的类,然后分别对输入的每个通道执行此蒙版的逐元素乘法。结果将使掩码中定义的每个空间位置归零所有通道。