[ITK] [ITK-users] Getting info from a very big image file
Gib Bogle
g.bogle at auckland.ac.nz
Wed Dec 13 01:46:39 EST 2017
This runs, but I don't believe it, because it gives maximum R, G and B values of 16. I've looked at this tiff in ImageJ, and there is a bright image in every channel. The channel data is 12-bit, stored in 16 bits.
I'd be very grateful if somebody could point out what I'm doing wrong.
typedef itk::RGBPixel<unsigned short> PixelType;
typedef itk::Image<PixelType,2> ImageType_u16;
ImageType_u16::Pointer im_u16;
PixelType::ValueType *p_u16;
typedef itk::ImageFileReader<ImageType_u16> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(filename);
reader->Update();
im_u16 = reader->GetOutput();
int width = im_u16->GetLargestPossibleRegion().GetSize()[0];
int height = im_u16->GetLargestPossibleRegion().GetSize()[1];
int depth = im_u16->GetLargestPossibleRegion().GetSize()[2];
printf("Image dimensions: width, height: %d %d\n",width,height);
p_u16 = (unsigned short *)(im_u16->GetBufferPointer());
ImageType_u16::IndexType pixelIndex;
unsigned short rmax = 0;
unsigned short gmax = 0;
unsigned short bmax = 0;
for (int x=0; x<width; x++) {
for (int y=0; y<height; y++) {
pixelIndex[0] = y;
pixelIndex[1] = x;
PixelType val = im_u16->GetPixel(pixelIndex);
unsigned short r = val.GetRed();
unsigned short g = val.GetGreen();
unsigned short b = val.GetBlue();
rmax = std::max(r,rmax);
gmax = std::max(g,gmax);
bmax = std::max(b,bmax);
// printf("R G B: %d %d %d\n",r,g,b);
}
}
printf("max: R, G, B: %d %d %d\n",rmax,gmax,bmax);
________________________________
From: Insight-users <insight-users-bounces at itk.org> on behalf of Gib Bogle <g.bogle at auckland.ac.nz>
Sent: Wednesday, 13 December 2017 6:46 p.m.
To: Dženan Zukić
Cc: insight-users at itk.org
Subject: [FORGED] Re: [ITK-users] [ITK] Getting info from a very big image file
I just needed to put "itk::" before RGBPixel. I still don't know how to get the R, G and B channels. Are they in separate buffers?
________________________________
From: Insight-users <insight-users-bounces at itk.org> on behalf of Gib Bogle <g.bogle at auckland.ac.nz>
Sent: Wednesday, 13 December 2017 5:57 p.m.
To: Dženan Zukić
Cc: insight-users at itk.org
Subject: [FORGED] Re: [ITK-users] [ITK] Getting info from a very big image file
Hi Dzenan,
I did:
#include "itkRGBPixel.h"
typedef RGBPixel<unsigned short> PixelType;
but VS2010 tells me "Error: RGBPixel is not a template"
Cheers, Gib
________________________________
From: Dženan Zukić <dzenanz at gmail.com>
Sent: Wednesday, 13 December 2017 4:22 p.m.
To: Gib Bogle
Cc: Lowekamp, Bradley (NIH/NLM/LHC) [C]; Matt McCormick; insight-users at itk.org
Subject: Re: [ITK-users] [ITK] Getting info from a very big image file
Why don't you try reading it with:
tyepdef RGBPixel<unsigned short> PixelType;
Embedded thumbnails might be ignored by the reader, it is definitely worth a shot trying Brad's suggestion.
Regards,
Dženan
On Tue, Dec 12, 2017 at 6:36 PM, Gib Bogle <g.bogle at auckland.ac.nz<mailto:g.bogle at auckland.ac.nz>> wrote:
Thanks Brad. The situation is complicated by the fact that there are 3 channels (three colours). Tiffsplit is able to split the file into 396 127 MB TIFFs and 396 thumbnail TIFFs. Irfanview can open one of the TIFFs, and it tells me that it is 4656x4656 and 48 bitsperpixel. That is, it contains 3 16-bit images of that size. Nothing is displayed in Irfanview - I'm rather surprised that it could open it at all.
I'll try using that example, but the double complication of the included thumbnails and the 3 colours might stymie it.
Cheers, Gib
________________________________________
From: Lowekamp, Bradley (NIH/NLM/LHC) [C] <blowekamp at mail.nih.gov<mailto:blowekamp at mail.nih.gov>>
Sent: Wednesday, 13 December 2017 3:51 a.m.
To: Matt McCormick; Gib Bogle
Cc: insight-users at itk.org<mailto:insight-users at itk.org>
Subject: Re: [ITK] [ITK-users] Getting info from a very big image file
Gib,
I have not tested this, but the LSMImageIO is derived from the TIFFImageIO, and LSMImageIO::Read does just call TIFFImageIO. So the chances are very good that it supports streamed reading.
I updated the TIFFImageIO to support stream reading of the individual pages in the TIFF stack some time ago.
You may find the following example useful to determining if the functionality is there:
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/IO/ImageReadExtractWrite.cxx
You can see the usage of "UpdateOutputInformation" followed by the ExtractImageFilter, this can be a very powerful and efficient pattern for working with large images. The ExtractImageFilter can be used to create a 3D to 2D image from it's input volume.
Brad
On 12/11/17, 10:56 PM, "Matt McCormick" <matt.mccormick at kitware.com<mailto:matt.mccormick at kitware.com>> wrote:
Hi Gib,
Call
reader->UpdateOutputInformation();
instead of
reader->Update();
to get the LargestPossibleRegion populated without loading the pixel buffer.
The image IO has to support streaming to read in only a
RequestedRegion -- unfortunately, I do not think the LSMImageIO
supports this at this time.
HTH,
Matt
On Mon, Dec 11, 2017 at 10:44 PM, Gib Bogle <g.bogle at auckland.ac.nz<mailto:g.bogle at auckland.ac.nz>> wrote:
> Hello,
>
>
> I am wanting to work with a 50 GB LSM file (3D). The first step is to be
> able to get the image info: width, height and depth. I have code that works
> on a small LSM file
>
>
> im_u16 = reader->GetOutput();
> width = im_u16->GetLargestPossibleRegion().GetSize()[0];
> height = im_u16->GetLargestPossibleRegion().GetSize()[1];
> depth = im_u16->GetLargestPossibleRegion().GetSize()[2];
>
>
> but I see that to do this the whole image must be loaded into memory. When
> I start the program running with the big file I can see that it is going to
> exceed the host machine's 32 GB. Is there a way to get the image dimensions
> without loading the whole image? What I am hoping to do is split the file
> into 2D TIFF files - is there any way to extract a 2D slice without reading
> the whole image? Or will I be forced to run on a machine with more than 50
> GB of RAM?
>
>
> Thanks in advance for any suggestions.
>
>
> Best regards
>
> Gib
>
>
> The ITK community is transitioning from this mailing list to
> discourse.itk.org<http://discourse.itk.org>. Please join us there!
> ________________________________
> Powered by www.kitware.com<http://www.kitware.com>
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
>
The ITK community is transitioning from this mailing list to discourse.itk.org<http://discourse.itk.org>. Please join us there!
________________________________
Powered by www.kitware.com<http://www.kitware.com>
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
The ITK community is transitioning from this mailing list to discourse.itk.org<http://discourse.itk.org>. Please join us there!
________________________________________
Community mailing list
Community at itk.org<mailto:Community at itk.org>
http://public.kitware.com/mailman/listinfo/community
The ITK community is transitioning from this mailing list to discourse.itk.org<http://discourse.itk.org>. Please join us there!
________________________________
Powered by www.kitware.com<http://www.kitware.com>
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20171213/05669218/attachment.html>
-------------- next part --------------
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
More information about the Community
mailing list