Re: binary import
- To: mathgroup at smc.vnet.net
- Subject: [mg25990] Re: binary import
- From: "Mariusz Jankowski" <mjkcc at usm.maine.edu>
- Date: Wed, 15 Nov 2000 02:09:41 -0500 (EST)
- Organization: University of Southern Maine
- References: <8ug936$id7@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
The fastest method of reading binary data is ReadList. In version4 use the
following command:
strm = OpenRead["filename", DOSTextFormat->True]; (* the option is needed in
Windows only *)
data = Developer`ToPackedArray[ReadList[strm, Byte]];
Close[strm];
The new packed storage format uses 4 bytes per integer, so the ByteCount for
data is 4 * Length[data].
Next convert the 1-byte per sample data to 2-bytes per sample (assuming LSB
is first) by combining pairs of integers in data:
data16bit = ({1, 256} . # &) /@ Partition[data,2]
This operation is also reasonably fast. Of course you must also Partition
data16bit, so that you obtain a 2D array. For that you must know the column
dimension of your images.
Mariusz
--
======================================================
Mariusz Jankowski
University of Southern Maine
mjkcc at usm.maine.edu
"Bruyndonckx P." <pbruynd at vub.ac.be> wrote in message
news:8ug936$id7 at smc.vnet.net...
> I would like to use mathemtica to do some image processing. I have 2D
images stored in a file as binary 16 bit data. When I
> try to use the binaryimport, I seem to have two problems :
>
> 1) to read 100,000 binary 16 bit numbers, it takes about 255 seconds, only
392 numbers/s. Why is this so terribly slow ???
> 2) When I compare the memory in use (MemoryInUse[] command) before and
after I use the BinaryImport command, it seems that I
> need about 892,000 bytes to store these 100,000 number, ie nearly 9 bytes
per 16 bit number. Why is MAthematica so
> inefficient in storing a list of binary numbers ? Or does it use memory
for some other purpose.
>
> When I used the command ReadListBinary it takes 320 seconds to read
100,000 16 bit numbers.
>
> Does anybody have a workable solution, memory wise as well as time wise ?
>
> Thanks
>