我有图像A,B和C.如何使用Matlab叠加这些图像以产生D?我有至少50张图片来制作它。感谢。
下载图片:
答: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 :(得分: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