algorithm - 在 Octave 中重叠二维矩阵

标签 algorithm matlab octave

enter image description here 假设我有一个矩阵。这个矩阵是空白的,除了一些创建相同大小的矩形的点。创建矩形的每个点都有一个正数,该正数对于该矩形的所有点都相等。有可能这个矩阵有多个矩形,每个矩形的编号都相同。

想象一下,现在我有第二个具有相同结构的矩阵,但现在矩形位于其他位置,具有其他大小和其他值,就像图片中的矩阵 A 和 B 一样。

我想合并两个矩阵,所以如果某个矩形有交集,则删除具有最小数字的矩形。

哪种方法最好?我认为这样做是可行的,但我想做 30 次,所以如果我不改进它,Octave 将花费很多时间来完成它。

最佳答案

我编写了这个似乎可以完成这项工作的小代码:

A=[0 0 1 1 1 0 ;
   0 0 1 1 1 0 ;
   0 0 0 0 0 0 ;
   2 2 0 0 0 0 ;
   2 2 0 0 0 0 ;
   2 2 0 0 0 0 ];

B=[3 0 2 2 0 0 ;
   3 0 2 2 0 0 ;
   0 0 2 2 0 0 ;
   0 0 0 0 0 0 ;
   1 1 1 1 1 0 ;
   1 1 1 1 1 0 ];


%give a unique id to each rectangle
lblA=bwlabel(A);
lblB=bwlabel(B);

%search for overlap
overlap= A & B;

% find out overlaping rectangle s unique id
overlapLbl= unique([lblA(overlap(:)) lblB(overlap(:))],'rows');

%eliminate rectangle with lower score
for ov=1:size(overlapLbl,1)
  scoreA=A(find((lblA==overlapLbl(ov,1)),1));
  scoreB=B(find((lblB==overlapLbl(ov,2)),1));
  if scoreA>scoreB
    B(B==scoreB)=0;
  else
    A(A==scoreA)=0;
  end
end
C=A+B

输出:

C =
     3     0     2     2     0     0
     3     0     2     2     0     0
     0     0     2     2     0     0
     2     2     0     0     0     0
     2     2     0     0     0     0
     2     2     0     0     0     0

关于algorithm - 在 Octave 中重叠二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143338/

相关文章:

algorithm - splay 树中值的范围函数?

javascript - 在存储多种数据类型的项目时访问数组元素的恒定时间

python - OpenCV相机标定,无法控制畸变常数

matlab - 通过函数将字段添加到现有结构或变量,而无需重命名或破坏原始结构

matlab - Octave:加载特定目录中的所有文件

c++ - 上界/下界的比较函数

algorithm - 什么是快速排序的最佳输入数组

php - MATLAB 可执行文件太慢

file - 将文件名作为命令行参数传递给 GNU Octave 脚本

function - 来自另一个 m 文件的 Octave 调用函数