我有一个名为final_img
的图像矩阵。我有图像位置矩阵,行和列在下面给出
a =
1 1
1 2
2 1
2 2
3 1
3 2
1 1
2 2
此位置的值为
b =
1
2
3
4
5
6
7
8
在上面给出的位置,有些正在重复,例如:location [1 1]
。我可以使用以下代码
[uniquerow, ~, rowidx] = unique(a, 'rows');
noccurrences = accumarray(rowidx, 1);
我需要通过对图像位置值求和来更新唯一的图像位置。例如:地点[1 1]
重复twice
,b
中的相应值为1
和7
。所以
final_img(1,1)
应为1+7=8;
如何在不使用for循环的情况下在MATLAB中实现此算法?
答案 0 :(得分:4)
您可以使用sparse
功能,该功能会自动添加与相同坐标对应的所有值:
final_img = full(sparse(a(:,1), a(:,2), b));
根据输入,这将创建一个矩阵。
如果你想要一个尽可能小的输出,其强度为方:
M = max(a(:));
final_img = full(sparse(a(:,1), a(:,2), b, M, M));
如果您想指定输出的大小:
M = 3;
N = 3;
final_img = full(sparse(a(:,1), a(:,2), b, M, N));
答案 1 :(得分:2)
你非常亲密:
[final_coords, ~, rowidx] = unique(a, 'rows');
final_vals = accumarray(rowidx, b);
然后将其转换为图像形式:
% empty matrix with size of your image
final_img = zeros(max(final_coords,[],1));
% get linear indexes from coordinates
ind = sub2ind(size(final_img), final_coords(:,1), final_coords(:,2));
% fill image
final_img(ind) = final_vals;