(Python代码)通过视差图获取图片中不同物体的高度比

1、原理

 可以推出不同物体的高度比可以通过如下公式得到:

 

 h_{l} 是左边指定物体的高度(图片中尺寸)

h_{r} 是右边指定物体的高度(图片中尺寸)

 d_{l} 是左边指定物体的平均视差值

 d_{r} 是右边指定物体的平均视差值

 

2、代码逻辑框图

3、代码详解

import multiprocessing as mp
import numpy as np
import cv2
import time#读取图像
img5_L = cv2.imread('relative_height/3_a.jpg')
img5_R = cv2.imread('relative_height/3_b.jpg')
img_L=img5_L
img_R=img5_R#功能:获取视差图
#输入:两张图片
#输出:视差图
def disparity(img_L,img_R):stereo = cv2.StereoSGBM_create(numDisparities=48,blockSize=3)disparity = stereo.compute(img_L, img_R)return disparityrect_L = (310,36,521,759) #起点x,y, 增加至为w,h
rect_R = (835,70,590,941)#功能:截图
#输入:图片,截图范围
#输出:截图
def segment(img,rect):mask = np.zeros(img.shape[:2],np.uint8)bgdModel = np.zeros((1,65),np.float64)fgdModel = np.zeros((1,65),np.float64)cv2.grabCut(img,mask,rect,bgdModel,fgdModel,20,cv2.GC_INIT_WITH_RECT)mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')img = img*mask2[:,:,np.newaxis]return img#功能:构建高斯核sieze和sigma
#输入:size,sigma
#输出:二维数组
def gaussian_kernel_2d(kernel_size, sigma):kx = cv2.getGaussianKernel(kernel_size, sigma)ky = cv2.getGaussianKernel(kernel_size, sigma)return np.dot(kx, np.transpose(ky))#功能:彩色图转成灰色图
#输入:彩色图img
#输出:灰色图gray_img
def color_to_gray(img):height = img.shape[0]width = img.shape[1]channels = img.shape[2]value = [0] * 3gray_img = np.zeros([height, width], np.uint8)for row in range(height):for column in range(width):for chan in range(channels):value[chan] = img[row, column, chan]R = value[2]G = value[1]B = value[0]# new_value = 0.2989 * R + 0.5870 * G + 0.1140 * Bnew_value = 0.2989 * R + 0.5870 * G + 0.1140 * B  # 转为灰度像素gray_img[row, column] = new_valuereturn gray_img#功能:获取截图的高度(像素之差)
#输入:img
#输出:高度
def object_height(img):point1=(0,0)point2 = (0, 0)height1=0height2=0for row in range(len(img)):for col in range(len(img[row])):if img[row][col] != 0:height1=rowpoint1=(row,col)breakfor row in range(len(img)-1,-1,-1):for col in range(len(img[row])):if img[row][col] != 0:height2=rowpoint2 = (row, col)breakheight=abs(height2-height1)return point1,point2,height# 功能:求平均视差值
# 输入:抠图img,视差图disparity
# 输出:平均视差值
def average_disparity_value(img,disparity):n=0value=0for row in range(len(img)):for col in range(len(img[row])):if img[row][col] != 0:n +=1value+=disparity[row][col]return value/n#功能:估计图片不同物体的实际高度比
#输入:图片img_L和img_R
#输出:图片中不同物体的实际高度比
def height_ratio(img_L,img_R):t_start = time.clock()print('compute disparity....')disparity1=disparity(img_L,img_R)disparity1 = cv2.filter2D(disparity1, -1, gaussian_kernel_2d(16, 60))print('object segment...')pool = mp.Pool(processes=mp.cpu_count() - 1) #并行处理设置res1=pool.apply_async(segment,(img_L, rect_L))#并行处理seg_L=res1.get()res2=pool.apply_async(segment, (img_R, rect_R))#并行处理seg_R = res2.get()print('color_to_gray...')seg_L=color_to_gray(seg_L)seg_R = color_to_gray(seg_R)print('computer object height...')point1_L,point2_L,height_L=object_height(seg_L)point1_R, point2_R, height_R = object_height(seg_R)d_L=average_disparity_value(seg_L, disparity1)d_R = average_disparity_value(seg_R, disparity1)t_end = time.clock()print('数据处理用时', t_end - t_start)ratio= height_L*d_R/(height_R*d_L)return ratioif __name__ == '__main__':hei_ratio5=height_ratio(img_L,img_R)print(hei_ratio5)

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 安装与启动

安装第一种安装方式:CentOS 7下配置 yum 安装 Nginx。按照官方的安装实例:https://www.nginx.com/resources/admin-guide/第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo:cd /etc/yum.repos.d/vim nginx.repo 填写…

一文读懂生物医学领域的传感器

来源:传感器技术摘要:生物医学传感器是生物医学科学和技术的尖兵,生物医学研究的正确结论有赖于生物医学传感器的正确测量。而传感器是一门十分综合的科学和技术。现代传感器的物理模型如图所示:对于传统被测量而言,敏…

训练数据的分布对F-measure, recall 和 precision的影响

1、 Precision, recall and F-measure(f1-score) 2、思路 数据集:手写数字集 从训练集中抽取数据,保证每种label的数量一致,使用SVM 或ANN模型训练新数据集。按照高斯分布抽取新数据, 再次使用SVM 或ANN模…

稀疏矩阵的压缩存储--十字链表(转载)

稀疏矩阵的压缩存储--十字链表&#xff08;转载&#xff09;<?xml version"1.0" encoding"UTF-8"?> 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/ZhangJinkun/p/4531626.html

