0

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

请在这里查看图片。

下载图片:

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

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

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

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

4

2 回答 2

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
于 2012-07-14T20:05:29.933 回答
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
于 2012-07-15T22:40:54.527 回答