Dear colleagues, I have an image which I can display in the greyscale using image. On this image, for some pixels, which I know, I want to display their activity based on a third measure. One way to do that would be to color these differently, and use an opacity measure to display the third measure. An example of what I am trying to do is at: http://www.public.iastate.edu/~maitra/papers/mrm02.pdf page 26, for instance. There are two different kinds of voxels, given by greens and red. At the low end, there is transparency on the red scale and at the upper end there is opacity in the red and the green. A simpler example involving only one kind of voxels is on page 24 of the same paper. Either way, that figure was done using Matlab, but I was wondering how do i do this using R. Any suggestions, please? Many thanks and best wishes, Ranjan
Ranjan Maitra
2007-May-19 05:05 UTC
[R] displaying intensity through opacity on an image (ONE SOLUTION)
Dear list, I did not get any response yet, but after looking around R and other things, I came up with something that works. Basically, I use the rgb() function in R [though I could also use the hsv() function] to help me with the colormap. Anyway, doing a help on rgb gives: This function creates "colors" corresponding to the given intensities (between 0 and 'max') of the red, green and blue primaries. An alpha transparency value can also be specified (0 means fully transparent and 'max' means opaque). If 'alpha' is not specified, an opaque colour is generated. The names argument may be used to provide names for the colors. The values returned by these functions can be used with a 'col=' specification in graphics functions or in 'par'. and later on..... Semi-transparent colors ('0 < alpha < 1') are supported only on a few devices: at the time of writing only on the 'pdf' and (on MacOS X) 'quartz' devices. The hsv() function has a similar point on semi-transparent colors. Ok, looks promising: I don't use a Mac, and my potential journal does not accept .pdf, only .tiff or .eps, but we are not totally lost here. So, I tried the following silly example in R:> pdf()> image( matrix(rep(1:5,5), nr = 5), col = gray(0:16/16))> image( matrix(1:25, nr = 5), col = rgb(rep(1, 15), g=0, b=0, alpha rep(1:15)/15), add = T) # red with different opacities> q()(we are out of R). And then look at the pdf file created: by default it is Rplots.pdf. OK, now we can use gimp, simply to convert this to .eps. Alternatively on linux, the command pdftops and then psto epsi on it would also work. Yippee! Isn't R wonderful?? Hope this helps: though others may have known about this before, I certainly did not know how to do this in R. Best wishes, Ranjan On Thu, 17 May 2007 19:16:18 -0500 Ranjan Maitra <maitra at iastate.edu> wrote:> Dear colleagues, > > I have an image which I can display in the greyscale using image. On this image, for some pixels, which I know, I want to display their activity based on a third measure. One way to do that would be to color these differently, and use an opacity measure to display the third measure. An example of what I am trying to do is at: > > http://www.public.iastate.edu/~maitra/papers/mrm02.pdf > > page 26, for instance. There are two different kinds of voxels, given by greens and red. At the low end, there is transparency on the red scale and at the upper end there is opacity in the red and the green. > > A simpler example involving only one kind of voxels is on page 24 of the same paper. Either way, that figure was done using Matlab, but I was wondering how do i do this using R. > > Any suggestions, please? > > Many thanks and best wishes, > Ranjan >
Ranjan Maitra
2007-May-19 13:08 UTC
[R] displaying intensity through opacity on an image (ONE SOLUTION)
On Sat, 19 May 2007 22:05:36 +1000 Jim Lemon <jim at bitwrit.com.au> wrote:> Ranjan Maitra wrote: > >... > > > > (we are out of R). > > > > And then look at the pdf file created: by default it is Rplots.pdf. > > > > OK, now we can use gimp, simply to convert this to .eps. Alternatively on linux, the command pdftops and then psto epsi on it would also work. > > > > Yippee! Isn't R wonderful?? > > > Sure is. You could probably save one step by using postscript() instead > of pdf() and get an eps file directly. The reason I didn't answer the > first time is I couldn't quite figure out how to do what you wanted. > > JimThanks, Jim! Not a problem, But will postscript() work? I thought that help file said that only pdf and MacOSX quartz would work (at the time it was written). It certainly does not work for me on the screen. Btw, I made an error in writing the previous e-mail: the command to convert to .eps from .ps is ps2epsi. Many thanks and best wishes, Ranjan