我正在尝试将matlab代码重写为c ++。
它读取文件并对其进行解析并将其转换为8 bit
。
但VC ++代码不适用于max_den
和min_den
的所有范围。特别是当它们之间存在细微差别时。 (我在Matlab上尝试了这个范围,它有效)
MATLAB代码:
fid = fopen(ORIGINAL_FILENAME,'r');
A = fread(fid,X*Y*Z,'int32=>int32')
D = uint8(255/double(Maximum_Density-Minimum_Density)*(A-Minimum_Density));
A = reshape(D,X,Y,Z);
fid=fopen(OUTPUT_FILENAME,'w');
fwrite(fid,A,'uint8');
fclose(fid);
VC ++ 2008代码:
int *input_buffer;
FILE *fp = fopen("file.raw","r");
FILE *new_fp = fopen("new_file.raw","w");
unsigned char *output_buffer;
output_buffer=new unsigned char[x*y*z];
input_buffer=new int[x*y*z];
fread(input_buffer,sizeof(int),x*y*z,fp);
for(int i=0;i<x*y*z;i++)
output_buffer[i]=255/(double::Parse(max_den)-double::Parse(min_den))*(input_buffer[i]-double::Parse(min_den));
fwrite(output_buffer,sizeof(unsigned char),x*y*z,new_fp);
fclose(new_fp);
fclose(fp);
例如,当实际数据范围为[-3023,3072]且max_den = -3000,min_den = 1000时,它运行良好。但是当你选择max_den = -1000,min den = 1000时,它无法正常工作 原始文件包括与mhd文件关联的3D数据。当范围不够宽时,转换后的文件会变得混乱。