Реализация аффинного преобразования

Я пытаюсь реализовать аффинное преобразование на двух изображениях.
Сначала я нахожу совпадающие пары на обоих изображениях. Один из них — увеличенное изображение, а другой — эталонное изображение. Пары вернули мне коэффициенты как:

     |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

Я изменил код и получаю этот результат без черных пикселей. Я получаю небольшой наклон … убрал эффект увеличения на данном изображении. введите описание изображения здесь

0

Решение

Ваша матрица преобразования А проблематична. Уничтожает значение координаты y и назначает 221 для всех координат y

Вы можете сделать элемент в (2,2) в A всего 1, и проблема должна быть решена.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]