Я пытаюсь реализовать аффинное преобразование на двух изображениях.
Сначала я нахожу совпадающие пары на обоих изображениях. Один из них — увеличенное изображение, а другой — эталонное изображение. Пары вернули мне коэффициенты как:
|1 0 | | x | | 1 |
A = | | X = | | B = | |
|0 0 | | y | | 221 |
The equation formed is X' = AX + B;
x_co_efficients[2] = (((x_new_Cordinate[2]-x_new_Cordinate[0])*(xCordinate[1]- xCordinate[0])) - ((x_new_Cordinate[1]-x_new_Cordinate[0])*(xCordinate[2] - xCordinate[0])))/
(((xCordinate[1]-xCordinate[0])*(yCordinate[2]-yCordinate[0])) - ((xCordinate[2]-xCordinate[0])*(yCordinate[1]-yCordinate[0])));
x_co_efficients[1] = ((x_new_Cordinate[1]-x_new_Cordinate[0]) - (yCordinate[1]-yCordinate[0])*(x_co_efficients[2]))/(xCordinate[1]-xCordinate[0]);
x_co_efficients[0] = x_new_Cordinate[0] - (((x_co_efficients[1])*(xCordinate[0])) + ((x_co_efficients[2])*(yCordinate[0])));y_co_efficients[2] = (((y_new_Cordinate[2]-y_new_Cordinate[0])*(xCordinate[1]- xCordinate[0])) - ((y_new_Cordinate[1]-y_new_Cordinate[0])*(xCordinate[2] - xCordinate[0])))/
(((xCordinate[1]-xCordinate[0])*(yCordinate[2]-yCordinate[0])) - ((xCordinate[2]-xCordinate[0])*(yCordinate[1]-yCordinate[0])));
y_co_efficients[1] = ((y_new_Cordinate[1]-y_new_Cordinate[0]) - (yCordinate[1]-yCordinate[0])*(y_co_efficients[2]))/(xCordinate[1]-xCordinate[0]);
y_co_efficients[0] = y_new_Cordinate[0] - (((y_co_efficients[1])*(xCordinate[0])) + ((y_co_efficients[2])*(yCordinate[0])));
Это уравнения, которые я использую для определения коэффициентов при использовании совпадающих пар. Уравнения работают хорошо для тех же изображений, для увеличения изображения это дает мне эти коэффициенты. Теперь проблема в том, что у меня есть 24-битное двоичное изображение, я хочу реализовать аффинное преобразование этого изображения в отношении ссылки. Теперь, когда я пытаюсь найти новые координаты этого изображения и изменить его текущее значение на эту координату, я получаю очень искаженное изображение. что не должно быть иначе, если преобразование верно.
Может ли кто-нибудь взглянуть на уравнения, а также немного объяснить, как реализовать эти уравнения на втором изображении.
Мой код на C ++. Спасибо.
Мое контрольное изображение выше .. и мое изображение сравнения
В результате я получаю искаженное изображение только с линиями.
Редактировать 1
Теперь я изменил метод решения на матрицы. Теперь я получаю правильный вывод, но изображение, которое я получаю после регистрации, выглядит следующим образом ..
Также я должен применить ограничение от 0 до 320 * 240 в новых координатах, чтобы получить значение пикселя. Теперь мой результат примерно такой.
РЕДАКТИРОВАТЬ 2
Я изменил код и получаю этот результат без черных пикселей. Я получаю небольшой наклон … убрал эффект увеличения на данном изображении.
Ваша матрица преобразования А проблематична. Уничтожает значение координаты y и назначает 221 для всех координат y
Вы можете сделать элемент в (2,2) в A всего 1, и проблема должна быть решена.
Других решений пока нет …