在通道维度上串联两个图像?

时间:2018-11-08 08:18:02

标签: python image matlab matrix concatenation

我必须在MATLAB或Python的通道维度中串联两个图像。

假设我们拍摄了两个灰度输入图像,其中每个图像的尺寸都为[1, 1, 28, 28](即1张图像,1个通道,28x28分辨率)。我们如何将它们连接成大小为[1, 2, 28, 28]的一张图片?

3 个答案:

答案 0 :(得分:1)

在MATLAB中,您通常会使用cat命令:

bigMat = cat(dimNo, matA, matB); % dimNo can be 1, 2, ...

但是在沿着2 nd 维进行连接的情况下,您也可以简单地使用[... ; ...]

bigMat = [matA; matB];

(相当于vertcat函数)。

如果您事先知道要连接多少个矩阵(即结果的最终大小),则应使用以下方法预先分配矩阵: bigMat = zeros(1, N, 28, 28),然后将每个图像放置在正确的位置,类似于上一个答案-

img1(:,n,:,:) = img2; % where n is 1..N, and not anything like end+1

我们不想使用end+1,因为这会导致与越来越大的数组不断重新分配并每次复制该数组的所有内容有关的性能损失。

答案 1 :(得分:0)

我不确定您要如何使用拳头尺寸,但这对您的示例有用:

img1 = randi(255,1,1,28,28); % first image
img2 = randi(255,1,1,28,28); % second image

img1(1,end+1,:,:) = img2; % stack second image on top of first image
size(img1) % [ 1 2 28 28]

答案 2 :(得分:0)

Python:对该操作使用numpy:

import numpy as np
img1, img2 = np.random.rand(1,1,28,28), np.random.rand(1,1,28,28)
img = np.concatenate([img1, img2], axis=1)

参数axis=1定义了执行操作的轴。