2016-02-11 102 views
-1

我想在Matlab中讀取一個原始文件(float64,這是一個變形矢量字段,即圖像註冊的結果),與3個尺寸304 x 224 x 52.如何保存修改的3D原始文件?

然後,我想要更改所有值除以10即可。

之後,我想將修改後的文件再次保存爲具有相同規格的原始文件。我寫了一個代碼,但我無法保存文件。我想以原始格式再次保存它。我想我可能會錯過一些東西。我是Matlab的初學者,所以我會感謝您的幫助和耐心。謝謝。

fid = fopen('I:\PatientData\patient1\out_2_to_1_us\deformationField_test.raw') dvf =  fread(fid); 

length(div) 
div = (0.1) * ones(42491904,1); dvf_cm = dvf.* div; 

count = fwrite(fid,dvf_cm,'float64'); 
fclose(fid); 
+0

什麼是錯的代碼?你有錯誤信息嗎? – Daniel

+0

它看起來像你正試圖寫入你讀取數據的同一個文件。這是你的意圖嗎? – mhopeng

+0

第一個問題是我無法將我的文件轉換爲矩陣形式,因爲它是一個3D矩陣。 – Hoda

回答

0

您需要打開在讀/寫模式下的文件和倒帶看完後:

fid = fopen('I:\PatientData\patient1\out_2_to_1_us\deformationField_test.raw', 'r+'); 
data = fread(fid, Inf, 'float64')/10; 
     frewind(fid); 
count = fwrite(fid, data, 'float64'); 
     fclose(fid); 
+0

我使用「重塑」將輸入文件更改爲3D矩陣。它是否正確? – Hoda

+0

@Hoda內存中數據的形狀對數據寫入文件的方式沒有影響。不管你給出的數據是什麼形狀,它都會以線性索引順序編寫。線性索引與數據的形狀無關(即下標索引)。 http://www.mathworks.com/help/matlab/math/matrix-indexing.html我寫的代碼應該適用於您在問題中陳述的目的。 – 2016-02-12 16:32:07

+0

非常感謝,這真的很有幫助。我感謝您的幫助。 – Hoda

相關問題