不可思议的数字:互联网每天到底能产生多少数据?

来源&#xff1a;资本实验室随着互联网、传感器&#xff0c;以及各种数字化终端设备的普及&#xff0c;一个万物互联的世界正在成型。同时&#xff0c;随着数据呈现出爆炸式的指数级增长&#xff0c;数字化已经成为构建现代社会的基础力量&#xff0c;并推动着我们走向一个深度…

(Matlab问题解决)运行matlab程序后,工作区不能显示变量

运行matlab程序&#xff0c;想查看工作区的变量&#xff0c;发现变量无法显示。 原代码特点&#xff1a; 代码中的主函数是以 function main()开头没有end结尾&#xff0c;子函数以function开口&#xff0c;没有end 结尾。 修改方式&#xff1a; 主函数中去掉function main…

redis 安装并设置为开机启动服务

安装 1.下载redis,wget http://download.redis.io/releases/redis-3.0.1.tar.gz 解压&#xff1a;tar zxvf redis3.0.1.tar.gz cd redis3.0.1 make make test 报错&#xff0c;提示需要安装tcl&#xff0c; wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz 安装…

任正非:华为5G芯片用在iPhone上?我持开放态度

来源&#xff1a;机器之心摘要&#xff1a;外媒最近频传的「华为同意卖5G基带给苹果」&#xff0c;让科技界的人们浮想联翩。刚刚&#xff0c;华为终于有了较为官方的回应&#xff1a;华为总裁任正非在接受CNBC的时候表示&#xff0c;华为对于出售5G芯片给苹果用于iPhone「持开…

string.Format格式化输出

staticstring Format (string format,object arg0):将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式 (1)格式化货币&#xff08;跟系统的环境有关&#xff0c;中文系统默认格式化人民币&#xff0c;英文系统格式化美元&#xff09;string.Format("{0: C}…

阿里120页PPT诠释国家“智能+”战略

未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云…

边缘检测

1、边缘的特征 先看一张实物图和边缘图 边缘是图片中灰度变化最快的地方。下图清楚地显示了最简单的一种情况。既然找变化最快的地方&#xff0c;可以通过导数来求解边缘 2、图片的导数 一张数字图片F[x,y], 其x方向导数可定义为&#xff1a; 3、图片的梯度 3.1 图片的梯度相…

黑马程序程序员基础测试(二)

2、 编写程序计算122232....1002的和. 我觉得这题的难点是在你如何快速寻找到累加的次数。和每次累加的增量。 package com.itheima;public class Text2 {/*** 2、 编写程序计算122232....1002的和.* author tianshenjiaoao* param args*/public static void main(String[] arg…

边缘计算: 与5G同行,开拓蓝海新市场

来源&#xff1a;中银国际摘要&#xff1a;随着日渐成熟的SDN/NFV、大数据、人工智能等技术&#xff0c;5G网络将成为各行业数字化转型的关键基础设施。边缘计算技术作为5G网络架构中核心的一环&#xff0c;顺随运营商边缘机房智能化改造的趋势&#xff0c;致力于解决5G网络对于…

图像重采样

图像重采样包含两种情形&#xff0c;一种是下采样&#xff08;downsampling&#xff09;&#xff0c;把图像变小&#xff1b;另一种是上采样&#xff08;upsampling)&#xff0c;把图像变大。 1、次级采样&#xff08;sub-sampling&#xff09; 每隔一个&#xff0c;扔掉行和…

haha

转载于:https://www.cnblogs.com/izxcheng/p/4539888.html

裸机开发(1)-汇编基础

文章目录 GNU汇编语法常用汇编指令处理器内部数据传输指令存储器访问指令压栈和出栈指令跳转指令算术指令逻辑运算指令实战 函数发生调用时&#xff0c;需要进行线程保护&#xff0c;简单来说&#xff0c;就是先进行压栈操作&#xff0c;将调用函数参数、返回值等存到R0-15寄存…

脑科学研究:对于学习来说,休息可能与练习同样重要...

来源&#xff1a;神经科技近日&#xff0c;在针对健康志愿者的的一项研究中&#xff0c;美国国立卫生研究院&#xff08;NIH&#xff09;的研究人员发现&#xff0c;大脑可能会通过短暂的休息来巩固我们几秒钟前刚练习过的新技能的记忆。该研究结果强调了早期休息在学习中可能发…

Harris 角点检测(Harris corner detection)

在许多应用中&#xff0c;会运用到特征提取。 比如&#xff0c;把下方两张图片缝合成一张图片。哪么从哪些地方开始缝合呢&#xff1f;这些地方可以通过特征提取找到。 1、特征 图片上的特征点应该具有怎样的特性&#xff1f; a. 图片上的特征点不随图片的变化&#xff08;平…

android网址

1. 优麒麟手机助手 https://github.com/ubuntu-kylin/phone_manager 2. http://forum.xda-developers.com/index.phphttp://forum.xda-developers.com/wiki/in ... Main_Page转载于:https://www.cnblogs.com/wi100sh/p/4542266.html

BoW(词袋Bag of words)

Bag-of-words词袋模型最初被用在信息检索领域。例如检索一篇文档&#xff0c;只需考虑文档中出现单词的频率&#xff0c;而不用考虑语法语序等。在图像领域&#xff0c;如果把一幅图像当作文档&#xff0c;图像中的图像块的特征向量视为文档内的词&#xff0c;BoW在图像领域也可…