Mapping colored image on grayscale

5 次查看(过去 30 天)
Sehrish
Sehrish 2012-7-23
I have a gray scale image of brain and a colored tumor image. i want to map the tumor colored image on the gray scale image, can i do this???
the brain image is http://imgur.com/xpjZy, while colored image is http://imgur.com/X3LNC
i have used for loop for mapping but the result is http://imgur.com/UoYBK, but this is not correct i guess, how can this be corrected
  8 个评论
abisha abisha
abisha abisha 2020-5-13
编辑:Image Analyst 2020-5-13
Did you have any code related to pancreas cancer detection or diagnosis?

请先登录,再进行评论。

回答(4 个)

Ryan
Ryan 2012-7-23
编辑:Ryan 2012-7-23
I = imread('Brain.jpg');
Tumor = imread('Tumor.jpg');
ThresholdValue = 10; % You'll want to find the best value
mask = Tumor <= ThresholdValue;
figure,imshow(I),hold on
h = imshow(Tumor);
set(h,'AlphaData',double(~mask(:,:,1)))
Output image:
  2 个评论
Sehrish
Sehrish 2012-7-24
thanks a lot it really works for all images
Ryan
Ryan 2012-7-25
编辑:Ryan 2012-7-25
Glad to help. I was playing around with it and 15 seems to be the best threshold value.
You could also use:
...
...
mask = Tumor >= ThresholdValue;
...
...
set(h,'AlphaData',double(mask(:,:,1)))

请先登录,再进行评论。


Image Analyst
Image Analyst 2012-7-23
编辑:Image Analyst 2012-7-23
Segment the image, say, by thresholding the intensity to get a binary image of where the tumor is. Then multiply it by the original image to get an image of only the tumor. Then apply a colormap with the colormap() function. Something like (untested)
binaryImage = grayImage > thresholdValue; % You decide what thresholdValue is
maskedImage = uint8(binaryImage) .* grayImage;
imshow(maskedImage, []);
colormap(autumn(256));
With this case, binary image can be more general and sophisticated than the simple thresholding I showed here.
Or, you can simply do it with a colormap, like this:
thresholdValue = 130; % gray level where the colors start.
numberOfColorValues = 256 - thresholdValue + 1;
myColorMap = gray(256);
myColorMap(thresholdValue:end, :) = flipud(autumn(numberOfColorValues));
colormap(myColorMap);
colorbar;

Matt Kindig
Matt Kindig 2012-7-23
What do you want the resulting image to look like? Do you want the brain to render as gray, with the tumor shown in the flame-like colors? If so, you can follow this general approach:
1. Convert the brain image to RGB, using ind2rgb() with the original (gray) colormap.
2. Convert the tumor image to RGB, using ind2rgb() with the color (hot?) colormap.
3. Use logical indexing to identify all parts of the tumor image that are black (zeros).
4. Replace the brain image with the tumor image for those given pixels.
  3 个评论
Sehrish
Sehrish 2012-7-23
yeah i want to replace the zero pixels of tumor image with brain image
Image Analyst
Image Analyst 2012-7-23
The second chunk of code in my answer will do that. But you need to say if the tumor can be simply be determined by intensity alone, or did you do something more to find it, like get rid of small regions, do hole filling, etc. If you didn't do anything fancy like that and it's simply based on intensity then my code will display it like you wanted. If you want to convert the colormapped image into a RGB image, then you can use ind2rgb(grayImage, myColorMap) to get the RGB image.

请先登录,再进行评论。


Walter Roberson
Walter Roberson 2012-7-23
You need scaling and alignment information, which it is not clear that you have. Is the assumption that the tumor and brain image are already scaled to the same size and are positioned at the same place in their images?
Once they are scaled and aligned, image() or imagesc() the two images into place. On the top image (the one with the tumor), set the AlphaData to 0 for each pixel where the grayscale image is to show through.

Community Treasure Hunt

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

Start Hunting!

Translated by