先说一下代码的大概内容,利用镜头畸变矫正的公式

实现对图像的变形,其中有两个畸变系数k1,k2, x,y为原图的的像素点的坐标,x^,y^为变形后的图像的像素点的坐标,r^2=x^2+y^2,
代码如下:
K = [0.000002, 0.000003]';
figure(2)
I = imread('peppers.png');
[h,w,c]=size(I);
u0 = round([w/2, h/2]);
%估算变形后的画布尺寸
u1 = floor(fd(u0, K));
It = zeros([2*u1(2)+1, 2*u1(1)+1, c], 'uint8');
%变形
for y = 1 : h
for x = 1 : w
p = [x, y];
p = p - u0;
pt = round(fd(p, K));
pt = pt + u1;
It(pt(2), pt(1), :) = I(y, x, :);
end
end
subplot(1,2,1)
imshow(I),title('变形前');
subplot(1,2,2)
imshow(It),title('变形后');
imwrite(It,'dst_img.png')
function pt = fd(p, K)
rq=sum(p.^2);
A = [rq; rq.^2];
%变形,a.*b表示矩阵a中的元素与矩阵b中的元素按位置依次相乘1
pt = (p .* (1 + (A' * K))');
end
现在的错误是:
错误使用 zeros
超出了程序允许的最大变量值。
出错 test_Z (line 42)
It = zeros([2*u1(2)+1, 2*u1(1)+1, c], 'uint8');
本人是个matlab新手,利用python实现也遇到了类似的错误,肯定大佬帮忙解决一下