在提取人脸的lbp特征时,看到mat2cell这个函数,在查阅了一些资料后在此记录一下。
1、什么是元胞数组
Cell Array也称为元胞数组,是matlab存储数据的一种特有的存储数据的类型。 使用形式就是:比如先定义了一个字符型的变量a,并赋值,然后定义一个长整型b,并赋值…最后用大括号来打包裹c={a,b}来形成元胞c,当然进一步可以将c再包裹进去如d={a,b,c,'abc',123}都是合法的。2、函数的功能
C = MAT2CELL(X,M,N) breaks up the 2-D array X into a cell array of
adjacent submatrices of X. X is an array of size [ROW COL], M is the
vector of row sizes (must sum to ROW) and N is the vector of column
sizes (must sum to COL). The elements of M and N determine the size of
each cell in C by satisfying the following formula for I = 1:LENGTH(M)
and J = 1:LENGTH(N),
-
该函数主要是将一个2维矩阵分解成几个相邻(adjacent)的子矩阵。比如: C = MAT2CELL(X,M,N),其中X就是待分解的矩阵,M是行数,N是列数,各子矩阵行数相加等于X的行数,列数也一样。
-
举例:
X = [1 2 3 4; 5 6 7 8; 9 10 11 12];
C = mat2cell(X,[1 2],[1 3])
其结果:
C =
2×2 cell 数组
{[ 1]} {1×3 double}
{2×1 double} {2×3 double}
3、LBP算法里的mat2cell
这就要说到该算法的原理了
将整个人脸划分为4*4的小区域(cell);(此处该函数起作用了),后面会对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较。