像素转波数使用高斯消元法。定标像素点
代码如下:
/**
* 像素消元获取定标系数
*/
public static double[] calcCoefficientByGauss(double[] std_pixel) {
//标准乙腈的5个波数
double[] stdWaveNumber = {378, 918, 1374, 2252, 2942};
double[] coefficient = new double[std_pixel.length];
double d;
int n = std_pixel.length;//波峰数
// 生成n行n+1列二位零矩阵。构造满足唯一解形式的增广矩阵
double[][] a = new double[n][n + 1];
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
a[i][j] = Math.pow(std_pixel[i], j);
}
// 波数转波长
a[i][n] = waveNumberToWavelength(stdWaveNumber[i]);
}
//消元。判断每一行是否有主元,如果没有则交换行。形成回代阶梯矩阵(上三角阵)
for (k = 0; k < n; k++) {
// 选择主元素
int l = mainElement(a, k, n);
//交换l和k