2013-03-22 4 views
0

Я пытаюсь реализовать аффинное преобразование на двух изображениях. Сначала я нахожу совпадающие пары в обоих изображениях. Одним из них является увеличенным изображением, а другой представляет собой эталонное изображение. Пары возвращаются мне со-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++. Спасибо. This is my reference image

Мой эталонное изображение выше .. и мое сравнение изображение enter image description here

В результате я получаю это искаженное изображение только с линиями. enter image description here

Edit 1

Теперь я изменил метод Решая к матрицам. Теперь я получаю правильный вывод, но изображение, которое я получаю после регистрации, похоже на это. Также мне нужно применить ограничение от 0 до 320 * 240 в новых координатах, чтобы получить значение пикселя. Теперь мой результат примерно такой. enter image description here

РЕДАКТИРОВАТЬ 2

Я изменил код и получаю этот результат без каких-либо черных пикселей. Я немного наклоняюсь. Однако удалили эффект увеличения в данном изображении. enter image description here

ответ

0

Ваша матрица преобразования A является проблематичной. Он разрушает значение координаты y и присваивает 221 всем координатам y.

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

+0

Я пробовал сделать это 1, но это не решило проблему. Я немного улучшил ее. Редактирование вышеуказанного вопроса, пожалуйста, посмотрите. Спасибо – Hadi

+1

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

+0

Привет. Пожалуйста, ознакомьтесь с моим редактированием. Теперь я немного наклоняюсь .. Можете ли вы провести меня здесь .. Спасибо – Hadi