pfm格式圖片matlab讀取和寫入


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM