關於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