视差图是神经网络里的x--feature,分左右眼

计算过程是先将左眼(或右眼)图片作为主视图(基准),然后用另外一眼图片缓慢的水平划过主视图,

这时候会有部分区域重合,相当于人看东西的时候双目同时注视.

记住这个水平移动的距离就可以计算出景深.计算公式还包含焦距,双眼距离.

小技巧,为了提高计算速度,可以将彩色图片转化为灰度图,如下.

小技巧,为了提高计算速度,可以将多张滑动重合图堆叠在一起,构成一张3D矩阵图,这里将3D矩阵图做个2D切片:

然后从层,行,列3个维度中,选取行的维度进行切片,再卷积,最后得到重合位置,这里做个2D切片:

用到的卷积核见程序中的 ---kernel.  卷积核还有继续改进的空间.

注意图片上边沿附近的2个小白点:

将多个重合位置重新降维到2D得到结果. 这样就得到了深度图, 可以作为 神经网络里的y--label, 可惜简单的算法只能 边沿涂色,需要后续处理才能将整个物体涂色.

# 改成 320 x 240 分辨率# 用 卷积去除彩虹, 卷积核的作用是时间轴上的边界重叠位置,计算重合时刻的视差,# todo  现在是边界有深度信息,面没有深度信息, 计算的结果仅仅是边沿, todo 将视差向右传播,方法是??(直到另外一个极值?)# todo 滑动距离需要改变''' 伪代码:frame2 [0:240,  0:320]                              左右眼照片,320x240cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY)              灰度化cv2.addWeighted()                                  融合左右眼算法,#  将shift=1  shift=200 堆叠成3D 阵列#  将3D 转换为2D,选择极值,并记录层数 #  将2D转换为深度图,#  将深度图转换为色彩图'''##############      import cv2
import numpy as np
import timestart = time.time()dx, dy = 0, -1                                                            # 左眼图片滑动的dx  向右偏移量,  dy=-1  制造偏差修正,固定的偏移量#  dx=-3 窗外的塔吊重合#  dx=-5 办公室远处的绿植重合#  dx=-99 距离摄像头15cm的鼻子重合DATA3D  =np.zeros((30,240,320), dtype=np.uint8)                              # 存储             # 2图相减的值,堆叠DATA3D。         每个单元格里是:左右眼差异            所有的视差融合图  高 x 宽 x 视差(像素),   --一开始申请连续空间,数据搬运工作量少,比较节约cpu时间,
DATA3D2 =np.zeros((30,240,320), dtype=np.uint8)                            # 存储            视差融合点 DATA2D=np.zeros((240,320), dtype=np.uint8 )                                    # 存储            高 x 宽 ,每个单元格里是:  融合后最小值的视差(像素)
# print(DATA3D.shape)keyInput=0########################################################################### kernel = np.array((                                             #  卷积核,用于查找左右眼重合点[-1, -1,  1,  1,  0],[-1, -1,  1,  0, -1],[-1, -1,  0, -1, -1],[-1,  0,  1, -1, -1],[ 0,  1,  1, -1, -1]),dtype="float32") / 1##############   获取图片 ############################for k in range(0, 1 ):  print("读取左右眼图片   -------------")imgL =cv2.imread("imgL00009.png")                                                            #读取 图片L ,图片RimgR =cv2.imread("imgR00009.png")
#########################################################imgL_gray=cv2.cvtColor(imgL,cv2.COLOR_BGR2GRAY)                        #将彩色图片L转换至灰度图片##  rows, cols, ch = imgL.shape                                                                        # for 彩色图片rows, cols    = imgL_gray.shape## imgL_gray=imgL_gray.astype(np.int16)imgR_gray=cv2.cvtColor(imgR,cv2.COLOR_BGR2GRAY)                         #将彩色图片R转换至灰度图片cv2.imshow('imgR_gray',imgR_gray)###########################################################################################   滑动 + 堆叠   for i in range(2,31):                                                                                              # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  todo 滑动距离需要改变print("视差图相减,再堆叠-------------------",i)MAT = np.float32([[1, 0, -2*i], [0, 1, dy]])                                                                                  # 构造平移变换矩阵 ,[dx, dy]像素移动 imgL_gray_shift = cv2.warpAffine(imgL_gray, MAT, (cols, rows))                                # 仿射变换,移动图片。默认为黑色填充# imgL_gray_shift = cv2.warpAffine(imgL_gray, MAT, (cols, rows), borderValue=(255,255,255))   # 白色填充imgMerge=cv2.absdiff(imgR_gray ,   imgL_gray_shift )               # 2图相减的值,   '''                                                                                                                           # <<<<<<< debug  注释符号' ' ' 需要对齐## 将 imgMorphClose0    imgMorphClose1  做与运算# imgMerge= cv2.bitwise_xor(imgR_Threshold ,imgL_Threshold)   ## 做与或运算   xor# imgMerge= cv2.bitwise_and(imgR_Threshold ,imgL_Threshold)   ## 做与运算     and# imgMerge= cv2.bitwise_or(imgR_Threshold ,imgL_Threshold)      ## 做或运算     or# imgMerge= cv2.add(imgR_Threshold ,imgL_Threshold)           ## 做加运算     add,效果等同于 or# imgMerge= cv2.bitwise_not(imgR_Threshold)   ## 做非运算     not'''DATA3D[i-2,:,:] = imgMerge                                                                    # 2图相减的值,--------------------------------------------堆叠DATA3D。 ###########################################################################################    卷积 + 堆叠 for i in range(0,240):probe2D= DATA3D[:, i, :]                                                                                                               # 切片 -------------- 切片DATA3D, 方向在 层,行,列  的 行维度imgProbe2DMin = cv2.filter2D(probe2D, -1, kernel)                                                       #  卷积  求重合点-------------- cv.filter2D(源图像,输出数据类型  ,卷积核)   , 输出数据类型 =-1 表示输出类型和输入相同 DATA3D2[:,i,:] = imgProbe2DMin                                                                                             #  堆叠 --------------堆叠DATA3D2,  方向同上 ############################################  #   显示 3D矩阵的剖面    imgTemp = DATA3D[:,200,:] *90                                              ##   未经卷积处理过的3D矩阵的剖面, *90 表示增强信号,否则看不到cv2.imshow( 'imgTemp', imgTemp  )imgTemp1 = DATA3D2[:,200,:] *90                                          ##   已经卷积处理过的3D矩阵的剖面, *90 表示增强信号,否则看不到cv2.imshow( 'imgTemp1', imgTemp1  )########################### # 求极值DATA2D  = np.argmax( DATA3D2,axis = 0 ).astype(np.uint8) * 9                                    # np.argmin( ) 返回了最小值的位置 # debug   <<<<<<<<<<<<<<<<<<<程序会将uint8 自动更改为 int64# print(DATA2D.dtype)                         # print( DATA2D.shape )                     outPutColor = cv2.applyColorMap(DATA2D, cv2.COLORMAP_JET)                      # COLORMAP_JET = 2, 蓝到红# COLORMAP_RAINBOW = 4,红到蓝cv2.imshow( 'outPutColor',  outPutColor  )                         # 如果 DATA2D 声明的时候没有指定数据类型,或者在计算过程中数据类型改变,可以在这里指定为 uint8#########  键盘响应 ,兼计时器  ########################################3 keyInput       = cv2.waitKey( 0)   & 0xFF                                #等待键盘输入,间隔  xx us                         #  debu g <<<<<<<<<<<<<<< 设置 waitKey(0) , 则表示程序会无限制的等待用户的按键事件if (keyInput == ord('q')) | (keyInput == 27 ) :            # 键盘上的按键  --q   --ESCbreakcv2.destroyAllWindows() 

