通过从每列的可能不同的行中删除条目来删除矩阵中的行

时间:2013-10-13 20:56:23

标签: matlab image-processing matrix

我有一个值向量,表示要在某个矩阵M(图像)中删除的行的索引。此向量中每列只有一个行值(即如果图像为128 x 500,则我的向量包含500个值)。

我对MATLAB很陌生,所以我不确定是否有更有效的方法从矩阵中删除单个像素(行,col值),所以我来这里问一下。

我正在考虑制作一个少一行的新矩阵,循环遍历每一列,直到找到我希望删除其值的行,并将列“向上移动”,然后移到下一列到做同样的事。

有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:4)

是的,有一个避免循环的解决方案,因此编写和执行速度更快。它利用了linear indexing,并利用了这样一个事实,即您可以通过为矩阵条目指定一个空值([])来删除它:

% Example data matrix:
M = [1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20];
% Example vector of rows to be removed for each column:
vector = [2 3 4 1 3];

[r c] = size(M);
ind = sub2ind([r c],vector,1:c);
M(ind) = [];
M = reshape(M,r-1,c);

这给出了结果:

>> M =
     1     5     9    14    17
     3     6    10    15    18
     4     8    11    16    20