Я пытаюсь реализовать аффинное преобразование на двух изображениях. Сначала я нахожу совпадающие пары в обоих изображениях. Одним из них является увеличенным изображением, а другой представляет собой эталонное изображение. Пары возвращаются мне со-efficients как:Реализация аффинного преобразования
|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])));
Это уравнение я привык к ребристым сопредседателям efficients с использования пара соответствия. Уравнения работают отлично для одних и тех же изображений, для увеличения изображения это дает мне эти коэффициенты. Теперь проблема в том, что у меня есть 24-битное двоичное изображение, я хочу реализовать аффинное преобразование на этом изображении относительно ссылки. Теперь, когда я пытаюсь найти новые координаты этого изображения и изменить его текущее значение на эту координату, я получаю очень искаженное изображение. который не должен быть обратным, если преобразование является правильным. Может кто-нибудь, пожалуйста, взгляните на уравнения, а также немного объясните, как реализовать эти уравнения на втором изображении. Мой код находится на C++. Спасибо.
Мой эталонное изображение выше .. и мое сравнение изображение
В результате я получаю это искаженное изображение только с линиями.
Edit 1
Теперь я изменил метод Решая к матрицам. Теперь я получаю правильный вывод, но изображение, которое я получаю после регистрации, похоже на это. Также мне нужно применить ограничение от 0 до 320 * 240 в новых координатах, чтобы получить значение пикселя. Теперь мой результат примерно такой.
РЕДАКТИРОВАТЬ 2
Я изменил код и получаю этот результат без каких-либо черных пикселей. Я немного наклоняюсь. Однако удалили эффект увеличения в данном изображении.
Я пробовал сделать это 1, но это не решило проблему. Я немного улучшил ее. Редактирование вышеуказанного вопроса, пожалуйста, посмотрите. Спасибо – Hadi
Эти черные линии проистекают из дефектов трансформации. Когда ваши исходные точки изображения сопоставляются с выходным изображением, у них нет отношения 1 к 1, и вы можете справиться с этой проблемой путем обратной интерполяции. Я имею в виду, что на выходном изображении вы берете координаты пустых пикселей, применяете обратное преобразование и находите соответствующие изображения в исходном изображении, а затем просто назначаете этот пиксель на выходной пиксель –
Привет. Пожалуйста, ознакомьтесь с моим редактированием. Теперь я немного наклоняюсь .. Можете ли вы провести меня здесь .. Спасибо – Hadi