像素的位置并将它们设置为“1”

时间:2013-02-21 17:42:49

标签: matlab pixel

matlab中,在满足特定条件后,我曾经返回像素本身并将其存储在向量pixels中,如下所示:

pixels(index) = y(i,j);

现在,我想返回这些像素的location。我应该这样做吗?

pixels(index) = i,j;

修改

如果我想将这些索引设置为值1,我会执行以下操作,对吧?

for i=1:m
for j=1:n
y(i,j)=1
end
end

感谢。

2 个答案:

答案 0 :(得分:2)

在Matlab的嵌套循环中非常效率低。

使用sub2ind可以帮助您更快地完成任务:

y( sub2ind( size(y), i, j ) ) = 1;

编辑 - sub2ind

sub2ind的作用是什么? 假设您有一个大小为M的矩阵[4 6]

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

您希望访问两个元素:第一行和第二列的元素,第四行和第五列的另一个元素。 在这种情况下,您拥有要访问的行r = [ 1 4 ]以及您希望访问的列c = [ 2 5 ]。但是,如果您尝试访问

>> M( r, c )

这是一个2x2矩阵

ans = 
5  17
8  20

而不是您要查找的两个元素(520)。

sub2ind做的是将您拥有的行/列索引转换为线性索引

>> sub2ind( size(M), r, c )
ans =
5 20

恰好是所请求条目的线性索引。

在将矩阵转换为一个接一个地堆叠其列的向量的情况下,您可以将线性索引视为访问矩阵中元素所需的单个索引。

一些评论:

  1. Matlab有indexing matrices的几种方式:按行/列索引(如问题中的ij)。通过线性指数(如问题中的index)。但是,更有效的方法是使用逻辑索引:也就是说,使用与y相同大小的矩阵和true用于您希望设置/获取的条目。
    因此,在您的示例中,如果您可以获得indexij的逻辑矩阵而不是,那就更好了。

  2. 与其他编程语言相比,Matlab有许多优点。其中之一是它能够非常有效地执行向量/矩阵运算。在Matlab中应该避免使用循环或更糟糕的嵌套循环。

  3. use i and j as variables in Matlab不是一个好习惯。

答案 1 :(得分:1)

如果要查找值y(i,j)的出现,只需评估

idx = (pixels == y(i,j));

根据您的变量,您可以执行

index(idx) = 1;