2
イメージに変換される読み込みボードからバイナリファイルを読み込もうとしています。 Matlabでは、すべてのバイトが正しく読み込まれ、イメージは完全に読み込まれます。しかし、Python(ver2.7はanacondaを使用しています)には、127列毎にゼロの行があります。 MATLABコードは:Pythonで別の結果バイナリファイルをロードするmatlabとpython
fid = fopen(filename);
Rawdata = fread(fid,'uint8');
Data1d = Rawdata(2:2:end).* 256+ Rawdata(1:2:end) ;
% converts Data1 to a 2D vector, adding a row of zeros to make the reshape
% possible to 3D
Data2d = [reshape(Data1d,4127,1792); zeros(1,1792)];
% reshapes again, but adding a new dimension
Data3d = reshape(Data2d(:),129,32,1792);
% selects the first 128 values in the first dimension
Data3d = Data3d(1:128,:,:);
Data2d = reshape(Data3d(:),4096,1792);
Data2d = Data2d';
CMVimage = Data2d;
fclose(fid); %VGM 2017-01-14 the file should be closed.
Iは、(np.fromfile試み)と直接同じ結果とf.read() を使ってPythonから読み出します。
import numpy as np
import matplotlib.pyplot as plt
"""
reads the input .dat file and converts it to an image
Problem: line of zeros every 127 columns in columns: 127,257,368...
curiosly, the columns are in the position of the new byte.
In matlab it works very well.
"""
def readDatFile(filename):
""" reads the binary file in python not in numpy
the data is byte type and it is converted to integer.
"""
import binascii
f = open(filename, 'rb')
data = f.read()
#dataByte = bytearray(data)
f.close()
data_out = []
for num in data:
aux = int(binascii.hexlify(num), 16)
data_out.append(aux)
#print aux
myarray = np.asarray(data_out)
return myarray
def rawConversionNew(filename):
# reads data from a binary file with tupe uint
# f = open(filename, 'rb')
# Rawdata = np.fromfile(f, dtype=np.uint8)
# f.close()
Rawdata = readDatFile(filename)
## gets the image
Data1d = 256*Rawdata[1::2] + Rawdata[0::2]
Data2d = Data1d.reshape(1792,4127)
Data2d = Data2d.T
Data2d = np.vstack([Data2d,np.zeros((1,1792),dtype=np.uint16)])
Data3d = Data2d.reshape(129,32,1792)
Data3d = Data3d[0:128,:,:]
#plt.figure()
#plt.plot(np.arange(Data3d.shape[0]),Data3d[:,1,1])
#print (Data3d[:,0,0])
CMVimage = Data3d.reshape(4096,1792).T
return CMVimage
インデックス作成は正しいですか?私は過去にPythonにmatlabを変換するのに苦労しました。そして、それは配列の索引付けまですべてでした... – DavidG
ありがとう@DavidG。実際には2つのエラーがありました。ファイルにバイナリ( "rb")とラベルを付けることはありませんでした。これはMatlabとnumpyで異なる方法で行われました。私はupvoteして回答を受け入れましたが、私は管理しませんでした。 – vicgarmu
おそらく自分で答えを書いて、私が実際にはあまりしなかったので、それを受け入れてマークするのが最も良いでしょう! – DavidG