如何在MATLAB中通过识别唯一位置更新图像矩阵值?
解决重复位置数值求和并更新图像矩阵的问题
没问题,我来帮你搞定这个需求!你已经完成了唯一位置的识别,接下来只需要两步就能实现重复位置数值求和并更新图像矩阵:
步骤1:计算每个唯一位置的数值总和
利用accumarray函数,结合你已经得到的rowidx(原始位置对应的唯一行索引),对b中的数值进行分组求和:
sum_vals = accumarray(rowidx, b);
比如你提供的例子里,[1 1]位置对应b的1和7,求和后得到8;[2 2]对应4和8,求和后得到12,其他无重复的位置则保留原数值。
步骤2:将求和结果赋值到图像矩阵的对应位置
uniquerow的每一行存储的是[行号, 列号],直接用矩阵索引就能把求和后的值写入final_img:
final_img(uniquerow(:,1), uniquerow(:,2)) = sum_vals;
如果你的final_img是三维图像(比如RGB格式),只需要补充维度索引即可,比如final_img(uniquerow(:,1), uniquerow(:,2), :) = sum_vals;(注意要保证sum_vals的维度和图像维度匹配)。
完整示例代码
结合你的输入数据,完整可运行的代码如下:
% 你的原始数据 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]; final_img = zeros(3,2); % 假设初始是3行2列的零矩阵 % 你已完成的唯一位置识别 [uniquerow, ~, rowidx] = unique(a, 'rows'); noccurrences = accumarray(rowidx, 1); % 新增的求和与赋值步骤 sum_vals = accumarray(rowidx, b); final_img(uniquerow(:,1), uniquerow(:,2)) = sum_vals;
运行后final_img的结果为:
8 2 3 12 5 6
完全满足重复位置数值求和的需求。
内容的提问来源于stack exchange,提问作者manoos
相关产品推荐
相关产品推荐

