为 post 分析定义半径内的点

Define points within a radius for post analysis

我是 matlab 的新手,正在尝试解决问题。我有一个 50x50 的矩阵。它代表我在涡轮机后面记录的数据。涡轮机基本上放置在该平面的中心点 (25,25) 处。它的半径为 5。因此它到达矩阵中心左侧的 (20,25) 和右侧的 (30,25)。我知道距离计算公式是pdist([dpx,dpy;centerx,centery])。但是我该如何设置它,以便 matlab 识别半径为 5 的所有点。我试图将所有这些点(仅涡轮半径内的点)乘以它们与矩阵中心的距离。我想象需要一个 for 循环,但我不知道如何应用它。

创建坐标网格:

[x, y] = meshgrid(1 : 50);

计算每个网格点距(25, 25)的距离:

d = sqrt((x - 25) .^ 2 + (y - 25) .^ 2);

为涡轮区域内的每个网格位置生成一个包含 1(真)的逻辑数组:

turb = (d <= 5);

您可以绘制结果:

imagesc(turb)
axis equal tight

或使用 turb 从测量矩阵中选择值 m

m(turb)

使用 logical indexing.

请注意,索引 (25, 25) 不表示 50 x 50 网格的中心,而是 (25.5, 25.5)。

使用逻辑索引,您可以在矩阵中找到相关索引并且 select 只有它们:

[x,y] = meshgrid(1:50);
centered_valued = ((x-25).^2+(y-25).^2 <= 5^2);
requested_matrix = originalMatrix(centered_values);

meshgrid 函数计算两个矩阵:第一个包含每一行的 x 索引,第二个包含 y 每列的索引。

然后您使用布尔计算来查找距离中心(位于 (25,25))半径范围内的索引。

此逻辑数组可用作原始矩阵的 "index"。结果将是一个较小的矩阵(尽管您可能被迫使用 (:) 运算符,因为结果不一定是矩形矩阵)。

如果您有图像处理工具箱,也可以使用bwdist命令为您计算距离。

创建一个选择了中心点的蒙版:

bw = zeros(50,50); bw(25,25) = 1;

计算从中心到每个点的距离(注意bwdist也允许多种距离计算,详见doc bwdist

distance = bwdist(bw);

创建涡轮像素蒙版:

turbine = (distance <= 5);

您问的是将涡轮机中的像素乘以它们到中心的距离。如果原始数据存储在50x50矩阵orig,那么你可以这样做:

orig(turbine) = orig(turbine) .* distance(turbine);