双目视觉 1 双目视觉的原理

article/2025/10/9 18:30:00

首先我们讲解一下双目视觉中,我们只有两张二维的图片,我们的目的就是通过这两张二位的图片来构建出一个三维的模型,这就要求我们要通过两张图,推算出来一个图片没有展示出来的深度。深度的计算的原理如下

图片中C1和C2分别对应着我们双目视觉中两个摄像头的位置

\Delta TOP\sim \Delta O'OD_{1}\Rightarrow \frac{x}{xl} =\frac{z}{f}

\Delta C_{W}EP\sim \Delta C_{2}GD_{2}\Rightarrow \frac{x-b}{xr} =\frac{z}{f}

xl=\frac{x}{z}f\; \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;1

xr=\frac{x-b}{z}f\; \;\;\;\;\;\;\;\;\;\;\;2

由式1和式2知

diff=xl-xr=\frac{bf}{z}\Rightarrow z=\frac{b\cdot f}{diff}

 由此可知,只要知道焦距f和左目右目的视察,就可以得到物体到摄像头的距离,即照片不能直接显示的深度,这就是双目测距的原理。

接下来进行算法部分的设计

先在Matlab上对我们的数据进行处理,方便理清程序设计架构

clc;
clear;
close all;% 读取左,右两张目标图片,方便后续操作
pic_l = imread('./IMAG_L50.BMP');
pic_r = imread('./IMAG_R50.BMP');%将图片的RGB888格式下的各个颜色信息提取出来,方便后续转换
[H, W, C] = size(pic_l);
image_lr = pic_l(:,:,1);
image_lg = pic_l(:,:,2);
image_lb = pic_l(:,:,3);image_rr = pic_r(:,:,1);
image_rg = pic_r(:,:,2);
image_rb = pic_r(:,:,3);bin_lo = zeros(H,W);
bin_ro = zeros(H,W);

为了方便图片的二值化,我们先将图片

YCbCr :也叫YCC, YCbCr 是数字信号, 它包含两种形式, 分别为TV range 和 full range, TV range 主要是广播电视采用的标准, full range 主要是pc 端采用的标准, 所以full range 有时也叫 pc range

其转变公式如下

 转换后进行比较,设置一个颜色阈值,如果高于这个值(是红色目标部分)转换为白色,如果低于这个值转换为黑色,通过这种方法来完成图片的二值化。

for v=1 : Hfor u=1 : W%left imageY_l = uint8(0.257*image_lr(v,u) + 0.564*image_lg(v,u) + 0.098*image_lb(v,u) + 16);Cb_l = uint8(-0.148*image_lr(v,u) - 0.291*image_lg(v,u) + 0.439*image_lb(v,u) + 128);Cr_l = uint8(0.439*image_lr(v,u) - 0.368*image_lg(v,u) - 0.071*image_lb(v,u) +128);if( Cr_l >= 180 && Cb_l < 170 && Cb_l > 140)bin_lo(v,u) = 255;elsebin_lo(v,u) = 0;end %right image       Y_r = uint8(0.257*image_rr(v,u) + 0.564*image_rg(v,u) + 0.098*image_rb(v,u) + 16);Cb_r = uint8(-0.148*image_rr(v,u) - 0.291*image_rg(v,u) + 0.439*image_rb(v,u) + 128);Cr_r = uint8(0.439*image_rr(v,u) - 0.368*image_rg(v,u) - 0.071*image_rb(v,u) +128);if( Cr_r >= 180 && Cb_r < 170 && Cb_r > 140)bin_ro(v,u) = 255;elsebin_ro(v,u) = 0;endend
end

 得到二值化的图片后,我们先框选项出图片中物料块的位置

% Calculating coordinates 
row_lmax = 0; row_lmin = 480;
col_lmax = 0; col_lmin = 640;
row_rmax = 0; row_rmin = 480;
col_rmax = 0; col_rmin = 640;for n=1 : Hfor m=1 : W%   left imageif(bin_lo(n,m) == 255)if(m >= col_lmax) col_lmax = m; endif(m <= col_lmin) col_lmin = m; endif(n >= row_lmax) row_lmax = n; endif(n <= row_lmin) row_lmin = n; endend%  right imageif(bin_ro(n,m) == 255)if(m >= col_rmax) col_rmax = m; endif(m <= col_rmin) col_rmin = m; endif(n >= row_rmax) row_rmax = n; endif(n <= row_rmin) row_rmin = n; endendend
end

然后按照我们上述的分析过程进行分析,首先对焦距进行计算、

%用于计算焦距,图片距离为50
% f = (50*(double(aver_lx - aver_rx))*(6*10^-4))/4.6

计算出焦距后,不在调整摄像头,进行距离分析

