叠加多个图像+添加色彩图

时间:2016-06-09 21:32:51

标签: matlab image-processing matlab-figure colormap

我是一名在细胞生物学实验室工作的本科生,具有matlab的基本背景。我正在研究在培养皿上追踪细胞轨迹(时间流逝)的项目。下面是两个示例图像,我使用分水岭功能与背景分离。原始图片有霓虹绿色细胞,现在全部是黑白色/

Image 1 Image 2

假设我有20张这样的图片,我怎么可能将一张图片叠加在另一张图片上,这样它们都具有相同的透明度? 那么,我该如何添加一个代表时间的色彩图呢? (最底部的图片是色彩图的一端,最近的图片是另一端)< - 这非常具有挑战性,因为背景通常是黑色而不是NaN

2 个答案:

答案 0 :(得分:0)

我使用 imfuse 来创建合成图像,这类似于在荧光显微镜上组合多个通道。 Mathworks文档为http://www.mathworks.com/help/images/ref/imfuse.html

棘手的部分是选择颜色通道的矢量。例如,[2,1,2]表示为图像1选择B(lue),为图像2选择R(ed)和G(reen)。[2,1,2]是为色盲人士推荐的方案并给出数字在this image的左侧。使用[1,0,2]表示红色/蓝色表示右图。

fig1 = imread([basepath filesep 'fig.jpg']);     %white --> black
fig2 = imread([basepath filesep 'fig2.jpg']);

fig_overlay = imfuse(fig1, fig2,'falsecolor','Scaling','joint', 'ColorChannels', [1,0,2]);     
imshow(fig_overlay)

答案 1 :(得分:0)

基本理念

最简单的方法可能是为每个图层拍摄二进制图像,然后将图像乘以获取图像的时间(或者它的时间索引)。然后,您可以沿第三维连接所有图像(使用cat)。您可以使用max计算第三维的最大值。这将使更新的时间点看起来在#34;顶部"较旧的时间点。然后,您可以使用imagesc显示生成的展平矩阵,它将自动映射到当前图形的颜色图。通常我们会将此称为最大强度投影。

创建一些数据

首先,由于您只提供了两张图片,我将创建您为演示提供的第一张图片的一些转移版本。

% Create some pseudo-data in a cell array that represents the image over time
im = imread('http://i.imgur.com/xTurvfO.jpg');
im = im(:,:,1);

ims = cell(1, 5);

% Create some shifted versions of im1
shifts = round(linspace(0,1000,5));

for k = 1:numel(shifts)
    ims{k} = circshift(im > 100, shifts([k k]));
end

实施方法

现在我所讨论的方法的应用

% For each image, multiply the binary mask by the time
for k = 1:numel(ims)
    ims{k} = ims{k} * k;
end

% Concatenate all images along the third dimension  
IMS = cat(3, ims{:});

% Flatten by taking the maximum value along the third dimension
MIP = max(IMS, [], 3);

% Display the resulting flattened image using imagesc
imagesc(MIP);

% Create a custom colormap with black at the end to create our black background
colormap(cat(1, [0 0 0], parula))

结果

enter image description here