Help with imwarp and affine2d
    7 次查看(过去 30 天)
  
       显示 更早的评论
    
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 个评论
采纳的回答
  David Young
      
 2014-12-29
        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.
更多回答(3 个)
  Image Analyst
      
      
 2014-12-29
        
      编辑:Image Analyst
      
      
 2014-12-30
  
      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 个评论
  Image Analyst
      
      
 2020-4-11
				They now have an imtranslate() function that's much easier to use than imwarp().
  DaltonTech
 2020-4-12
				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
 2016-9-22
        how to apply affine transform with euclidean distance to find shift between two image after finding matching point pair over image
0 个评论
  Anas Musah
 2018-3-11
        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 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Computer Vision with Simulink 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






