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/

 

        关于pfm格式,从来没有官方权威的定义,但是常常在一些场合用到,如生物医学成像,红外成像等,尤其是其浮点方式的存储的位图使得其在科研和学习场合应用都很方便,Middlebury数据库中的视差图像就是以pfm格式进行存储的。

一、PMF格式

        PMF格式主要有两部分组成:头、元数据。

头有三行:

        第一行,标识灰度、彩色的头,PF代表彩色三通道,Pf代表灰度单通道。

        第二行,标识图像大大小,行-列。

        第三行,标识数,正数标识大端存储,负数标识小端存储,其绝对值为scale。

元数据:

        就是紧密排列的浮点数,每个四字节,总体来数,就是和bmp位图很像。

二、PMF格式文件的查看

        推荐一款工具cvkit,非常好用,还可以直接处理Middleburry双目图像生成立体图

三、Matlab读写pmf文件

function D = pfmread(filename_pfm)
 
fid = fopen(filename_pfm);
 
fscanf(fid,'%c',[1,3]);
cols = fscanf(fid,'%f',1);
rows = fscanf(fid,'%f',1);
fscanf(fid,'%f',1);
fscanf(fid,'%c',1);
D = fread(fid,[cols,rows],'single');
D(D == Inf) = 0;
D = rot90(D);
fclose(fid);
 
function pfmwrite(D, filename)
% assert(size(D, 3) == 1 & (isa(D, 'single') ));
 
[rows, cols] = size(D);
scale = -1.0/ max(max(D));
fid = fopen(filename, 'wb');
 
fprintf(fid, 'Pf\n');
fprintf(fid, '%d %d\n', cols, rows);
fprintf(fid, '%f\n', scale);
%fscanf(fid, '%c', 1);
 
fwrite(fid, D(end:-1:1, :)', 'single');
fclose(fid);
end

  

转载于:https://www.cnblogs.com/LewisLEO/p/10513021.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值