matlab经常被用来处理图像,图像稍微大一点,经常会出现半天出不了结果的情况,对于一些新手来说,喜欢使用for循环对图像中每个像素进行处理,这是造成运行速度慢的主要原因之一,因此,总结几个可以避免使用for循环的函数:
(1)find函数,find函数返回矩阵元素所在的位置,位置是从第一列开始,从上到下,1,2,3,...,,然后是第二列,第三列
经常在图像中使用 如下: fseg(find(fsegmentgray<50& fsegmentgray>10))=1;利用一个矩阵对相同位置的另一个矩阵的元素作出判断或者赋值,可以避免使用循环;
(2)reshape函数,reshape函数重新调整举证的行数、列数、维数。
B = reshape(A,m,n)
返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个, 则会引发错误。
a=[1 2 3;4 5 6;7 8 9;10 11 12];
b=reshape(a,1,12);
b = 1 4 7 10 2 5 8 11 3 6 9 12;
b=reshape(a,1,12);
b = 1 4 7 10 2 5 8 11 3 6 9 12;
比如在图像处理中经常要将图像所有像素作为一列进行处理,直接使用newimage=reshape(image,m*n,1),m和n为原始图像的行列值。这样就可以不用循环一个个做了。
(3)sub2ind函数,ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。这里的下标就是行列值,第几行第几列,线性索引就是按列开始算第几个。