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