在MATLAB中,如何融合两幅以上的图像?例如,我想做imfuse所做的事情,但超过2张图片。使用两个图像,这是我的代码:
A = imread('file1.jpg');
B = imread('file2.jpg');
C = imfuse(A,B,'blend','Scaling','joint'); C将是A和B的融合版本。我有大约50张图像要融合。我怎样才能做到这一点?
发布于 2014-08-31 04:38:10
您可以编写一个for循环,然后只需有一个存储所有融合结果的图像,并将该图像与所读取的新图像反复融合。因此,假设您的图像是从file1.jpg命名为file50.jpg的。你可以这样做:
A = imread('file1.jpg');
for idx = 2 : 50
B = imread(['file' num2str(idx) '.jpg']); %// Read in the next image
A = imfuse(A, B, 'blend', 'Scaling', 'joint'); %// Fuse and store into A
end上面的代码将做的是,它将反复读取下一个图像,并将其与存储在A中的图像融合。在每次迭代时,它将采用A中当前的内容,将其与新图像融合,然后将其存储在A中。这样,当我们继续阅读图像的时候,我们会继续在以前融合的图像之上融合新的图像。在这个for循环完成后,您将有50个图像全部融合在一起。
发布于 2014-09-01 18:03:16
imfuse与'blend'方法一起对两个图像执行alpha混合。在图像上没有alpha通道的情况下,这只不过是每一对对应像素的算术平均值。因此,解释N图像融合的一种方法是简单地平均N个对应的像素,从每幅图像中取一个,得到输出图像。
假设:
imgSize大小(例如480,640)以下应该给你一些合理的东西:
numImages = 50;
A = zeros(imgSize,'double');
for idx = 1:numImages
% Borrowing rayryeng's nice filename construction
B = imread(['file' num2str(idx) '.jpg']);
A = A + double(B);
end
A = A/numImages;结果将出现在循环后具有double类型的数组double中,并且可能需要为您的图像返回正确的类型。
发布于 2018-02-13 11:15:59
rayryeng的解决方案:你想要做的是在每一步增加alpha值,与图像对已经存储的图像的贡献成比例。例如:
将1个图像添加到现有的图像中,您将希望alpha值为0.5,这样它们是相等的。
现在将一个图像添加到现有的2个映像中,它应该对图像贡献33%,因此它的alpha值为0.33。第四幅图像应贡献25% (Alpha=0.25)等。
结果遵循x^-1趋势。所以在第20张图像中,1/20 = 0.05,一个0.0 5的阿尔法是必要的。
https://stackoverflow.com/questions/25587530
复制相似问题