Добрый вечер!
Имеется два графика, у которых различаются шкалы по оси абсцисс и ординат. Один из них - модельный спектр с известными, правильными длинами волн (
,
); другой - экспериментальный спектр, снятый с установки, и по оси абсцисс там - номер пикселя на камере (
,
). Задача: подобрать такие коэффициенты полинома
, чтобы спектры как можно лучше "сходились" (см. ниже). Приблизительно известны начальные значения
и
, а
на первых порах можно и вовсе считать нулём, поскольку он отвечает за аберрации спектрографа и является очень маленьким (
) по сравнению с остальными.
Проблема 1: оба спектра известны в дискретных, в общем случае никогда не совпадающих точках (для модельного спектра это чисто техническая проблема, связанная с тем, что смена сетки выполняется гораздо дольше, чем расчёт спектра). Решение: заранее возьмём модельный спектр с запасом по диапазону длин волн и числу точек, чтобы экспериментальный скорее всего оказался между его границами. Рассчитаем длины волн для экспериментального спектра, исходя из приблизительно известных начальных значений. Объединим обе шкалы и линейно интерполируем оба спектра в точках, в которых значение не известно. Имея общую шкалу, попробуем максимизировать коэффициент корреляции
по
.
Проблема 2: у этой задачи есть несколько очень узких локальных оптимумов, а глобальный оптимум с правильным ответом почти невозможно найти: (картинки больше
пикселей)
"В лоб" это всё решается с трудом: известные мне
алгоритмы оптимизации застревают в локальных минимумах и/или норовят сбежать в область, где спектры почти не перекрываются. Табулировать коэффициент корреляции на достаточно мелкой сетке, чтобы потом брать максимум и назначать очень жёсткие ограничения для оптимизатора, долго и ненадёжно.
При склеивании панорам из фотографий сначала находят "особенности", а потом соотносят их друг с другом, но в моих одномерных графиках всего 1 канал и одно измерение, а не двумерная матрица RGB. Плюс, все пики похожи друг на друга.
Как ещё можно найти коэффициенты
?