zynq FPGA 的双目视觉毕业设计(五)之matlab 极线矫正算法实现
1.简述
我是参考这篇博主 相机去畸变,以及双目平行校正----极线校正(二)————之双目平行校正详细过程
matlab的源码下面给出,很简单的算法结构,不做详细解说。
2.我的matlab双目极线矫正源码
clear;clc;close all;image_left = imread('./IMAG_L1.BMP');
image_right= imread('./IMAG_R1.BMP');[H, W, C] = size(image_left);%内参
A_L = [ 429.99849 0.0 376.35001;0.0 427.66238 235.38535;0.0 0.0 1.0];A_R = [ 422.52402 0.0 387.14095;0.0 421.20306 210.78373;0.0 0.0 1.0];fx1 = A_L(1,1);
fy1 = A_L(2,2);
cx1 = A_L(1,3);
cy1 = A_L(2,3);fx2 = A_R(1,1);
fy2 = A_R(2,2);
cx2 = A_R(1,3);
cy2 = A_R(2,3);fx = (fx1 + fx2)/2;
fy = (fy1 + fy2)/2;
cx = (cx1 + cx2)/2;
cy = (cy1 + cy2)/2;AA = [fx 0 cx;0 fy cy;0 0 1];
%外参D_L = [ -0.02811 0.01014 -0.00971 -0.00288 0.00000 ];
D_R = [ -0.01148 -0.00157 -0.01033 0.00455 0.00000 ];k11 = D_L(1,1);
k12 = D_L(1,2);
k13 = D_L(1,5);
p11 = D_L(1,3);
p12 = D_L(1,4);k21 = D_R(1,1);
k22 = D_R(1,2);
k23 = D_R(1,5);
p21 = D_R(1,3);
p22 = D_R(1,4);%旋转与平移om = [ 0.00214 -0.03862 -0.00286] ;R_l = rodrigues(-om/2);
R_r = R_l';for v = 11 : H-10for u = 26 : W-2u1 = (u - cx)/fx;v1 = (v - cy)/fy;pos1 = inv(R_l)*[u1 v1 1]';pos2 = inv(R_r)*[u1 v1 1]';x1 = pos1(1,:)/pos1(3,:);y1 = pos1(2,:)/pos1(3,:);r1 = x1^2 + y1^2;x2 = pos2(1,:)/pos2(3,:);y2 = pos2(2,:)/pos2(3,:);r2 = x2^2 + y2^2;xx1 = x1*(1 + k11*r1 + k12*r1^2 + k13*r1^3) + 2*p11*x1*y1 + p12*(r1 + 2*x1^2) ;yy1 = y1*(1 + k11*r1 + k12*r1^2 + k13*r1^3) + 2*p12*x1*y1 + p11*(r1 + 2*y1^2) ;xx2 = x2*(1 + k21*r2 + k22*r2^2 +k23*r2^3) + 2*p21*x2*y2 + p22*(r2 + 2*x2^2) ;yy2 = y2*(1 + k21*r2 + k22*r2^2 +k23*r2^3) + 2*p22*x2*y2 + p21*(r2 + 2*y2^2) ;xxx1 = xx1*fx1 + cx1;yyy1 = yy1*fy1 + cy1;xxx2 = xx2*fx2 + cx2;yyy2 = yy2*fy2 + cy2;if( xxx1 > 1 && yyy1 >1 && xxx1 <= 752 && yyy1 <=480)w1 = xxx1;h1 = yyy1;new_image_L(v-10,u-25)= (floor(w1+1)-w1) * (floor(h1+1)-h1) * image_left(floor(h1),floor(w1)) + (floor(w1+1)-w1) * (h1-floor(h1)) * image_left(floor(h1+1),floor(w1)) + (w1-floor(w1)) * (floor(h1+1)-h1) * image_left(floor(h1),floor(w1+1) ) + (w1-floor(w1)) * (h1-floor(h1)) * image_left(floor(h1+1),floor(w1+1));endif(xxx2 > 1 && yyy2 >1 && xxx2 <= 752 && yyy2 <=480)w2 = xxx2;h2 = yyy2;new_image_R(v-10,u-25)= (floor(w2+1)-w2) * (floor(h2+1)-h2) * image_right(floor(h2),floor(w2)) + (floor(w2+1)-w2) * (h2-floor(h2)) * image_right(floor(h2+1),floor(w2)) + (w2-floor(w2)) * (floor(h2+1)-h2) * image_right(floor(h2),floor(w2+1) ) + (w2-floor(w2)) * (h2-floor(h2)) * image_right(floor(h2+1),floor(w2+1));endend
end
size(new_image_L)
size(new_image_R)ori_image = [image_left,image_right];
cor_image = [new_image_L,new_image_R];
[e, f, g] = size(ori_image);subplot(2,1,1);imshow(ori_image);
title('校正之前');M = 10; % 水平分量
N = 10; % 垂直分量
lw = 0.001; % 划线宽度
mx= ones(1,M+1);
my = linspace(1,e,M+1);
% 画水平线
for k = 1:M+1line([mx(k) f*mx(k)],[my(k) my(k)],'color','g','LineWidth',lw);
end
nx = linspace(1,f,N+1);
ny = ones(1,N+1);
% 画垂直线
for k = 1:N+1line([nx(k) nx(k)],[ny(k) e*ny(k)],'color','g','LineWidth',lw);
endsubplot(2,1,2);imshow(cor_image);
title('校正之后');M = 10; % 水平分量
N = 10; % 垂直分量
lw = 0.001; % 划线宽度
mx= ones(1,M+1);
my = linspace(1,e,M+1);
% 画水平线
for k = 1:M+1line([mx(k) f*mx(k)],[my(k) my(k)],'color','g','LineWidth',lw);
end
nx = linspace(1,f,N+1);
ny = ones(1,N+1);
% 画垂直线
for k = 1:N+1line([nx(k) nx(k)],[ny(k) e*ny(k)],'color','g','LineWidth',lw);
end
3.矫正效果图
能看出还是有误差.
4.疑惑与说明
1)om是matlab标定得到的旋转矢量矩阵,需要用 rodrigues 函数转换为旋转角度(弧度).
2)这个拆分旋转矩阵的方法我是参考matlab工具箱里面的,不知道准确性。查阅很多论文和博客,以及请教群友也没给出很好答案。这个呢我算是硬凑上去的。如有知道的朋友,麻烦留言或者私聊一下,感激不敬!!!
3)说明一下,在做畸变矫正和极线矫正时,发现我的摄像头镜头不太好,大光圈那种,录下的图片很模糊,影响精度,所以这儿换了无畸变的镜头,很清晰了。所以和前面博客图片有些出入,但不影响。使用无畸变镜头并不意味着真没畸变,只是畸变很小,所以我还是进行畸变矫正。
4)下一步呢,有可能继续用matlab做双目匹配,也有可能将现有的成果进行FPGA移植。目前呢我用zynq搭建差不多,就是卡在图像插值哪儿缓存。所以接下来的工作方向不太确定。
欢迎关注我的公众号:芯王国,有更多的FPGA&数字IC的技术分享,还可以获取开源FPGA项目!
zynq FPGA 的双目视觉毕业设计(五)之matlab 极线矫正算法实现相关推荐
- ZYNQ FPGA实验——DAC FIFO实验
文章目录 前言 一.添加AXI4-Stream Data FIFO IP核 二.添加PLL IP核 三.添加DDS IP核 四.添加VIO IP核 五.添加ILA IP核 六.编写测试程序 七.管脚分 ...
- ZYNQ FPGA实验——DDS IP数字波形合成
文章目录 前言 一.DDS简介 二.添加DDS IP核 三.添加VIO IP核 四.添加ILA IP核 五.编写测试程序 六.分配管脚 七.连接开发板测试 八.Simulator仿真 九.Matlab ...
- Xilinx Zynq FPGA Boards板
Xilinx Zynq FPGA Boards板 Xilinx Zynq FPGA Boards 介绍 Styx是一个易于使用的Zynq开发模块,具有Xilinx的Zynq ZC7020 SoC和FT ...
- matlab系统的根轨迹,实验五 利用MATLAB绘制系统根轨迹
<实验五 利用MATLAB绘制系统根轨迹>由会员分享,可在线阅读,更多相关<实验五 利用MATLAB绘制系统根轨迹(6页珍藏版)>请在人人文库网上搜索. 1.实验五 利用MAT ...
- (15)ZYNQ FPGA AXI-stream总线简介(学无止境)
1 应用领域 ZYNQ FPGA PS与PL交互需要用到该总线.PL侧支持AXI4-Stream,PS支持AXI总线.AXI4-Stream协议是一种用来连接需要交换数据的两个部件的标准接口,它可以用 ...
- 基于ZYNQ FPGA实现数据采集与传输系统设计
1 ZYNQ FPGA简介 传统的嵌入式集成电路应用级芯片常见的 DSP,ARM,PowerPC,MIPS, FPGA 等,FPGA 有灵活性好,资源丰富,可反复编程(Programmable)速度快 ...
- (2)ZYNQ FPGA加载比特流(FPGA不积跬步101)
0 引言 一个合格的技术员,专业知识不用说,懂的越多越好.为自己加油!!! 1 ZYNQ FPGA简介 传统的嵌入式集成电路应用级芯片常见的 DSP,ARM,PowerPC,MIPS, FPGA 等, ...
- 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606) 1 ZYNQ FPGA简介 赛灵思公司在ZYNQ系列上成功将ARM的Cortex-A9处理器片上系统与A7系列的可编程逻辑集成在一起. ...
- 基于ZYNQ FPGA实现图像采集存储显示
1 FPGA硬件系统设计 基于ZYNQ FPGA实现图像数据采集.存储.处理和显示系统框图如图1所示.说明:2路摄像头采集系统,4种显示方案,原始数据显示2路,经过算法处理2路. 图1 系统设计 OV ...
最新文章
- SQLServer的数据类型
- hdu4862 费用流(不错)
- BLE进阶——链路层(1)
- mysql基础命令大全
- 浅析C#中单点登录的原理和使用
- WordPress中输出当前页面SQL语句的方法
- 【数据结构与算法】非森林版并查集V1.1的Java实现
- 启动/关闭Spring boot服务脚本
- 十张叫做幸福的照片(贴图)
- Mysql Replication 之 GTID 实战
- webview android%3e28,Android WebView 文明踩坑之路
- web前端之CSS——web字体详解
- 【效率提高10倍项目原创发布!】深度学习数据自动标注器开源 目标检测和图像分类(高精度高效率)
- 小程序css 如何引用图片,微信小程序实例:如何引入外部js的文件(图文)
- 【NOIP提高】飞扬的小鸟
- State Threads 回调终结者(ST线程库)
- 2021年全球及中国天然橡胶产量、消费量及价格走势分析:中国市场需求量急速增涨[图]
- 基于STM32的RGB调色器——STM32程序和Qt上位机全开源
- 【STM32】通过RTThread驱动W25QXXX
- 暴雪修改手机500服务器错误,网站http服务器内部500错误的解决方法 [图文]