Применение обратного преобразования к преобразованному изображению не дает оригинала - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть Проективное преобразование t:

t = [0.646     0.110    9.339e-05;
     0.0113    0.551    -1.004e-05;
     307.649   1131.141         1]

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

tProj = projective2d(t);
img1 = imwarp(original,tProj);
figure(1); imshow(img1);

tProj2 = projective2d(inv(t));
img2 = imwarp(img1,tProj2);
figure(2); imshow(img2);

Исходное изображение

Original Image

Преобразование исходного изображения

Original Image

Обратное преобразование преобразования исходного изображения

Original Image

1 Ответ

0 голосов
/ 08 февраля 2019

Ты очень близко.Вы также должны ссылаться на объект пространственного местоположения (через объект imref2d), чтобы помочь захватить полные пространственные местоположения выходного изображения.Вы указываете это как дополнительный вход в imwarp при инвертировании изображения.Кроме того, вы должны также захватить объект imref2d вывода из первого вызова imwarp.Когда у вас есть эти объекты, вы можете использовать их для деформации обратного изображения, чтобы вернуть исходное изображение.Имейте в виду, что у вас будет некоторое заполнение нулями из-за искаженного изображения, выходящего за пределы размеров исходного изображения.

Другими словами:

t = [0.646     0.110    9.339e-05;
0.0113    0.551    -1.004e-05;
307.649   1131.141         1];

original = imread('https://i.stack.imgur.com/lZzdT.jpg');

tProj = projective2d(t);
[img1, ra] = imwarp(original, tProj); % New
figure(1); imshow(img1);

tProj2 = projective2d(inv(t));
img2 = imwarp(img1,ra,tProj2); % New
figure(2); imshow(img2);

Это выходное изображение, которое я получаюпосле инвертирования деформированного изображения:

enter image description here

...