定义半径内的点以进行后期分析

时间:2015-02-04 18:07:48

标签: matlab matrix distance

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

3 个答案:

答案 0 :(得分:1)

创建坐标网格:

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

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

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

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

turb = (d <= 5);

您可以绘制结果:

imagesc(turb)
axis equal tight

或使用turb从测量矩阵m

中选择值
m(turb)

使用logical indexing

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

答案 1 :(得分:1)

使用逻辑索引,您可以在矩阵中找到相关索引并仅选择它们:

[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)中。

然后,这个逻辑数组可以用作&#34;索引&#34;对于原始矩阵。结果将是一个较小的矩阵(尽管您可能被迫使用(:)运算符,因为结果不一定是矩形矩阵。)

答案 2 :(得分:0)

如果您有图像处理工具箱,还可以使用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);