Image 如何在Matlab中叠加多幅图像?
我有图像A、B和C。如何使用Matlab将这些图像叠加成D?我至少有50张照片要拍。谢谢 下载图片: 答:Image 如何在Matlab中叠加多幅图像?,image,matlab,image-processing,overlay,Image,Matlab,Image Processing,Overlay,我有图像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:/
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
要将图像一起淡入淡出,请执行以下操作:
因为matlab中的图像只是矩阵,所以可以将它们相加
D = A + B + C
当然,如果图像没有相同的尺寸,则必须将所有图像裁剪为最小的尺寸
应用这个原理越多,像素值就会越大。使用imshow(D,[])
显示图像可能是有益的,其中空矩阵参数告诉imshow
将像素值缩放到D
中包含的实际最小值和最大值
替换原始图像的更改部分:
创建一个函数组合(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
使用此组合(a,b)
功能,如下所示:
D = combine(combine(A,B),C)
或在循环中:
D = combine(images(1), images(2));
for i = 3:numImages
D = combine(D, images(i));
end
要将图像一起淡入淡出状态: 因为matlab中的图像只是矩阵,所以可以将它们相加
D = A + B + C
当然,如果图像没有相同的尺寸,则必须将所有图像裁剪为最小的尺寸
应用这个原理越多,像素值就会越大。使用imshow(D,[])
显示图像可能是有益的,其中空矩阵参数告诉imshow
将像素值缩放到D
中包含的实际最小值和最大值
替换原始图像的更改部分:
创建一个函数组合(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
使用此组合(a,b)
功能,如下所示:
D = combine(combine(A,B),C)
或在循环中:
D = combine(images(1), images(2));
for i = 3:numImages
D = combine(D, images(i));
end
从这个例子来看,在我看来,请求的操作是一个以指定顺序排列的“”的小例子 像这样的东西应该可以工作-现在没有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
从这个例子来看,在我看来,请求的操作是一个以指定顺序排列的“”的小例子 像这样的东西应该可以工作-现在没有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
请在上面发布的链接中查看图片和预期结果。很抱歉,这绝对不是您想要的。我保留了我最初的解释给任何想看的人,我还补充了我认为是解决你问题的合理方法。请记住,我的解决方案返回的答案在很大程度上取决于您指定A、B和C的顺序。如果您不希望答案取决于参数的顺序,那么您需要想出一些函数来确定在
p1!=p2
。此外,如果您想将一个函数应用于50幅图像,您可以在一个循环中进行操作(见上文)。我一直在搜索所有SO和M Central以获得此答案,大约一天后,这里给出了最简单和最合理的答案。如果你在场,我会吻你!请在上面发布的链接中查看图片和预期结果。很抱歉,这绝对不是您想要的。我保留了我最初的解释给任何想看的人,我还补充了我认为是解决你问题的合理方法。请记住,我的解决方案返回的答案在很大程度上取决于您指定A、B和C的顺序。如果您不希望答案取决于参数的顺序,那么您需要想出一些函数来确定在p1!=p2
。此外,如果您想将一个函数应用于50幅图像,您可以在一个循环中进行操作(见上文)。我一直在搜索所有SO和M Central以获得此答案,大约一天后,这里给出了最简单和最合理的答案。如果你在场,我会吻你!您是否只有图像,或者您是否有生成每个分子图像的基础数据集(例如使用surf
)?您是否只有图像,或者您是否有生成每个分子图像的基础数据集(例如使用surf
)?