我在这里发布代码为什么我在探索一种技术时遇到过。
Y = repmat((1:m)', [1 n]);
X = repmat(1:n, [m 1]) - labels_left;
X(X<1) = 1;
indices = sub2ind([m,n],Y,X);
final_labels = labels_left;
final_labels(abs(labels_left - labels_right(indices))>=1) = -1;
在上面的代码标签中,左边是单通道图像。[m n]是该图像的大小。我想知道这个sub2ind如何在上面的代码中工作。我也在最后一个包含
的语句中遇到问题 labels_right(indices)
上面的表达式评估的内容。这里的标签也是图像
答案 0 :(得分:1)
也许一个较小的例子可以帮助理解:
%# image matrix
M = rand(4,3)
[m n] = size(M)
%# meshgrid, and convert to linear indices
[X,Y] = meshgrid(1:n,1:m)
indices = sub2ind([m,n],Y,X)
%# extract those elements
M(indices)
矩阵M:
>> M
M =
0.95717 0.42176 0.65574
0.48538 0.91574 0.035712
0.80028 0.79221 0.84913
0.14189 0.95949 0.93399
所有点的(x,y)坐标网格:
>> X,Y
X =
1 2 3
1 2 3
1 2 3
1 2 3
Y =
1 1 1
2 2 2
3 3 3
4 4 4
转换为线性指数:
>> indices
indices =
1 5 9
2 6 10
3 7 11
4 8 12
然后我们使用这些索引索引矩阵。
>> M(indices)
ans =
0.95717 0.42176 0.65574
0.48538 0.91574 0.035712
0.80028 0.79221 0.84913
0.14189 0.95949 0.93399
请注意:M(indices(i,j)) = M(Y(i,j)),X(i,j))
。