首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab中融合2多幅图像

在matlab中融合2多幅图像
EN

Stack Overflow用户
提问于 2014-08-30 23:14:00
回答 3查看 5.5K关注 0票数 4

在MATLAB中,如何融合两幅以上的图像?例如,我想做imfuse所做的事情,但超过2张图片。使用两个图像,这是我的代码:

代码语言:javascript
复制
A = imread('file1.jpg');
B = imread('file2.jpg');

C = imfuse(A,B,'blend','Scaling','joint'); 

C将是AB的融合版本。我有大约50张图像要融合。我怎样才能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-31 04:38:10

您可以编写一个for循环,然后只需有一个存储所有融合结果的图像,并将该图像与所读取的新图像反复融合。因此,假设您的图像是从file1.jpg命名为file50.jpg的。你可以这样做:

代码语言:javascript
复制
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个图像全部融合在一起。

票数 4
EN

Stack Overflow用户

发布于 2014-09-01 18:03:16

imfuse'blend'方法一起对两个图像执行alpha混合。在图像上没有alpha通道的情况下,这只不过是每一对对应像素的算术平均值。因此,解释N图像融合的一种方法是简单地平均N个对应的像素,从每幅图像中取一个,得到输出图像。

假设:

  • 所有图像均为imgSize大小(例如480,640)
  • 所有图像的像素值范围相同(例如,uint8为0-255,双倍为0-1 )。

以下应该给你一些合理的东西:

代码语言:javascript
复制
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中,并且可能需要为您的图像返回正确的类型。

票数 2
EN

Stack Overflow用户

发布于 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的阿尔法是必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25587530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档