Cylindrical to rectangular correction in image processing

2 vues (au cours des 30 derniers jours)
mustafa alnasser
mustafa alnasser le 31 Mar 2015
Dear All;
if have an image for cylindrical object ( say pipe). when take the image of the pipe it will project as rectangular image ,which may lead to projection error, how i can compensate for that.\
Best Regards;

Réponses (1)

Adam Wyatt
Adam Wyatt le 31 Mar 2015
Modifié(e) : Adam Wyatt le 31 Mar 2015
Create projected co-ordinates of original image
[Ny, Nx] = size(Img);
x = (1:Nx).';
y = (1:Ny).';
Create original co-ordinates of orignal image (you need to know the transfer function - you probably want to look up Mercator projection
[x1, y1] = MyCoordinateTransferFunction(x, y);
Create new co-ordinates on uniform grid
x2 = linspace(min(x1), max(x1), Nx).';
y2 = linspace(min(y1), max(y1), Ny).';
Interpolate image on new uniform grid
Img2 = interp2(x1.', y1, Img, x2.', y2, 'spline');
Note that I've defined the vectors as columns, so had to transpose the x-coordinates. Also, I've used spline interpolation - you could use linear or nearest if your want better speed but lower accuracy. Check the documentation.
  1 commentaire
mustafa alnasser
mustafa alnasser le 2 Avr 2015
Thank You Adam for kind support
I am trying to follow to your code but i am not familiar how to implement Mercator projection for image , the code is as follow: clc; clear;
%Create projected co-ordinates of original image
[Ny, Nx] = size('001.jpg'); x = (1:Nx).'; y = (1:Ny).'; %Create original co-ordinates of orignal image (you need to know the transfer function - you probably want to look up Mercator projection
[x1, y1] = mercator(x, y); %Create new co-ordinates on uniform grid
x2 = linspace(min(x1), max(x1), Nx).'; y2 = linspace(min(y1), max(y1), Ny).'; Interpolate image on new uniform grid Img2 = interp2(x1.', y1, Img, x2.', y2, 'spline');
but there is a problem in the number of parameters as shown below:
Error using applyProjection (line 15) Incorrect number of arguments.
Error in mercator (line 38) varargout = applyProjection(mproj, varargin{:});
Error in imagecorrec (line 11) [x1, y1] = mercator(x, y);

Connectez-vous pour commenter.

Catégories

En savoir plus sur Read, Write, and Modify Image dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by