matlab图像畸变校正

matlab图像畸变校正,第1张

你自己看这一段

for i=1:h %从理想图像矩阵出发处理

for j=1:w

x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2]

u=x*a0+og(2) % 逆向映射(j,i)到畸变图像矩阵(v,u)

v=x*b0+og(1)

if (u>1)&&(u<w)&&(v>1)&&(v<h) %处理在图像大小范围内的像素点

uu=floor(u) %对u取整

vv=floor(v) %对v取整

arf=u-uu%计算上面提到的

bta=v-vv%计算上面提到的

for k=1:3 %进行灰度双线性插值

ft1=(1-bta)*b(vv,uu,k)+bta*b(vv+1,uu,k)

ft2=(1-bta)*b(vv,uu+1,k)+bta*b(vv+1,uu+1,k)

sp(i,j,k)=(1-arf)*ft1+arf*ft2

end

end

imshow(uint8(sp)) %显示校正图像

3个for加一个if,可只有2个end,程序都没写完当然出错。

——————————————————————————————————

然后还有这一段

for k=1:n%转换到以对称点为原点的空间关系并构造矩阵A

A(k)=[1,gm(k,1)-og(1),gm(k,2)-og(2),(gm(k,1)-og(1)^2), (gm(k,1)-og(1))*(gm(k,2)-og(2)),(gm(k,2)-og(2) ^2)]

end

A(k)是一个元素,可你却把它定义为一个数组,肯定也要出错。

————————————————————————————————

你要我改,我只能保证程序能运行,但对不对我无法保证。

function gmodify(pic,uv,gm,og) %pic表示要处理的图像的路径文件名

%uv是一个二维矩阵,uv(:,1)代表上面提到的,uv(:,2)表示

%gm是一个二维矩阵,gm(j,:)代表在校正图空间上与uv(j,:)一一应的点

%og 代表对称中心,它是一个二维向量

a=imread(pic)

b=double(a)

n=size(gm(:,1))

for k=1:n%转换到以对称点为原点的空间关系并构造矩阵A

A(k,:)=[1,gm(k,1)-og(1),gm(k,2)-og(2),(gm(k,1)-og(1)^2), (gm(k,1)-og(1))*(gm(k,2)-og(2)),(gm(k,2)-og(2) ^2)]

end

[h,w]=size(b(:,:,1))

sp=zeros(h,w,3)+255

a0=pinv(A)* uv(:,2) %计算上面提到的地址映射的系数估计a

b0=pinv(A)* uv(:,1) %计算上面中提到的地址映射的系数估计b

for i=1:h %从理想图像矩阵出发处理

for j=1:w

x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2]

u=x*a0+og(2) % 逆向映射(j,i)到畸变图像矩阵(v,u)

v=x*b0+og(1)

if (u>1)&&(u<w)&&(v>1)&&(v<h) %处理在图像大小范围内的像素点

uu=floor(u) %对u取整

vv=floor(v) %对v取整

arf=u-uu%计算上面提到的

bta=v-vv%计算上面提到的

for k=1:3 %进行灰度双线性插值

ft1=(1-bta)*b(vv,uu,k)+bta*b(vv+1,uu,k)

ft2=(1-bta)*b(vv,uu+1,k)+bta*b(vv+1,uu+1,k)

sp(i,j,k)=(1-arf)*ft1+arf*ft2

end

end

end

end

imshow(uint8(sp)) %显示校正图像

1、根据畸变图像特点标定坐标图,求取标定点像素的理想值和实际值,同时生成坐标映射表,再把坐标映射表用于畸变图像的校正程序后,即可得到无畸变图像。

2、标定坐标,镜头中心的畸变可以忽略为零,以镜头为中心,离镜头越远的地方畸变越大。以镜头为中心标定坐标图,对图像进行坐标的标定,按正方形均匀排列圆点。

3、先通过图像的、突出边缘细节;然后再用二值化处理增强调节对比度的图像,但部分样板点和背景的对比的差值较大,所以是设定一个阈值对整幅图像进行二值化,最后再对二值化后的图像再次进行中值滤波的方法处理,再次使用中值滤波方法可以有效的去除畸变图像中的部分椒盐噪声的影响。二值化的主要作用是可以提高畸变校正图像的质量,预处理图像可以为点阵样板圆点中心的确定提供重要的作用。

如果知道图像,不知道相机还怎么通过相机来标定畸变。

1:只给定一张图片可以根据图像中相关特征进行标定,简单讲就是利用: line is straight 这个原理。

2:目前最常用的方法,是通过二维标定板,通过对 reprojection error 最小化进行非线性优化,来实现对相机的标定。并非根据看似高大上的训练集来标定。

3:畸变参数只是标定法所求参数的一部分,即:两个径向畸变系数和两个切向畸变系数。消除畸变的目的是让相机尽量地逼近针孔相机模型,这样相机成像时直线才会保持其直线性。

4:一般常见的畸变校正算法都是根据这一原理来实现的。当然,还有二般的情况。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12135388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存