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 极线矫正算法实现相关推荐

  1. ZYNQ FPGA实验——DAC FIFO实验

    文章目录 前言 一.添加AXI4-Stream Data FIFO IP核 二.添加PLL IP核 三.添加DDS IP核 四.添加VIO IP核 五.添加ILA IP核 六.编写测试程序 七.管脚分 ...

  2. ZYNQ FPGA实验——DDS IP数字波形合成

    文章目录 前言 一.DDS简介 二.添加DDS IP核 三.添加VIO IP核 四.添加ILA IP核 五.编写测试程序 六.分配管脚 七.连接开发板测试 八.Simulator仿真 九.Matlab ...

  3. Xilinx Zynq FPGA Boards板

    Xilinx Zynq FPGA Boards板 Xilinx Zynq FPGA Boards 介绍 Styx是一个易于使用的Zynq开发模块,具有Xilinx的Zynq ZC7020 SoC和FT ...

  4. matlab系统的根轨迹,实验五 利用MATLAB绘制系统根轨迹

    <实验五 利用MATLAB绘制系统根轨迹>由会员分享,可在线阅读,更多相关<实验五 利用MATLAB绘制系统根轨迹(6页珍藏版)>请在人人文库网上搜索. 1.实验五 利用MAT ...

  5. (15)ZYNQ FPGA AXI-stream总线简介(学无止境)

    1 应用领域 ZYNQ FPGA PS与PL交互需要用到该总线.PL侧支持AXI4-Stream,PS支持AXI总线.AXI4-Stream协议是一种用来连接需要交换数据的两个部件的标准接口,它可以用 ...

  6. 基于ZYNQ FPGA实现数据采集与传输系统设计

    1 ZYNQ FPGA简介 传统的嵌入式集成电路应用级芯片常见的 DSP,ARM,PowerPC,MIPS, FPGA 等,FPGA 有灵活性好,资源丰富,可反复编程(Programmable)速度快 ...

  7. (2)ZYNQ FPGA加载比特流(FPGA不积跬步101)

    0 引言 一个合格的技术员,专业知识不用说,懂的越多越好.为自己加油!!! 1 ZYNQ FPGA简介 传统的嵌入式集成电路应用级芯片常见的 DSP,ARM,PowerPC,MIPS, FPGA 等, ...

  8. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)

    基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606) 1 ZYNQ FPGA简介 赛灵思公司在ZYNQ系列上成功将ARM的Cortex-A9处理器片上系统与A7系列的可编程逻辑集成在一起. ...

  9. 基于ZYNQ FPGA实现图像采集存储显示

    1 FPGA硬件系统设计 基于ZYNQ FPGA实现图像数据采集.存储.处理和显示系统框图如图1所示.说明:2路摄像头采集系统,4种显示方案,原始数据显示2路,经过算法处理2路. 图1 系统设计 OV ...

最新文章

  1. SQLServer的数据类型
  2. hdu4862 费用流(不错)
  3. BLE进阶——链路层(1)
  4. mysql基础命令大全
  5. 浅析C#中单点登录的原理和使用
  6. WordPress中输出当前页面SQL语句的方法
  7. 【数据结构与算法】非森林版并查集V1.1的Java实现
  8. 启动/关闭Spring boot服务脚本
  9. 十张叫做幸福的照片(贴图)
  10. Mysql Replication 之 GTID 实战
  11. webview android%3e28,Android WebView 文明踩坑之路
  12. web前端之CSS——web字体详解
  13. 【效率提高10倍项目原创发布!】深度学习数据自动标注器开源 目标检测和图像分类(高精度高效率)
  14. 小程序css 如何引用图片,微信小程序实例:如何引入外部js的文件(图文)
  15. 【NOIP提高】飞扬的小鸟
  16. State Threads 回调终结者(ST线程库)
  17. 2021年全球及中国天然橡胶产量、消费量及价格走势分析:中国市场需求量急速增涨[图]
  18. 基于STM32的RGB调色器——STM32程序和Qt上位机全开源
  19. 【STM32】通过RTThread驱动W25QXXX
  20. 暴雪修改手机500服务器错误,网站http服务器内部500错误的解决方法 [图文]

热门文章

  1. 电信说的几兆带宽和自己看到的下载/上传速度有什么关系?
  2. sklearn之svm-葡萄酒质量预测(9)
  3. 三国志13pk版登录武将输入中文名方法与更改图像详解
  4. steam 下载游戏时无法连接到服务器
  5. 腾讯云域名 OpenWrt 自动更新IP shell脚本
  6. bookxnote手机版_PDF电子书阅读器下载
  7. 聊一聊在字节跳动做项目质量改进的经验
  8. Android Q 限制后台启动Activity
  9. python 调用 Intel realsense D415摄像头
  10. Android Studio自动排版格式化(android排版和xml排版)