Вопрос

Ищу алгоритм решения следующей задачи:

У меня есть два набора векторов, и я хочу найти матрицу, которая лучше всего аппроксимирует преобразование входных векторов в выходные векторы.

векторы имеют размер 3x1, поэтому матрица равна 3x3.

Это общая проблема.Моя конкретная проблема заключается в том, что у меня есть набор цветов RGB и другой набор, содержащий нужный цвет.Я пытаюсь найти преобразование RGB в RGB, которое дало бы мне цвета, более близкие к желаемым.

Между входным и выходным векторами существует соответствие, поэтому вычисление функции ошибок, которую следует минимизировать, является простой задачей.Но как я могу минимизировать эту функцию?

Это было полезно?

Решение

Вы не указываете язык, но вот как я бы подошел к проблеме в Matlab.

  • v1 — это матрица 3xn, содержащая входные цвета в вертикальных векторах.
  • v2 также является матрицей 3xn, содержащей выходные цвета.

Вы хотите решить систему

M*v1 = v2
M = v2*inv(v1)

Однако v1 не является обратимой напрямую, поскольку это не квадратная матрица.Matlab решит эту проблему автоматически с помощью операции mrdivide (M = v2/v1), где M — наилучшее подходящее решение.

eg: 
>> v1 = rand(3,10);
>> M = rand(3,3);
>> v2 = M * v1;
>> v2/v1 - M

ans =

   1.0e-15 *

    0.4510    0.4441   -0.5551
    0.2220    0.1388   -0.3331
    0.4441    0.2220   -0.4441

>> (v2 + randn(size(v2))*0.1)/v1 - M
ans =

    0.0598   -0.1961    0.0931
   -0.1684    0.0509    0.1465
   -0.0931   -0.0009    0.0213

Этот дает более независимое от языка решение проблемы.

Другие советы

Это классическая задача линейной алгебры, ключевая фраза для поиска — «множественная линейная регрессия».

На протяжении многих лет мне приходилось кодировать некоторые варианты этого много раз.Например, код для калибровки планшета или стилуса с сенсорным экраном использует ту же самую математику.


Вот математика:

Позволять п быть входным вектором и д соответствующий выходной вектор.

Требуемое преобразование — это матрица 3х3;назови это А.

Для одного входного и выходного вектора п и д, существует вектор ошибки е

е = д - А Икс п

Квадрат величины ошибки является скалярной величиной:

еТ х е = (д - А Икс п)Т х (д - А Икс п)

(где оператор T транспонирован).

Что вы действительно хотите минимизировать, так это сумму е значения по наборам:

Э = сумма (е)

Этот минимум удовлетворяет матричному уравнению Д = 0 где

Д(i,j) = частная производная Э относительно А(я, дж)

Предположим, у вас есть N входных и выходных векторов.

Ваш набор входных 3-векторов представляет собой матрицу 3xN;назовите эту матрицу п.i-й столбец п — i-й входной вектор.

То же самое относится и к набору выходных 3-векторов;назовите эту матрицу вопрос.

Когда вы разберетесь со всей алгеброй, решение будет таким:

А = вопрос Икс пТ х (п Икс пТ) ^-1

(где ^-1 — обратный оператор — извините, что нет надстрочных или нижних индексов)


Вот алгоритм:

Создайте матрицу 3xN п из набора входных векторов.

Создайте матрицу 3xN вопрос из набора выходных векторов.

Матричное умножение р = п х транспонировать (п)

Вычислить обратное р

Матричное умножение А = вопрос х транспонировать(п) x обратный (р)

используя процедуры умножения матриц и обращения матриц из выбранной вами библиотеки линейной алгебры.


Однако, матрица аффинного преобразования 3x3 способна масштабировать и вращать входные векторы, но нет делаю любой перевод!Это может быть недостаточно общим для вашей проблемы.Обычно рекомендуется добавить «1» в конце каждого из 3-х векторов, чтобы получился 4-вектор, и искать лучшую матрицу преобразования 3x4, которая минимизирует ошибку.Это не повредит;это может привести только к лучшему согласованию данных.

Некоторой линейной алгебры должно быть достаточно:

Запишите среднеквадратическую разницу между входными и выходными значениями (сумму квадратов каждой разницы между каждым входным и выходным значением).Я предполагаю, что это определение «наилучшего приближения».

Это квадратичная функция ваших 9 неизвестных матричных коэффициентов.

Чтобы минимизировать его, выведите его относительно каждого из них.

Вы получите линейную систему из 9 уравнений, которые вам нужно решить, чтобы получить решение (уникальное или пространственное разнообразие в зависимости от входного набора).

Если разностная функция не является квадратичной, вы можете сделать то же самое, но вам придется использовать итерационный метод для решения системы уравнений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top