PFM格式图像和读取middlebury 数据集
PFM格式图像和读取middlebury 数据集
- PFM格式图像
- 图像格式
- Middlebury 2014数据集
- 数据集介绍
- 读取Middlebury数据集中视差图生成depth map
PFM格式图像
http://www.pauldebevec.com/Research/HDR/PFM/
https://linux.die.net/man/5/pfm
PFM (Portable Float Map),是一种浮点像素的图像格式,包含文件信息和文件二进制数据两部分内容。
图像格式
PFM中的文件信息称为header,二进制图像数据称为raster。
header 文件信息:
共有三行信息,并且以Unix风格的换行符“\n”的十六进制“0x0a”结尾。
- Identifier Line
值为“PF”或者“Pf”。- “PF”,说明是RGB三通道图像
- “Pf”,说明是单通道图像
- Dimensions Line
此行是图像的行列信息(不包含通道),中间以空格隔开 - Scale Factor / Endianness
缩放因子/字节顺序,该行写入的信息是全局浮点数缩放因子值,有正负之分。
如果是正值,说明图像的二进制数据是以大端序列存储,负值则为小端序列存储(不存在0值)。
只有获取depth map时才用到这个scale factor,需要disparity map的值除以这个scale factor。
raster图像数据区:
图像中每个像素值有4个字节,RGB通道则是以12个字节顺序存储,图像的像素点读取顺序按照由下到上从左至右的顺序进行读取。
Middlebury 2014数据集
http://vision.middlebury.edu/stereo/data/scenes2014/#description
数据集介绍
读取Middlebury数据集中视差图生成depth map
from pathlib import Path
import numpy as np
import csv
import re
import cv2def read_calib(calib_file_path):with open(calib_file_path, 'r') as calib_file:calib = {}csv_reader = csv.reader(calib_file, delimiter='=')for attr, value in csv_reader:calib.setdefault(attr, value)return calibdef read_pfm(pfm_file_path):with open(pfm_file_path, 'rb') as pfm_file:header = pfm_file.readline().decode().rstrip()channels = 3 if header == 'PF' else 1dim_match = re.match(r'^(\d+)\s(\d+)\s$', pfm_file.readline().decode('utf-8'))if dim_match:width, height = map(int, dim_match.groups())else:raise Exception("Malformed PFM header.")scale = float(pfm_file.readline().decode().rstrip())if scale < 0:endian = '<' # littel endianscale = -scaleelse:endian = '>' # big endiandispariy = np.fromfile(pfm_file, endian + 'f')#img = np.reshape(dispariy, newshape=(height, width, channels))img = np.flipud(img).astype('uint8')#show(img, "disparity")return dispariy, [(height, width, channels), scale]def create_depth_map(pfm_file_path, calib=None):dispariy, [shape,scale] = read_pfm(pfm_file_path)if calib is None:raise Exception("Loss calibration information.")else:fx = float(calib['cam0'].split(' ')[0].lstrip('['))base_line = float(calib['baseline'])doffs = float(calib['doffs'])# scale factor is used heredepth_map = fx*base_line / (dispariy / scale + doffs)depth_map = np.reshape(depth_map, newshape=shape)depth_map = np.flipud(depth_map).astype('uint8')return depth_mapdef show(img, win_name='image'):if img is None:raise Exception("Can't display an empty image.")else:cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)cv2.imshow(win_name, img)cv2.waitKey()cv2.destroyWindow(win_name)def main():pfm_file_dir = Path(r'middlebury\2014\Adirondack-imperfect')calib_file_path = pfm_file_dir.joinpath('calib.txt')disp_left = pfm_file_dir.joinpath('disp0.pfm')# calibration informationcalib = read_calib(calib_file_path)# create depth mapdepth_map_left = create_depth_map(disp_left, calib)show(depth_map_left, "depth_map")if __name__ == '__main__':main()
结果:
PFM格式图像和读取middlebury 数据集相关推荐
- matlab读取data格式,ReadData3D 各种格式图像的读取,包括医学 效果很好 matlab 272万源代码下载- www.pudn.com...
文件名称: ReadData3D下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 51 KB 上传时间: 2017-03-29 下载次数: 0 提 供 者: ...
- MATLAB解析PFM格式图像
http://www.p-chao.com/ja/2016-09-27/matlab%E8%A7%A3%E6%9E%90pfm%E6%A0%BC%E5%BC%8F%E5%9B%BE%E5%83%8F/ ...
- 关于医疗影像的mhd和dcm格式图像的读取和坐标转换
本篇博客主要对近年来大赛(Luna16,kaggle,天池)中使用的肺部图像的读取和坐标转换进行整理,如果有错误,欢迎批评指正,谢谢. 1 介绍mhd格式的数据: 数据可以在Luna16(https: ...
- mhd格式三维图像显示_关于医疗影像的mhd和dcm格式图像的读取和坐标转换
本篇博客主要对近年来大赛(Luna16,kaggle,天池)中使用的肺部图像的读取和坐标转换进行整理,如果有错误,欢迎批评指正,谢谢. 1 介绍mhd格式的数据: 数据可以在Luna16(https: ...
- python如何读取数据集_如何读取Middlebury数据集提供的.pfm文件?
我试着用下面的代码根据描述读取文件:header = file.readline().rstrip() if header == 'PF': color = True elif header == ' ...
- MNIST手写数字数据集格式,如何读取MNIST数据集?
数据集下载地址:http://yann.lecun.com/exdb/mnist/ TRAINING SET LABEL FILE (train-labels-idx1-ubyte):[offset] ...
- 如何读取NIFTI格式图像(.nii文件)
如何读取NIFTI格式图像(.nii文件) 1 NIFTI格式图像 1.1 什么是NIFTI格式图像 1.2 为什么会出现NIFTI格式图像 2 读取NIFTI格式图像 2.1 ITK-SNAP 2. ...
- dataset中获取图像的名字_GDAL与OpenCV的图像像素读取格式互相转换
前言 任务原因,遇到了一个需要GDAL图像像素格式与OpenCV相互转换的问题,解决之后顺便记录一下. 正文 OpenCV(Open Source Computer Vision Library)是一 ...
- 用c语言读取固定大小的raw格式图像并统计灰度值
目的: 1.读取[256*256]大小的raw格式图像 2.统计灰度值 3.将结果写回result.txt 代码: 方法一 #include<stdio.h> #include<st ...
最新文章
- apache shiro jar包_只需要6个步骤,springboot集成shiro,并完成登录
- equals()方法详解
- curl请求模拟post发送json
- ExtJS学习:MVC模式案例(三)
- vs2010的sdf文件和ipch文件夹
- Pandas 处理 dummy variable
- python-字符串基础
- java开发 网关_SpringCloud系列之网关(Gateway)应用篇
- AWS codecommit 的学习记录
- 怎么在Excel中生成Latex代码——excel2latex插件
- 5教程 watchout_WATCHOUT大屏拼接融合系统
- 比Linken Sphere(林肯法球)更多更新浏览器指纹的国产防关联工具-VMLogin中文版
- 人均8万啊,腾讯豪掷21亿股票奖励员工,爱奇艺却大规模裁员,这就是差距吗?
- 对话政企CIO:融合对企业网络通信的新意义
- FPGA数字信号处理(四)Quartus FIR IP核实现
- WORD设置从开始页数算总页数
- 马尔科夫随机场Markov Random Field
- xp计算机无法远程桌面连接,XP sp3系统下远程桌面不能连接到指定计算机的解决方案...
- 拇指锁屏APP--新型手机赚钱秒到账到底靠谱不靠谱?
- 【精英会会长、TOS顾问黄智中:区块链将改变价值传递方式】GBCAX