如何在 Matlab 中对不同大小的图像进行图像运算?

How to perform image arithmetic for distinct size images in Matlab?

我正在尝试对图像执行简单的算术运算,例如求和、差、除等。

我正在做的一个例子是:

function I = difference_matlab(source1, source2)
image1 = rgb2gray(imread(source1));
image2 = rgb2gray(imread(source2));
I = mat2gray(image1 - image2);

subplot(2,2,1)
imshow(image1)
subplot(2,2,2)
imshow(image2)
subplot(2,2,3:4)
imshow(I);

end

然而,当图像大小不同时,这将失败,我如何重叠图像以便在公共区域执行操作?这类似于 拍摄较小的图像并将其安装在更大的裁剪操作区域 上。但是我不知道如何不循环每个图像矩阵。

将两张图片都裁剪成较小的一张(或者也裁剪成 X、Y 和 Z 方向的最小尺寸):

function I = difference_matlab(source1, source2)
image1 = rgb2gray(imread(source1));
image2 = rgb2gray(imread(source2));

minsize=min([size(image1); size(image2)], [], 1);

image1=image1(1:minsize(1), 1:minsize(2), 1:minsize(3));
image2=image2(1:minsize(1), 1:minsize(2), 1:minsize(3));

I = mat2gray(image1 - image2);

subplot(2,2,1)
imshow(image1)
subplot(2,2,2)
imshow(image2)
subplot(2,2,3:4)
imshow(I);

end

用零填充较小的:

function I = difference_matlab(source1, source2)
image1 = rgb2gray(imread(source1));
image2 = rgb2gray(imread(source2));

maxsize=max([size(image1); size(image2)], [], 1);

image1_padded=zeros(maxsize);
image2_padded=zeros(maxsize);

image1_padded(1:size(image1, 1), 1:size(image1, 2), 1:size(image1, 3))=image1;
image2_padded(1:size(image2, 1), 1:size(image2, 2), 1:size(image2, 3))=image2;

I = mat2gray(image1_padded - image2_padded);

subplot(2,2,1)
imshow(image1)
subplot(2,2,2)
imshow(image2)
subplot(2,2,3:4)
imshow(I);

end

不知道是否有更优雅的零填充解决方案,但我认为它应该可以解决问题![​​=12=]

选择你更喜欢的:-)