如何在matlab中在背景图像上绘制单独的彩色矢量?

时间:2014-11-27 09:57:19

标签: matlab

我有一个背景图像和一个矢量场,其中包含我想在背景图像上绘制的每个矢量的单独颜色信息:

% Random background image
Image = rand(100,200);
% Random colors
color1 = rand(30,30);
color2 = rand(30,30);
color3 = rand(30,30);
% Positions
x = 31:60;
y = 31:60;
[X,Y] = meshgrid(x,y);
% Random vectors
DX = 10 * rand(30,30);
DY = 20 * rand(30,30);
% The vector at (X(i,j),Y(i,j)) is supposed
% to have the RGB color [color1(i,j) color2(i,j) color3(i,j)]

% Uniformly colored vector field - works fine
imshow(Image);
hold on;
quiver(X,Y,DX,DY,'color',[0.5 0.75 1]);

% What I would like - does not work
imshow(Image);
hold on;
quiver(X(:),Y(:),DX(:),DY(:),'color',[color1(:) color2(:) color3(:)]);

简单的for循环导致背景图像的擦除,如下所示: Image gradually erased when overlayed with lines,至少对于Matlab版本R2012b(8.0.0.783)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我的代码遇到的第一个问题是

color1 = rand(30,30);
color2 = rand(30,30);
color3 = rand(30,30);
(...)
quiver(X,Y,DX,DY,'color',[color1 color2 color3]);

即使假设quiver可以采用多种颜色(下面更多颜色),您传递的最后一个参数是30x90数组。我不知道如何期待MATLAB猜测它如何分成三个30x30阵列(红色,绿色,蓝色)。通常,将颜色数据作为RGB矩阵传递的方法是为 N 点提供 N x3向量。

更重要的是,我不希望quiver能够接受多个颜色参数。 (我现在无法测试。)查看其properties page,特别是“颜色”标签,并与scatter properties'“Cdata”进行比较。

我没有看到问题的正确解决方法,因为在底部,Matlab显然无法使用相同的调用绘制不同颜色的矢量。如果以均匀的颜色绘制矢量并在它们的起始点添加scatter各种颜色就足够了,那就去吧......否则我会看一下{{3}的源代码}:它没有做你想要的,但也许它可以适应。