在Matlab

时间:2015-06-29 12:00:57

标签: matlab image-processing fisheye

我有以下图片:

enter image description here

我想从此图像中删除鱼眼镜头失真,因此我使用了以下代码:

[X,map] = imread('Foam_Image.jpg');  % Read the indexed image
options = [size(X,1) size(X,2) 1];   % An array containing the columns, rows and exponent
tf = maketform('custom',2,2,[],...   % Make the transformation structure
               @fisheye_inverse,options);
newImage = imtransform(X,tf); 
imshow(newImage);                    % show image

但是我收到以下错误:

Error using imtransform>parse_inputs (line 438)
XData and YData could not be automatically determined.  Try specifying XData and YData explicitly in the call to
IMTRANSFORM.

Error in imtransform (line 265)
args = parse_inputs(varargin{:});

我还使用了imwarp代替imtransform,但我仍然遇到错误。任何人都知道为什么我会收到此错误以及如何解决此问题?

1 个答案:

答案 0 :(得分:1)

如消息所示,您需要在使用Name-Property参数语法调用XData期间手动指定YDataimtransform属性。

根据docs,XData例如是:

  

一个双元素的实数向量,当与'YData'结合使用时,指定   输出图像B在2-D输出空间中的空间位置   X-Y。 'XData'的两个元素给出x坐标(水平)   分别为B的第一列和最后一列。

同样适用于YData。因此,您可以修改对imtransform的调用,如下所示:

newImage = imtransform(X,tf,'XData',[1 col],'YData',[1 row]);

其中colrow是您之前计算的尺寸函数的输出。

希望有所帮助!