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 数据集相关推荐

  1. matlab读取data格式,ReadData3D 各种格式图像的读取,包括医学 效果很好 matlab 272万源代码下载- www.pudn.com...

    文件名称: ReadData3D下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 51 KB 上传时间: 2017-03-29 下载次数: 0 提 供 者: ...

  2. 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/ ...

  3. 关于医疗影像的mhd和dcm格式图像的读取和坐标转换

    本篇博客主要对近年来大赛(Luna16,kaggle,天池)中使用的肺部图像的读取和坐标转换进行整理,如果有错误,欢迎批评指正,谢谢. 1 介绍mhd格式的数据: 数据可以在Luna16(https: ...

  4. mhd格式三维图像显示_关于医疗影像的mhd和dcm格式图像的读取和坐标转换

    本篇博客主要对近年来大赛(Luna16,kaggle,天池)中使用的肺部图像的读取和坐标转换进行整理,如果有错误,欢迎批评指正,谢谢. 1 介绍mhd格式的数据: 数据可以在Luna16(https: ...

  5. python如何读取数据集_如何读取Middlebury数据集提供的.pfm文件?

    我试着用下面的代码根据描述读取文件:header = file.readline().rstrip() if header == 'PF': color = True elif header == ' ...

  6. MNIST手写数字数据集格式,如何读取MNIST数据集?

    数据集下载地址:http://yann.lecun.com/exdb/mnist/ TRAINING SET LABEL FILE (train-labels-idx1-ubyte):[offset] ...

  7. 如何读取NIFTI格式图像(.nii文件)

    如何读取NIFTI格式图像(.nii文件) 1 NIFTI格式图像 1.1 什么是NIFTI格式图像 1.2 为什么会出现NIFTI格式图像 2 读取NIFTI格式图像 2.1 ITK-SNAP 2. ...

  8. dataset中获取图像的名字_GDAL与OpenCV的图像像素读取格式互相转换

    前言 任务原因,遇到了一个需要GDAL图像像素格式与OpenCV相互转换的问题,解决之后顺便记录一下. 正文 OpenCV(Open Source Computer Vision Library)是一 ...

  9. 用c语言读取固定大小的raw格式图像并统计灰度值

    目的: 1.读取[256*256]大小的raw格式图像 2.统计灰度值 3.将结果写回result.txt 代码: 方法一 #include<stdio.h> #include<st ...

最新文章

  1. apache shiro jar包_只需要6个步骤,springboot集成shiro,并完成登录
  2. equals()方法详解
  3. curl请求模拟post发送json
  4. ExtJS学习:MVC模式案例(三)
  5. vs2010的sdf文件和ipch文件夹
  6. Pandas 处理 dummy variable
  7. python-字符串基础
  8. java开发 网关_SpringCloud系列之网关(Gateway)应用篇
  9. AWS codecommit 的学习记录
  10. 怎么在Excel中生成Latex代码——excel2latex插件
  11. 5教程 watchout_WATCHOUT大屏拼接融合系统
  12. 比Linken Sphere(林肯法球)更多更新浏览器指纹的国产防关联工具-VMLogin中文版
  13. 人均8万啊,腾讯豪掷21亿股票奖励员工,爱奇艺却大规模裁员,这就是差距吗?
  14. 对话政企CIO:融合对企业网络通信的新意义
  15. FPGA数字信号处理(四)Quartus FIR IP核实现
  16. WORD设置从开始页数算总页数
  17. 马尔科夫随机场Markov Random Field
  18. xp计算机无法远程桌面连接,XP sp3系统下远程桌面不能连接到指定计算机的解决方案...
  19. 拇指锁屏APP--新型手机赚钱秒到账到底靠谱不靠谱?
  20. 【精英会会长、TOS顾问黄智中:区块链将改变价值传递方式】GBCAX

热门文章

  1. uva 672 - Gangsters(dp)
  2. SVN各种错误提示产生原因及处理方法大全
  3. Mysql 存在则修改 不存在则新增的两种实现方法
  4. 手写一个基于NIO的迷你版Tomcat
  5. 【密码学/信息安全】#3 古典密码(含代码)
  6. 天气未能成为空调市场助力,格力等空调老大或发起价格战
  7. 网络电视测试软件,2018三款智能电视屏幕检测软件,当贝市场良心推荐
  8. [重点] 字典处理(工具)
  9. Android NDK编译常见错误及解决方案
  10. 企业ERP管理软件有哪些?哪个好