通过cv2输出左右眼视差图, 然后根据视差图输出深度边沿相关推荐

  1. 立体感的3D图像(包含左右眼)生成Red-Cyan分析图

    现在在作3D的东西,得到左右两个视角的图,但不知道怎么来判断效果,不知道哪个结果更好,怎么办?现在整理了些方法,备份在此,供大家分享和讨论. 1.Red-Cyan anaglyph 没有眼镜也没有关系 ...

  2. unity中凹凸贴图、法线贴图、视差贴图和位移贴图

    凹凸贴图 ((更多资源资料下载群:193521697邀请码:10026)) 对于凹凸贴图在计算机图形领域中的研究,最早开始于70年代末,至今已经有接近30年历史了.NormalMap只是一种目前很流行 ...

  3. Arcgis ArcEngine二次开发: 输出宗地图、宗地草图、权属协议书附图、房产分层分户图、公示图、三调土地利用图、行政区划图、标准分幅图等各种图件

    1.Arcgis  ArcEngine二次开发: 输出宗地图.宗地草图.权属协议书附图.房产分层分户图.公示图.三调土地利用图.行政区划图.标准分幅图等各种图件 有需要联系QQ:185242573. ...

  4. 九九乘法表--输出左对齐+输出字长

    九九乘法表–输出左对齐+输出字长 oj循环第一题 #include<iostream> #include<iomanip> using namespace std; int m ...

  5. opengl高级光照之视差贴图(陡峭视差贴图以及视差遮蔽映射)

    视差贴图 视差贴图官方文档 视差贴图 视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则.和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感.它也是利用了视错 ...

  6. Java 输出左直角三角形

    import java.util.Scanner; public static void test2() {         //输出左直角三角形         Scanner sc =new Sc ...

  7. 采用邻接矩阵形式存储图,进行图的深度优先搜索并输出结果。

    内容: 采用邻接矩阵形式存储图,进行图的深度优先搜索并输出结果. 步骤: 算法分析 本题需要利用邻接矩阵的形式存储图,并对图进行深度优先搜索并输出结果.大体上可以分为两个部分,一是采用邻接矩阵的方式存 ...

  8. arcgis已搭建好的空间自动化出图(仅仅是自动输出图片,不包含图层处理)中python和arctoolbox的结合使用

    #python脚本通过arctoolbox的工具箱新建工具,输入代码构成.本文侧重代码的简单实现.下图为最终界面: ########################################## ...

  9. activiti动态增加节点_图神经网络之动态图

    图这种结构普遍存在于人类社会生活中,如互联网中网页间的互相链接会构成图.网民购买商品会构成"网民-商品"图.人和人的交流会构成图.论文的互相引用也会构成图.有许多任务需要根据这些图 ...

最新文章

  1. Node.js 报语法错误 SyntaxError: Unexpected identifier
  2. jsonStore加载远程和本地数据实例
  3. postgresql 集群_谁说postgresql 没有靠谱的高可用(2)
  4. numpy.random.uniform()
  5. 【PP生产订单】入门介绍(六)
  6. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
  7. 状态开关按钮(ToggleButton)及按钮(Swich)的使用
  8. POJ 1422 Air Raid
  9. 用Kubeadm安装K8s后,kube-flannel-ds一直CrashLoopBackOff
  10. webpack 分离css html,【已解决】ReactJS中Webpack打包时分离css
  11. [翻译]Popfly系列课程7 –深入幕后:使用 Popfly学习XML的初学者指南
  12. 求ucinet软件下载资源!!!!
  13. 浅议一种低成本的48V蓄电池组电压电流采集模块
  14. 嵌入式开发培训怎么样,嵌入式开发培训前景如何?
  15. oracle的视图和同义词
  16. 爱乐活改版未断根,改版后不伦不类
  17. c语言 qt 写小游戏,Qt实现Flappy Bird游戏
  18. Redhat 8修改系统语言为英文
  19. Data Migration 架构
  20. 差模信号与共模信号的理解

热门文章

  1. MWB201S只能成对使用不支持单独使用 一定注意
  2. 中职计算机平面设计教师考试面试,中职教师面试常见问题
  3. 性能测试方法详解(验收性能、负载、压力、配置、并发、可靠性、失败恢复)
  4. SEO新手入门系列2022(一):SEO金字塔
  5. html5加vue弹窗,Vue制作弹出对话框组件
  6. 德扑入门 进阶读物推荐 - 德州扑克小绿皮书
  7. 总结LDO与升压芯片的选型
  8. 使用CSS将图像进行模糊处理
  9. 小米4 第三方re奇兔_小米手机推出心率检测功能,升级至 MIUI 12即可使用
  10. ThinkPHP5.1 Hook(钩子)的理解及应用示例