如何通过在MATLAB中识别唯一位置来更新图像值?

时间:2018-04-24 03:28:27

标签: matlab

我有一个名为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]重复twiceb中的相应值为17。所以

final_img(1,1)应为1+7=8;

如何在不使用for循环的情况下在MATLAB中实现此算法?

2 个答案:

答案 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;