0

画像A、B、Cがあります.Matlabを使用してこれらの画像を重ねてDにする方法は? 私はそれを作るために少なくとも50枚の画像を持っています。ありがとう。

こちらの画像をご覧ください。

画像をダウンロード:

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

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

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

D: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

例から判断すると、要求された操作は、指定された順序での「アルファ合成」の些細なケースのように思えます。

このようなものは動作するはずです - 今すぐ 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 に答える