Using Igor pro to prepare print-quality 3d images collected via confocal microscopy (need a little help)
mtaylor
I've been using Igor for years, but only recently started to make 3d images with gizmo. I'm hoping that someone here can help me finish my plot.
I am trying to make a nice 3d composite of a collage of 3d microscope images (surface maps). I have already stitched all of the images together, and as a result, I have about 17 million points, but for the sake of trying things out with limited computer resources, I have resampled it to about 4 million points. For each (x,y) point, I have a height value (z) and a color value. The height is stored in a 2d wave (matrix), the dimensions of which correspond to the x,y dimensions of the image. The color value is stored in a jpeg that I have imported to Igor, of the same dimensions. I can create a surface plot of in Igor, and color the image according to the Z value... However, I can't seem to find an option to apply my texture image (color values) to the gizmo plot.
I have done a mock-up of what the resulting image should look like using the interactive surface map imageJ plugin, where you can load a depth map, and then "load texture", to load the texture, and it makes a 3d composite image with the texture properly applied to the surface. I can't use this for print, however, because the image quality is less than ideal (the texture is severely downsampled and the geometry cannot be defined by more than 250,000 verticies)...
OK, that was a long story, but I hope there is a short answer. I watched the texture video tutorial and am frankly lost, and not really sure if it would apply to what I am trying to do.
Thanks in advance if you read this.
A.G.
WaveMetrics, Inc.
March 22, 2011 at 11:22 am - Permalink
EDIT: I should also note that I resampled the data in order to handle it quickly in igor, and can further reduce the number of points easily.
EDIT 2: It will most likely need to be 300 dpi by the time I am done processing it. Yes, it's a 17 MP image, but when rendered in 3d, things tend to go a little wonky if the applied texture isn't dense enough . imageJ limits me to a 512 x 512 grid, meaning that I'll never be able to get a production quality image out of it.
March 22, 2011 at 11:37 am - Permalink
Thanks to A.G. for taking me through the first few steps to get this going:
I am posing this here to help anyone else in a similar situation.
The jpg needs to be manipulated in order to use it as a color wave.
First, rename your imported image to a non-liberal name (no periods. My wave name was image.jpg, and didn't work at first, because of the period.) Let's say you named it "imagewave" using the data browser.
Now, convert it to 32-bit floating point:
Redimension/S imagewave
Next, assign it to a scale of 0 - 255
imagewave/=255
In the next step, ROWS is the number of rows, which you should read from your image, and COLS is the number of columns of your image. The number 4 refers to the addition of an alpha channel (the first 3 are red, blue and green)
Redimension/N=(ROWS,COLS,4)
Now, fill the alpha channel with 1's. The alpha channel can be thought of as a measure of transparency. Setting it to 1 makes the wave opaque, while setting it to 0 makes it totally transparent.
imagewave[][][3]=1
At this point, imagewave will show up as a selectable color wave in the surfaceplot dialog and all is well.
I must caution you, however, that trying to cram too much into your VRAM will result in a crash. I have 128MB of VRAM on my graphics card, and I was able to plot about 1.2 million polygons with the color wave comfortably. I was able to plot 17 million polygons, but only without the colorwave; I had to use a gradient at that point in order to avoid a crash and it was very slow to work with.
March 28, 2011 at 09:55 am - Permalink