Cylindrical to rectangular correction in image processing

2 views (last 30 days)
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;

Answers (1)

Adam Wyatt
Adam Wyatt on 31 Mar 2015
Edited: Adam Wyatt on 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 Comment
mustafa alnasser
mustafa alnasser on 2 Apr 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);

Sign in to comment.

Categories

Find more on Read, Write, and Modify Image in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!