我的问题是我已经将图片中的点距离计算到三个静态点。我想知道哪个距离最小,并将像素的值写入第二个数组。我使用min()
来获取索引,但我不知道如何使用这些索引访问图片。我简化了一些代码:
data = rand(5, 5, 3); # distances of a 5x5 image to 3 different points
[~, mi] = min(data, [], 3); # which of the distances is the minimum
result = picture(mi); # write pixel values to result
我知道这只会给我picture(1:3, 1, 1)
的值,所以前三个像素,我没有找到适合转换指标的函数。我怎样才能实现这一点并避免编写循环?
修改
清除。 mi
可能是
data = rand(3, 3, 2)
data =
ans(:, :, 1) =
0.316498 0.054937 0.606390
0.537073 0.231184 0.790371
0.770788 0.334282 0.522369
ans(:,:,2) =
0.843369 0.051667 0.227570
0.452298 0.407662 0.648079
0.450546 0.398068 0.281694
[~, mi] = min(data, [], 3)
mi =
1 2 2
2 1 2
2 1 2
data(mi)
ans =
0.31650 0.53707 0.53707
0.53707 0.31650 0.53707
0.53707 0.31650 0.53707
正如您所看到的,我只访问了data(1)
和data(2)
这些基本data(1, 1, 1)
和data(2, 1, 1)
的内容,但我希望能够结果如下
0.31650 0.051667 0.227570
0.452298 0.231184 0.648079
0.450546 0.334282 0.281694
答案 0 :(得分:0)
在此上下文中min
的返回为您提供了最小值出现的矩阵切片,这是预期的结果,但不一定是最有用的结果。您可以使用sub2ind
与meshgrid
生成linear indices来访问您的最低位置:
tmp = rand(3, 3, 2);
[mins, mi] = min(tmp, [], 3);
[r, c, ~] = size(tmp); % Get number of rows & columns
[y, x] = meshgrid(1:r, 1:c); % Generate x,y pairs
lidx = sub2ind(size(tmp), x(:), y(:), mi(:)); % Generate linear indices
% Test out the linear indices
mins_lidx = reshape(tmp(lidx), r, c); % Reshape to the slice size
其中
>> all(mins(:)==mins_lidx(:))
ans =
logical
1
如果需要,您也可以使用下标[x(:), y(:), mi(:)]
,但在这种情况下似乎更难以使用。