[ome-users] Read write large tiff
Erwan Bocher
erwan.bocher at ec-nantes.fr
Tue May 29 20:11:23 BST 2012
Hi Melissa,
Thanks a lot for your answer.
> Hi Erwan,
>
>> I want to read, process and write a big tiff with the bioformats
>> lib. I use the code proposed on the official wiki that permits to
>> read data block by block. The code runs without any errors but the
>> result image
>> is wrong. Pixel values are shifted and the total size of the image
>> is huge (original image 93 mo : result image more than 600 mo).
> What are the dimensions of the original file (X, Y, and number of
> planes)? Is the original image data compressed?
Below all metadata from the source image :
BitsPerPixel = 8
DimensionOrder = XYCZT
IsInterleaved = false
IsRGB = false
LittleEndian = true
PixelType = uint8
Series 0 Name = Nantes_93_lambert2.tif
SizeC = 3
SizeT = 1
SizeX = 4957
SizeY = 4213
SizeZ = 1
BitsPerSample = 8
Compression = Uncompressed
ImageLength = 4213
ImageWidth = 4957
Location = /tmp/Nantes_93_lambert2.tif
MetaDataPhotometricInterpretation = RGB
MetaMorph = no
NumberOfChannels = 3
PhotometricInterpretation = RGB
PlanarConfiguration = Planar
SampleFormat = unsigned integer
SamplesPerPixel = 3
------------------------
Title: Nantes_93_lambert2.tif
Width: 4957 pixels
Height: 4213 pixels
Depth: 1 pixels
Voxel size: 1x1x1 pixel
ID: -4
Coordinate origin: 0,0,0
Bits per pixel: 8 (grayscale LUT)
Display range: 0-255
Image: 1/3 (c:1/3 - Nantes_93_lambert2)
Channels: 3
Composite mode: "composite"
No Threshold
Magnification: 0.16666666666666666
Uncalibrated
Path: /tmp/Nantes_93_lambert2.tif
No Selection
>
> I would guess that the tile dimensions in the code need to be adjusted
> (as alluded to on the wiki page), but without knowing the specifics of
> the input file it's a little tricky to say for sure.
By the way I have tested with a single tile in x (equals to the image
width) and a tile heigth equals to 16 in y.
The result is the same : very large image, pixels shifted...
Erwan
>
> Regards,
> -Melissa
>
> On Tue, May 29, 2012 at 01:30:34PM +0200, Erwan Bocher wrote:
>> Dear,
>>
>> I want to read, process and write a big tiff with the bioformats
>> lib. I use the code proposed on the official wiki that permits to
>> read data block by block. The code runs without any errors but the
>> result image
>> is wrong. Pixel values are shifted and the total size of the image
>> is huge (original image 93 mo : result image more than 600 mo).
>>
>> Thanks for any advice you could give!
>>
>> Greetings.
>>
>>
>> // create a reader that will automatically handle any
>> supported format
>> IFormatReader reader = new ImageReader();
>> // tell the reader where to store the metadata from
>> the dataset
>> reader.setMetadataStore(MetadataTools.createOMEXMLMetadata());
>> // initialize the dataset
>> reader.setId(path);
>>
>> // create a writer that will automatically handle
>> any supported output format
>> IFormatWriter writer = new ImageWriter();
>> // give the writer a MetadataRetrieve object, which
>> encapsulates all of the
>> // dimension information for the dataset (among many
>> other things)
>> writer.setMetadataRetrieve(MetadataTools.asRetrieve(reader.getMetadataStore()));
>> // initialize the writer
>> writer.setId("/tmp/test.tif");
>>
>>
>> int tileWidth = 1024;
>> int tileHeight = 1024;
>>
>> System.out.println("Series " + reader.getSeriesCount());
>> for (int series = 0; series<
>> reader.getSeriesCount(); series++) {
>> reader.setSeries(series);
>> writer.setSeries(series);
>> // determine how many tiles are in each
>> image plane
>> // for simplicity, we'll assume that the
>> image width and height are multiples of 1024
>> int tileRows = reader.getSizeY() / tileHeight;
>> int tileColumns = reader.getSizeX() / tileWidth;
>>
>> for (int image = 0; image<
>> reader.getImageCount(); image++) {
>> for (int row = 0; row<
>> tileRows; row++) {
>> for (int col = 0;
>> col< tileColumns; col++) {
>> // open a tile - in
>> addition to the image index, we need to specify
>> // the (x, y)
>> coordinate of the upper left corner of the tile, along with the
>> // width and height
>> of the tile
>> byte[] tile =
>> reader.openBytes(image, col * tileWidth, row * tileHeight,
>> tileWidth, tileHeight);
>> writer.saveBytes(image, tile, col * tileWidth, row * tileHeight,
>> tileWidth, tileHeight);
>> }
>> }
>> }
>> }
>>
>> reader.close();
>> writer.close();
>> _______________________________________________
>> ome-users mailing list
>> ome-users at lists.openmicroscopy.org.uk
>> http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-users
More information about the ome-users
mailing list