一个函数需要完成特征值的计算功能,特征值有多个。
现在假设这个函数需要计算四个特征值,在计算特征值之前需要一些基本的预处理运算。






预处理运算就是公共计算部分calculateBase()
四个子函数分别计算四个特征值。
现在需求是,需要计算的特征值不确定,可能需要计算单个A,可能需要计算单个B,C,D,也可能是计算这四个特征的任意组合。怎么设计程序呢?
最简单的办法是直接把所有的特征全都计算,使用的时候要用哪个就提取哪个,但这种方法重复计算量太大。比如,我只需要计算特征A,而为了计算这一个特征,浪费了计算B,C,D三个特征的时间,显然无法忍受。
所以必须寻求更有效的方式。

























这种方式通过matlab的可变参数实现。
若输入:fun('a','b')则计算特征A与B
若输入:fun('a','b','c')则计算特征A、B与C
可以实现特征的任意组合。
并且计算不同的特征,可以共同使用预处理运算部分。
如果特征数量较少,那么这种方式还是挺灵活且有效的。需要哪个特征,在参数表里加入这个特征的名称,就可以了。
但是,如果需要计算的特征数量过大了,这种方式就不好了。现在灰度-梯度共生矩阵的特征数量是15个,灰度共生矩阵的特征是11个,都采用这种方式的话,记住每个特征的名称,是一件几乎不可能的事件。而且,需要计算的这个特征列表是随时变化的。也就是说,调用计算特征值的函数时,其参数列表是动态变化,在程序执行过程中是动态构建的。似乎还有些困难性。
现在考虑的方式是,建立一个标志数组,类型为logic。数组的每一个元素对应一个特征值。数组元素对应的值为true表示计算该特征值,为false表示不计算。
比如(假设四个特征):(位置号与特征编号一一对应)
1101 表示计算第1,2,4个特征
0010 表示计算第3个特征
仍然可以实现特征的任意组合。
并且,这种方式非常适合程序的动态构建。
需要计算哪几个特征,将其赋值为true,然后将数组传入计算函数就可以了。
但也有一个非常明显的缺点,就是可读性不好。