2012-07-14 396 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