%计算真实距离
z = uint8((4.6*0.44)/((6*10^-4)*(double(aver_lx - aver_rx))))

将目标物体的周围用绿色的线条包裹,达到物体识别的效果。将算法移植到FPGA中后,利用FPGA的高速的特电,可以实时动态识别物体。

%Box selection
for y=1 : Hfor x=1 : W%left imageif((x == col_lmax && y <= row_lmax && y >= row_lmin)|| (x == col_lmin && y <= row_lmax && y >= row_lmin)|| (y == row_lmin && x <= col_lmax && x >= col_lmin)|| (y == row_lmax && x <= col_lmax && x >= col_lmin))box_l (y, x , 1)= uint8(0);box_l (y, x , 2)= uint8(255);box_l (y, x , 3)= uint8(0);elsebox_l(y, x, 1) = pic_l(y,x,1);box_l(y, x, 2) = pic_l(y,x,2);box_l(y, x, 3) = pic_l(y,x,3);end%right imageif((x == col_rmax && y <= row_rmax && y >= row_rmin) || (x == col_rmin && y <= row_rmax && y >= row_rmin)||(y == row_rmax && x <= col_rmax && x >= col_rmin) || (y == row_rmin && x <= col_rmax && x >= col_rmin))box_r (y, x ,1)= uint8(0);box_r (y, x ,2)= uint8(0);box_r (y, x ,3)= uint8(255);elsebox_r(y, x, 1) = pic_r(y,x,1);box_r(y, x, 2) = pic_r(y,x,2);box_r(y, x, 3) = pic_r(y,x,3);endend
end

将处理后的图片显示出来


%display image
Image_mosaic = [pic_l, pic_r];
Image_bin = [bin_lo, bin_ro];
Image_proces = [box_l, box_r];subplot(2,2,1); imshow(Image_mosaic); title('原图');
subplot(2,2,2); imshow(Image_bin); title('二值化');
subplot(2,1,2); imshow(Image_proces); title('识别');

在整理清楚设计的原理和思路后,下一篇我们将会进行FPGA部分识别部分的算法的设计。


http://chatgpt.dhexx.cn/article/iqsGZLTf.shtml

相关文章

单目视觉>双目视觉>RGBD比较

目前&#xff0c;视觉SLAM&#xff08;SLAM是“Simultaneous Localization And Mapping”的缩写&#xff0c;可译为同步定位与建图&#xff09;可分为单目、双目(多目)、RGBD这三类&#xff0c;另还有鱼眼、全景等特殊相机&#xff0c;但目前在研究和产品中还属于少数。从实现难…

双目视觉原理(万字总结,包含Halcon代码)

双目视觉原理 1. 双目视觉的视差与深度1.1 总览2. 视差原理 2. 双目相机的坐标系2.1 针孔相机的模型2.2 四大坐标系1 像素坐标系&#xff08;单位&#xff1a;像素&#xff08;pixel&#xff09;&#xff09;2 图像坐标系&#xff08;单位&#xff1a;mm&#xff09;3 相机坐标…

来聊聊双目视觉的基础知识(视觉深度、标定、立体匹配)

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 1 双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&#xff0c;双目视觉就是通过…

单目视觉技术、双目视觉技术、多目视觉技术

计算机视觉、人工智能 视觉的研究过程&#xff1a;感知、认知、和控制 车载摄像头的要求&#xff1a; 看得远&#xff1a;提供了更充足的反应时间&#xff0c;直接提升了安全性。需要长焦距&#xff08;D大&#xff0c;欲保持其他地方不变&#xff0c;就需要F增大&#xff09;…

【双目视觉】双目立体匹配

一、双目立体匹配算法 在opencv中用的比较多的双目立体匹配算法有两种&#xff1a;BM和SGBM。SGBM是BM立体匹配算法的优化版&#xff0c;属于半全局匹配&#xff0c;相对于BM花的时间要更多&#xff0c;但效果优于BM。本文使用的是SGBM半全局匹配方式。 步骤&#xff1a; 1.打…

双目视觉原理及流程概述

双目原理 双目视觉是利用视差原理的一种视觉方法。 如图所示为空间中一点P在左右相机中的成像点Pleft=(Xleft,Yleft),Pright=(Xright,Yright)。将两相机固定在同一平面上,则点P在Y方向的坐标是相同的,即Yleft = Yright =Y。根据三角原理,可得: 视差被定义为相同点在左…

双目视觉(一)双目视觉系统

系列文章&#xff1a; 双目视觉&#xff08;一&#xff09;双目视觉系统双目视觉&#xff08;二&#xff09;双目匹配的困难和评判标准双目视觉&#xff08;三&#xff09;立体匹配算法双目视觉&#xff08;四&#xff09;匹配代价双目视觉&#xff08;五&#xff09;立体匹配…

