先說一下代碼的大概內容,利用鏡頭畸變矯正的公式

實作對影像的變形,其中有兩個畸變系數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實作也遇到了類似的錯誤,肯定大佬幫忙解決一下
uj5u.com熱心網友回復:
或者換個角度,應該如何初始化畫布,問題就是出在u1 = floor(fd(u0, K));這塊轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270315.html
標籤:圖形處理/算法
上一篇:LogView-開源的Windows系統本地除錯日志捕獲工具
下一篇:要寫一個讀串口的程式
