Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何在Fortran程序中读取.raw文件?_Image Processing_Fortran - Fatal编程技术网

Image processing 如何在Fortran程序中读取.raw文件?

Image processing 如何在Fortran程序中读取.raw文件?,image-processing,fortran,Image Processing,Fortran,我正在用Fortran编写一个旧的有限元代码。这是大学里的一个研究项目 我有一个文件.raw,它代表一个3D图像 .raw文件中的数据存储在uint16或uint8中,整数的总数是已知的 如何在Fortran程序中将此图像读取到整数数组 类似的东西 allocate(imgarray(total_int)) call raw2array(filename,imgarray) 我目前正在使用python读取图像,并将其转换为整数向量。该向量用Fortran和文本文件读取 python中的 img

我正在用Fortran编写一个旧的有限元代码。这是大学里的一个研究项目

我有一个文件.raw,它代表一个3D图像

.raw文件中的数据存储在uint16或uint8中,整数的总数是已知的

如何在Fortran程序中将此图像读取到整数数组

类似的东西

allocate(imgarray(total_int))
call raw2array(filename,imgarray)
我目前正在使用python读取图像,并将其转换为整数向量。该向量用Fortran和文本文件读取

python中的

imgarray = np.fromfile(fid, dtype=np.uint16,count=total_int,sep='')
但是,当读取超过1000x1000x1000个整数的文件时,过程会变得非常缓慢

该项目要求image.raw在Fortran程序中作为完成向量的子程序以二进制形式读取


如何读取此图像(二进制)并使用Fortran中的子例程将其转换为整数向量?

如果您的编译器支持16位整数和流访问,它就这么简单

   use iso_fortran_env
   implicit none
   integer(kind=INT16), allocatable::m(:,:,:)
   allocate(m(1000,1000,1000))
   open(100,file='test.raw',access='stream')
   read(100)m
   end

根据@agentp给出的解决方案,.raw文件在数组中读取为:

use iso_fortran_env
implicit none
integer(kind=INT16), allocatable::m(:)
integer total_int
total_int = 1000*1000*1000
allocate(m(total_int))
open(100,file='test.raw',access='stream')
read(100)m

但是,当读取超过1000x1000x1000个整数的文件时,过程会变得非常缓慢。我真的怀疑用Fortran读起来会更快。你试过什么吗?你有什么我们可以建立的代码吗?文件是Fortran顺序还是C顺序?阅读Fortran中的流访问。@VladimirF实际上代码是在F90中,我错了,因为我看到程序是用gfortran编译的,并与mpi77链接。代码的非并行版本在F77中。请勿发布任何链接,请在此处显示相关代码。你做了什么,或者你只是想从我们这里得到一个完整的解决方案?您知道在Fortran中通常如何从外部文件读取数据吗?您需要在这里访问流。然后它可以是单个
read
语句。试着自己做点什么。以流形式打开,然后执行
读取(单位)imgarray
。报告发生的事情。@VladimirF谢谢你的指导。我不想从任何人那里得到一个完整的解决方案。感谢这项工作,通过一些小的更改,我可以读取.raw文件。这两种情况下的性能非常相似。对于128x128x128(uint16)的映像,python和fortran都花了1秒。对于288x288x300(uint8)python的映像,需要12秒,而fortran 11需要12秒。