c++ - 在matlab中为矩阵制作订单

标签 c++ matlab image-processing matrix signal-processing

我正在对矩阵进行模拟(假设是 5x5 矩阵)。这个矩阵的一个元素是已知的(下面的后方 block ;这个位置不会总是在中心),我想从那个位置开始并螺旋地访问其他元素(我已经显示了数字的顺序)。如何在大矩阵(例如 1000x1000)中定义此顺序?因为我不能手动完成,所以我正在寻找一种更启发式的方法。

我在matlab中使用了bwdist,然后对得到的矩阵进行排序,但是结果不是我想要的。

有更好的解决方案吗?

enter image description here

最佳答案

当元素居中时,使用spiral命令:

>> spiral(5)

ans =

    21    22    23    24    25
    20     7     8     9    10
    19     6     1     2    11
    18     5     4     3    12
    17    16    15    14    13

对于起点的任意位置,我们需要手动做一些事情

让我们利用这个奇特的 spiral 函数。要获得答案矩阵A,请将起始点位于中心的较大矩阵M。请注意,AM 中元素的相对顺序是相同的。我们所需要做的就是从 M 中获取 A 作为子矩阵,并以相同的顺序用连续的元素数组填充它:

function A = spiral_generic(n, P)
% Makes NxN matrix filled up spirally starting with point P
  r = max([P - 1, n - P]);              % Radius of the bigger matrix
  M = spiral(2 * r + 1);                % Bigger matrix itself
  C = r + 1 - (P - 1);                  % Top-left corner of A in M
  A = M(C(1):C(1)+n-1, C(2):C(2)+n-1);  % Get the submatrix
  [~, order] = sort(A(:));              % Get elements' order
  A(order) = 1:n^2;                     % Fill with continous values
end

这是它的工作原理:

>> spiral_generic(5, [3 2])

ans =

    17    18    19    20    21
     7     8     9    10    22
     6     1     2    11    23
     5     4     3    12    24
    16    15    14    13    25

>> spiral_generic(6, [2 5])

ans =

    36    25    16     7     8     9
    35    24    15     6     1     2
    34    23    14     5     4     3
    33    22    13    12    11    10
    32    21    20    19    18    17
    31    30    29    28    27    26

这不是最快的解决方案,因为它需要排序,因此与直接 O(N^2) 实现相比需要 O(N^2 logN) 时间。但它非常短,并且对于大约 1000x1000 的矩阵工作速度足够快。

关于c++ - 在matlab中为矩阵制作订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20259818/

相关文章:

c++ - 将 vector 放置到 map 中

c++ - wxSocket wxWidgets 失败

c - MATLAB 上的 GMT 减法

ios - 如何以最佳方式缩放 CGImage?

python - 值错误: too many values to unpack (expected 3) using PIL

c++ - 使用模板时的编译错误

c++ - 将 initialOwner 设置为 TRUE 的 CreateMutex 使创建者进程保持互斥直到完成

python - 从 MATLAB 到 Python 中的 Pandas DataFrame 的 HDF5 数据集

java - MATLAB java.util 是否有非 HashMap /集?

python - 如何使用 OpenCV 和 Python 的蒙版(或透明度)在图像中查找模板?