matlab关于错误使用zeros,超出了程序允许的最大变量值的问题

Aggresive_n 2021-03-31 03:38:55
先说一下代码的大概内容,利用镜头畸变矫正的公式
实现对图像的变形,其中有两个畸变系数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实现也遇到了类似的错误,肯定大佬帮忙解决一下
...全文
5749 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aggresive_n 2021-03-31
  • 打赏
  • 举报
回复
或者换个角度,应该如何初始化画布,问题就是出在u1 = floor(fd(u0, K));这块

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