Multiple Colormaps, freezeColors won't work

10 Ansichten (letzte 30 Tage)
JRJ
JRJ am 15 Jun. 2011
Hi,
I am trying to use one image as a background, and one image in the foreground with transparency. I have acomplished this, but I need to use colormap(gray) for the background and colormap(jet) for the foreground. These images are arrays of data in an unknown range.
Currently, the code works except that the background is not in grayscale.
I have tried freezeColors, and it does not work.
Thanks
hold on
imagesc(handles.bg,'Parent',movie_scrn)
colormap(gray)
hold off
colormap(jet)
hold on
tmpImg = image(handles.cmosData(:,:,frame),'Parent',movie_scrn);
alphaMap = handles.cmosData(:,:,frame) >= handles.minVisible;
set(tmpImg, 'AlphaData', alphaMap);
  2 Kommentare
Andrew Newell
Andrew Newell am 16 Jun. 2011
Have you tried contacting the author of freezeColors?
JRJ
JRJ am 16 Jun. 2011
I have not. I have actually discovered via a search that the reason freezeColors doesn't work is that I am overlaying things. freezeColors demands at least that the images be in seperate locations.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Oliver Woodford
Oliver Woodford am 16 Jun. 2011
Use real2rgb to convert your data matrices to images, and do the alpha matting in software by combining them as follows:
G = real2rgb(handles.bg, 'gray');
J = real2rgb(handles.cmosData(:,:,frame), 'jet');
A = real2rgb(handles.cmosData(:,:,frame) >= handles.minVisible, 'gray');
I = J .* A + G .* (1 - A);
image(I, 'Parent', movie_scrn);
  2 Kommentare
JRJ
JRJ am 16 Jun. 2011
This has nearly worked!!! Thanks so much!
The only problem I am having with it is the automatic scaling real2rgb is doing. Basically, on most frames the bounds on my data are small and low, so a lot of random pixels are lighting up as red. However, on the more interesting frames, those pixels drop to blue and the pixels of interest light up as red. Is there any way to get more constant bounds on this?
Thanks,
Jed
Oliver Woodford
Oliver Woodford am 16 Jun. 2011
You can specify the bounds used by real2rgb.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 16 Jun. 2011
See this previous Question for a solution as to converting the raw data to scaled RGB.
  1 Kommentar
JRJ
JRJ am 16 Jun. 2011
Ah! got it!
The real solution came down to using real2rgb for the background, and ind2rgb for the foreground.
Thanks.

Melden Sie sich an, um zu kommentieren.


Alex Taylor
Alex Taylor am 16 Jun. 2011
Hi,
The issue here is that in the MATLAB graphics system, the 'colormap' is a property of the figure, meaning that you can only display grayscale images with one colormap per figure.
The workaround is to use the MATLAB function ind2gray to convert your grayscale images to RGB images. You will then be able to display both RGB image in the same figure with your desired coloring.
  2 Kommentare
Walter Roberson
Walter Roberson am 16 Jun. 2011
ind2rgb is not appropriate for this situation, at least not by itself. JRJ has a pure data matrix that is getting converted to a plot via imagesc(), which is doing data range translation and rescaling.
Alex Taylor
Alex Taylor am 16 Jun. 2011
Walter, yes, you are right. I was focusing my attention on the "why isn't the grayscale colormap being honored" part of the question. I wasn't attempting to provide a complete solution.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Orange finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by