如何在Matlab中叠加多个图像?

时间:2012-07-14 19:54:24

标签: image matlab image-processing overlay

我有图像A,B和C.如何使用Matlab叠加这些图像以产生D?我有至少50张图片来制作它。感谢。

Please, see images here.

下载图片:

答:https://docs.google.com/open?id=0B5AOSYBy_josQ3R3Y29VVFJVUHc

B:https://docs.google.com/open?id=0B5AOSYBy_josTVIwWUN1a085T0U

C:https://docs.google.com/open?id=0B5AOSYBy_josLVRwQ3JNYmJUUFk

D:https://docs.google.com/open?id=0B5AOSYBy_josd09TTFE2VDJIMzQ

2 个答案:

答案 0 :(得分:4)

将图像淡化:

因为matlab中的图像只是矩阵,所以可以将它们一起添加。

D = A + B + C

当然,如果图像尺寸不同,则必须将所有图像裁剪为最小图像的尺寸。

应用此原则越多,像素值就越大。使用imshow(D, [])显示图像可能是有益的,其中空矩阵参数告诉imshow将像素值缩放到D中包含的实际最小值和最大值。

要替换原始图像的已更改部分:

创建一个函数combine(a,b)

伪代码:

# create empty answer matrix
c = zeros(width(a), height(a))

# compare each pixel in a to each pixel in b
for x in 1..width
    for y in 1..height
        p1 = a(x,y)
        p2 = b(x,y)

        if (p1 != p2)
            c(x,y) = p2
        else
            c(x,y) = p1
        end
    end
end

像这样使用此combine(a,b)函数:

D = combine(combine(A,B),C)

或循环:

D = combine(images(1), images(2));
for i = 3:numImages
    D = combine(D, images(i));
end

答案 1 :(得分:0)

从这个例子来看,在我看来,所请求的操作是指定顺序的“alpha compositing”的简单案例。

这样的东西应该有效 - 现在没有matlab方便,所以这是未经测试的,但它应该是正确的或几乎是这样。

function abc = composite(a, b, c)
  m = size(a,1); n = size(a,2);
  abc = zeros(m, n, 3);
  for i=1:3
    % Vectorize the i-th channel of a, add it to the accumulator.
    ai = a(:,:,i); 
    acc = ai(:);
    % Vectorize the i-th channel of b, replace its nonzero pixels in the accumulator
    bi = b(:,:,i); 
    bi = bi(:);
    z = (bi ~= 0);
    acc(z) = bi(z);
    % Likewise for c
    ci = c(:,:,i);
    ci = ci(:);
    z = (ci ~= 0);
    acc(z) = ci(z);
    % Place the result in the i-th channel of abc
    abc(:,:,i) = reshape(acc, m, n);
 end