Help with imwarp and affine2d
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
thiirane
el 29 de Dic. de 2014
Comentada: DaltonTech
el 12 de Abr. de 2020
Hello,
I have been trying to get imwarp to do a simple translation on an image but have been having some problems getting it to work. I have a reference image which I am using to rectify another image. I have the coordinate translations as x=-64 and y=-302. I have set up a coordinate transformation matix but the resulting image does not change.
figure(4);
xform=[1 0 0;0 1 0;64 302 1]; input_image='DSC08069.JPG';
f1=im2double(imread(input_image));
tform=affine2d(xform);
corr_RGBIM=imwarp(f1,tform);
imshow(corr_RGBIM);
title('RGB registered');
Any suggestions?
0 comentarios
Respuesta aceptada
David Young
el 29 de Dic. de 2014
The problem may be that imwarp() crops the output image to the transformed positions of the corners of the input image. A simple translation does not then have any effect. Try using imwarp_same(), attached, which applies the transformation and crops to the original positions of the corners.
2 comentarios
Más respuestas (3)
Image Analyst
el 29 de Dic. de 2014
Editada: Image Analyst
el 30 de Dic. de 2014
Use the displacement field input argument of imwarp().
Try this to shift the image in x:
fontSize = 20;
grayImage = imread('cameraman.tif');
[rows, columns, numberOfColorChannels] = size(grayImage);
subplot(1, 2, 1);
imshow(grayImage);
axis on;
title('Original Image', 'fontSize', fontSize);
[rows, columns, numberOfColorChannels] = size(grayImage)
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
deltaX = 50; % Shift x by 50 pixels.
D = zeros(rows, columns,2);
D(:,:,1) = -deltaX; % Shift x by 50 pixels.
warpedImage = imwarp(grayImage, D);
subplot(1, 2, 2);
imshow(warpedImage);
axis on;
title('Shifted Image', 'fontSize', fontSize);
Try this to shift the image in x and y using the values of -64 and -302 like you specified:
fontSize = 20;
grayImage = imread('concordorthophoto.png');
[rows, columns, numberOfColorChannels] = size(grayImage);
subplot(1, 2, 1);
imshow(grayImage);
axis on;
title('Original Image', 'fontSize', fontSize);
[rows, columns, numberOfColorChannels] = size(grayImage)
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
deltaX = 64; % Shift x by 64 pixels.
deltaY = 302; % Shift y by 302pixels.
D = zeros(rows, columns, 2);
D(:,:,1) = -deltaX; % Shift x by 64 pixels.
D(:,:,2) = -deltaY; % Shift x by 302 pixels.
warpedImage = imwarp(grayImage, D);
subplot(1, 2, 2);
imshow(warpedImage);
axis on;
title('Shifted Image', 'fontSize', fontSize);
3 comentarios
Image Analyst
el 11 de Abr. de 2020
They now have an imtranslate() function that's much easier to use than imwarp().
DaltonTech
el 12 de Abr. de 2020
imtranslate looks nice, but 'translation' needs to be a 2-element vector. I need to translate the image using a displacement matrix because in my real problem I need to displace each pixel a different amount. Perhaps I need to modify imwarp to update the world limits so that the outer bounds of the output image are input+displacement value.
k p
el 22 de Sept. de 2016
how to apply affine transform with euclidean distance to find shift between two image after finding matching point pair over image
0 comentarios
Anas Musah
el 11 de Mzo. de 2018
hello image analyst, I have tried ur code but it gives me this error
Not enough input arguments.
Error in imwarp (line 11)
cornerPoints = round(cornerPoints);
Error in untitled5 (line 41)
warpedImage = imwarp(grayImage, D);
pls any help
0 comentarios
Ver también
Categorías
Más información sobre Geometric Transformation and Image Registration en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!