Объединить 2 изображения в одно плоское изображение

У меня есть два отдельных изображения в оттенках серого im1 (рис.1) и im2 (рис.2), каждое размером 50 на 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)

выход


person Sm1    schedule 13.02.2020    source источник


Ответы (2)


Вы также можете просто добавить их друг к другу (после их нормализации) и иметь одну цветовую карту, представляющую все это.

imagesc(I1+I2);

введите здесь описание изображения

или если вы хотите установить прозрачность в соответствии с цветом и интенсивностью, вы можете добавить

alpha color
alpha scaled 
person bla    schedule 13.02.2020
comment
Спасибо за ваш ответ, это кажется простым. Но как мне нормализовать изображения, как вы упомянули на первом шаге? - person Sm1; 18.02.2020
comment
сначала убедитесь, что I=double(I), поэтому любая операция, которую вы выполняете, не испортит информацию в изображении. Нормализация означает установку максимума на 1 с помощью I=I./max(I(:)) или деления на общую интенсивность изображения I=I./sum(I(:)). посмотри что тебе понятно... - person bla; 18.02.2020

Вы можете сделать это "вручную":

  • Используйте 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);

Результат:
введите здесь описание изображения

person Rotem    schedule 13.02.2020