Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将两个图像合并为一个平面图像_Matlab_Image Processing_Matrix_Overlay_Spectrogram - Fatal编程技术网

Matlab 将两个图像合并为一个平面图像

Matlab 将两个图像合并为一个平面图像,matlab,image-processing,matrix,overlay,spectrogram,Matlab,Image Processing,Matrix,Overlay,Spectrogram,我有两个单独的灰度图像,分别是im1(图1)和im2(图2),每个图像的大小都是50 x 50,通过颜色编码显示在这里。当我使用cat()命令将它们组合在一起,然后显示连接图像的结果时,它们会并排显示(图3)。但是,如果我通过复制第二个图像中的第一个图像来创建第三个图像,然后显示这三个图像的串联,我会得到一个图像(图4)。我不明白RGB(3维)的合并是如何可能的,而转换为灰度的合并却没有发生。如何使用两个图像im1和im2合并或叠加(以法律上可能的且不并排的为准)来获得单个图像?Si如何覆盖im

我有两个单独的灰度图像,分别是
im1
(图1)和
im2
(图2),每个图像的大小都是50 x 50,通过颜色编码显示在这里。当我使用
cat()
命令将它们组合在一起,然后显示连接图像的结果时,它们会并排显示(图3)。但是,如果我通过复制第二个图像中的第一个图像来创建第三个图像,然后显示这三个图像的串联,我会得到一个图像(图4)。我不明白RGB(3维)的合并是如何可能的,而转换为灰度的合并却没有发生。如何使用两个图像
im1
im2
合并或叠加(以法律上可能的且不并排的为准)来获得单个图像?Si如何覆盖
im1
im2
以获得单个图像并通过彩色编码显示

imgGray = cat(2,im1,im2);
imshow(imgGray)
imgGray = cat(2,im1,im2);  
imshow(imgGray)
imagesc(imgGray)
im3=im1;
imgColor = cat(3,im1,im2,im3);  
imagesc(imgColor)

您可以“手动”完成:

  • 使用
    ind2rgb
    将每个灰度图像转换为带有“颜色编码”的RGB
  • 计算两个RGB图像的平均值以获得“融合图像”
下面是一个代码示例:

% Use cameraman as first image, and resized moon for the second image (just for example).
I1 = imread('cameraman.tif'); % I1 is uint8 Grayscale
I2 = imresize(imread('moon.tif'), size(I1));  % I2 is uint8 Grayscale

% Convert images to RGB using parula color map (you may choose any color map).
J1 = ind2rgb(I1, parula(256)); % J1 is double RGB (three color planes in range [0, 1]).
J2 = ind2rgb(I2, parula(256)); % J2 is double RGB (three color planes in range [0, 1]).

% Fuse J1 and J2 "manually".
alpah = 0.5; % Using alpah=0.5, gives average of J1 and J2.
K = J1*alpah + J2*(1-alpah); %K is is double RGB.
K = im2uint8(K); % Convert K to uint8 (im2uint8 multiplies pixels by 255, and convert to uint8).

%Display result
figure;imshow(K);
结果:

您也可以将它们相互添加(在规范化它们之后,)并使用一个颜色映射来表示所有颜色

imagesc(I1+I2);

或者,如果要根据可以添加的颜色和强度设置透明度

alpha color
alpha scaled 

谢谢你的回复,看起来很简单。但是,如何像您在第一步中提到的那样规范化图像?首先确保
I=double(I)
,这样您所做的任何操作都不会干扰图像中的信息。规格化是指通过
I=I./max(I(:)
或通过图像的总强度
I=I./sum(I(:)
将最大值设置为1。看看什么对你有意义。。。