摄像头图像桶形畸变校正测试
来源:互联网 发布:周易古代注本知乎 编辑:程序博客网 时间:2024/06/05 15:02
from: http://blog.csdn.net/hyanglu1573/article/details/12876727
1 桶形畸变原理
如果摄像头使用短焦距广角镜头,那么得到的图像会发生桶形畸变,如下图所示。
图 1 摄像头畸变图像
产生桶形畸变的原因是:镜头的放大倍数随着距离增大而逐渐减小,造成图像像素点放射形地围绕中心点的。原理图如下所示。
图 2 桶形畸变原理
桶形畸变的数学模型是:
(1)
其中,是非畸变图像中某像素点到图像中心的距离,是畸变后该像素点到图像中心的距离,是畸变因子,与具体的镜头相关。
2 使用Matlab进行校正
根据图 2公式(1),我们可以使用Matlab进行畸变校正,算法比较简单,不详细解释原理了,Matlab代码如下所示。
% Barrel Distortion correction
clear;
clc;
img_origin = imread('5642_vga.jpg');
% Change this two parameters to improve image quality
k1 = -0.0000026;
k2 = -0.0000026;
img_size = size( img_origin );
img_undist = zeros( img_size );
img_undist = uint8( img_undist );
for l0 = 1:img_size(3)
for l1 = 1:img_size(1)
y = l1 - img_size(1)/2;
for l2 = 1:img_size(2)
x = l2 - img_size(2)/2;
x1 = round( x * ( 1 + k1 * x * x + k2 * y * y ) );
y1 = round( y * ( 1 + k1 * x * x + k2 * y * y ) );
y1 = y1 + img_size(1)/2;
x1 = x1 + img_size(2)/2;
% if x1 or y1 exceeds boundary, force them to 0(black)
if x1 < 1 || x1 > img_size(2) || y1 < 1 || y1 > img_size(1)
img_undist(l1,l2,l0) = 0;
else
img_undist(l1,l2,l0) = img_origin(y1, x1,l0);
end
end
end
end
figure(1);
% compare the two images in one figure
subplot(121);
imshow(img_origin);
subplot(122);
imshow(img_undist);
% save the original image to 1.jpg
imwrite(img_origin,'1.jpg');
% save the changed image to 2.jpg
imwrite(img_undist,'2.jpg');
代码中的k1和k2是分别用来调整x轴畸变和y轴畸变的参数,调整两个参数就可以调整图像的畸变率。
设置k1=k2=0.000003时,校正图像如下:
图 3 k1=k2=0.000003
从图中可以看出,原图像中间部分的弯曲已经被纠正了,但是四个角落里却出现了较大的形变,图像反畸变效果不理想。
改变参数,设置k1=k2=0.000001,校正后的图像效果如下:
图 4 k1=k2=0.000001
从图中可以看出,整幅图像的变形很小,画面效果还可以,但是却没有完全将桶形畸变的完全线校正为直线。
继续改变参数,经过多次尝试,最终选择出一个较为理想的参数为k1=k2=0.000002,显示效果如下图所示。
可以看出,在为了保证图像质量的前提下,设置的参数并没有完全将桶形畸变造成的物体弯曲进行纠正。
图 5 k1=k2=0.000002
- 摄像头图像桶形畸变校正测试
- 摄像头图像桶形畸变校正测试
- 图像畸变校正OPENCV
- 图像畸变校正
- 图像畸变校正OPENCV
- [图像]畸变校正详解
- [图像]畸变校正详解
- OpenCV--摄像机图像畸变校正
- DR图像的畸变校正
- DR图像的畸变校正
- 镜头桶形失真校正算法 镜头径向畸变校正
- 摄像头图像失真校正
- 摄像机标定和图像径向畸变校正
- 摄像机标定和图像径向畸变校正
- 书籍扫描图像几何畸变校正
- 【opencv】鱼眼图像畸变校正
- 鱼眼图像畸变校正_V
- 基于opencv的图像梯形畸变(透视)校正
- B2C数据流向
- c++如何设置托盘图标并闪烁
- 如何为Apache JMeter开发插件(四)——几种类型的Sampler
- innerHTML,innerText,outerHTML用法及区别
- IOS TableView的Cell高度自适应,UILabel自动换行适应(转载)
- 摄像头图像桶形畸变校正测试
- AAC帧格式及编码介绍
- Matrix4x4类
- Xilinx hw_server Program FPGA failed
- Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程
- java例题学习:面向对象之长方形例题学习
- 《GPU高性能编程CUDA实战》学习笔记(一)
- 在背景为灰色的PGM图片中,提取地图。
- Spring MVC 项目中配置log4j 出现错误log4j:ERROR Failed to excute sql com.mysql.jdbc.exceptions.jdbc4.MySQLSynt