前言
图像处理当中涉及了各种各样的数学。而其中在之前,我做的Exercise4当中,就运用了大量的线性代数的知识,于是,在这里我就简单的封装一下矩阵运算的操作。
矩阵运算
矩阵运算的规则比较简单,大概就是这样
当然这里说的比较简单,更具体的可以参考维基百科
开始封装
首先一个矩阵也就是一个行列式,可以看作是若干个行组成的。因此,可以将一个Matrix
里面包含若干的Vector
的形式去组成一个矩阵
在这里我的所有的封装都是在namespace ImageUtil
之下的
Vector
行自然要用数组来存啦,因此,我们可以利用泛型来进行一个比较灵活的封装
1 | template<typename T,int Col = 3> |
Matrix
封装完Vector自然就是将他们组成矩阵了。用同样的方法就可以了。
1 | template<typename T,int Col,int Row> |
operator*
最后,就是矩阵的关键操作,矩阵相乘了。由于矩阵相乘左边的列数应该等于右边的行数,因此,我们也要进行约束,当然,用泛型来约束就可以了。
1 | template<int _Row> |
typedef
最后,将几个常用的类型提取出来方便使用就完事
1 |
|
于是乎,一个简单的封装就完成了。