双目视觉简介

hi 小伙伴们&#xff0c;人啊&#xff0c;很容易有惰性&#xff0c;很久不跟新了&#xff0c;不做笔记了&#xff0c;如今“良心发现”&#xff0c;毕业之后第一次更新博客。当然还是学习&#xff0c;整合分享给更多的人&#xff01; 相信关注我博客和微信公众号的人很多都是做…

机器视觉——双目视觉的基础知识(视差深度、标定、立体匹配)

1、双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&#xff0c;双目视觉就是通过两个摄像头获得图像信息&#xff0c;计算出视差&#xff0c;从而使…

双目立体视觉(一) 基本原理和步骤

目录 一、双目立体视觉系统的四个基本步骤 二、各步骤原理 1、相机标定 2、立体校正 3、立体匹配 一、双目立体视觉系统的四个基本步骤 相机标定主要包含两部分内容: 单相机的内参标定和双目相机的外参标定&#xff0c;前者可以获得每个相机的焦距、光心、畸变系数等参数…

长连接和短链接的区别

长连接意味着进行一次数据传输后&#xff0c;不关闭连接&#xff0c;长期保持连通状态。如果两个应用程序之间有新的数据需要传输&#xff0c;则直接复用这个连接&#xff0c;无需再建立一个新的连接。就像下图这样。 它的优势是在多次通信中可以省去连接建立和关闭连接的开销…

springboot 实现长链接转短链接

实现结果&#xff1a; 转换短链接api&#xff1a; 接口&#xff1a;http://127.0.0.1/api?urlurlencode(要缩短的网址) 例如&#xff1a;http://127.0.0.1/api?urlhttp%3a%2f%2fwww.baidu.com 返回&#xff1a;http://127.0.0.1/baidu 访问短链接即可还原原url&#xff1b;…

长链接与短链接

1、Http协议 1.1 HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议&#xff0c;在传输层使用TCP协议&#xff0c;在网络层使用IP协议。IP协议主要解决网络路由和寻址问题&#xff0c;TCP协议主要解决如何在IP层之上可靠的传递…

长连接与短链接

短链接&#xff1a;客户端每次请求成功后&#xff0c;将关闭链接 长连接&#xff1a;客户端请求成功后&#xff0c;并不会立即关闭链接&#xff0c;适用于客户端请求较为频繁的情况 ———————————————————————————————————— 1. HTTP协议与TC…

如何实现 长链接变 短 链接?

短链接&#xff0c;通俗来说&#xff0c;就是将长的 URL 网址&#xff0c;通过程序计算等方式&#xff0c;转换为简短的网址字符串。 大家经常会收到一些莫名的营销短信&#xff0c;里面有一个非常短的链接让你跳转。新浪微博因为限制字数&#xff0c;所以也会经常见到这种看着…

微信:长链接转短链接

前言 微信复制出来的链接太长&#xff0c;想转短连接如何做&#xff1f; 将一条长链接转成短链接。 主要使用场景&#xff1a; 开发者用于生成二维码的原链接&#xff08;商品、支付二维码等&#xff09;太长导致扫码速度和成功率下降&#xff0c;将原长链接通过此接口转成短…

长链接 转换成 短链接

文章目录 参考来源思路方法一方法二 参考来源 豆瓣 短链接生成的算法原理 思路 方法一 一般会想到用哈希&#xff0c;这里可以用MD5码获取哈希值&#xff0c;但时MD5生成的串挺长的&#xff0c;这类要考虑怎么把它变短。 做法如下&#xff1a; 方法二 很好想的思路&…

长链接 转短链接URL的设计思路

最烂的回答 实现一个算法&#xff0c;将长地址转成短地址。实现长和短一一对应。然后再实现它的逆运算&#xff0c;将短地址还能换算回长地址。 这个回答看起来挺完美的&#xff0c;然后候选人也会说现在时间比较短&#xff0c;如果给我时间我去找这个算法就解决问题了。但是稍…

长链接转成短链接的原理和实现详解

一、为什么要设计短链接&#xff0c;短链接有什么好处&#xff1f; 1、链接变短&#xff0c;在对内容长度有限制的平台发文&#xff0c;可编辑的文字就变多了。 比如&#xff1a;微博&#xff0c;限定了只能发 140 个字&#xff0c;如果一串长链直接怼上去&#xff0c;其他可…

长链到短链转化

文章目录 1:为什么将长链转化为短链&#xff1f;2:短链跳转的基本原理3&#xff1a;将长链转化为短链&#xff08;Hash&#xff09;3.1:hash3.1.1:hash算法的选取3.1.2hash后还是有点长3.1.3:解决hash冲突 3.2:自增序列算法 1:为什么将长链转化为短链&#xff1f; 1、链接变短…