Объединить 2 изображения в одно плоское изображение - PullRequest
1 голос
/ 13 февраля 2020

У меня есть два отдельных изображения в оттенках серого im1 (Рис. 1) и im2 (Рис. 2), каждое размером 50 на 50, которые отображаются здесь с помощью цветовой кодировки. Когда я объединяю их вместе, используя команду cat(), а затем отображаю результат сцепленных изображений, они отображаются рядом (Рис. 3). Однако, если я создаю третье изображение путем репликации либо первого из второго изображения, а затем отображаю объединение 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)

out

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

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

imagesc(I1+I2);

enter image description here

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

alpha color
alpha scaled 
1 голос
/ 13 февраля 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);

Результат:
enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...