如何在 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=]
选择你更喜欢的:-)
我正在尝试对图像执行简单的算术运算,例如求和、差、除等。
我正在做的一个例子是:
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=]
选择你更喜欢的:-)