2012-07-14 401 views
0

我有图像A,B和C.如何覆盖这些图像导致D使用Matlab?我至少有50张图片来制作它。谢谢。如何在Matlab中叠加多个图像?

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

+0

您是否只有图像,或者您是否有底层数据集来生成每个分子的图像(例如使用'surf')? – tmpearce 2012-07-14 21:08:12

回答

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 
+0

请在上面发布的链接中查看图片和预期结果。 – Cleiton 2012-07-14 20:08:32

+0

我很抱歉,那肯定不是你要找的。对于任何想要查看它的人,我都保留了原来的解释,并且我已经添加了我认为是解决问题的合理解决方案。请记住,我的解决方案返回的答案很大程度上取决于您指定A,B和C的顺序。 – danmcardle 2012-07-14 20:23:41

+0

确定,但我至少有50个图像要重叠... – Cleiton 2012-07-14 20:27:18

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