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

如何在matlab中绘制背景图像上的单独彩色向量?,matlab,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

我有一个背景图像和一个向量场,每个向量都有一个单独的颜色信息,我想在背景图像上绘制:

% 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循环会导致背景图像的擦除,如中所述: ,至少适用于Matlab版本R2012b(8.0.0.783)


有什么想法吗?

我对您的代码的第一个问题是

color1 = rand(30,30);
color2 = rand(30,30);
color3 = rand(30,30);
(...)
quiver(X,Y,DX,DY,'color',[color1 color2 color3]);
即使假设
quivel
可以采用多种颜色(更多信息见下文),您传递的最后一个参数也是30x90数组。我不知道如何期望MATLAB猜测它是如何分解成三个30x30数组的(红色、绿色、蓝色)。通常,将颜色数据作为RGB矩阵传递的方法是为N个点提供Nx3向量

更重要的是,我不希望
quivel
能够接受多个颜色参数。(我现在无法测试。)查看其,尤其是“颜色”选项卡,并与“Cdata”的相同内容进行比较


我看不到问题的正确解决方法,因为在底部,Matlab显然无法用同一调用绘制不同颜色的向量。如果以统一的颜色绘制矢量,并在矢量的起点添加不同颜色的
散点
,对您来说就足够了,那么就这样做吧。。。否则,我会查看的源代码是:它不是做你想做的,但也许它可以被修改。

我查看了R2012b中的已知错误列表,但我看不到列出的特定行为。但是,在使用
OpenGL
渲染器时,似乎存在大量与图形相关的错误。对于这些,一个常见的解决方法似乎是使用
zbuffer
渲染器。也许值得尝试一下for循环?使用“zbuffer”(或“painters”)仍然会导致背景图像被擦除。我想知道您是否尝试过以不同的方式设置背景图像,例如,按照本文中的方式,您也可以尝试使用
刷新(gcf)刷新图形
…首先:关于串联颜色矩阵的公式,您是对的,但这只值得一提!第二:你的其他评论也是评论,没有回答-对不起…@matheburg:我是新加入社区的,很抱歉。我完全同意颜色矩阵的事情只值得一提。然而,我认为“这不能做,因为(东西)”是“我怎么能做(东西)”的一个可以接受的答案。请看@Leporello您的答案不是“因为(东西)而无法完成”,而是“我看不到(东西)的正确修复方法”。很难相信乔洛的问题没有解决办法;你唯一的论点是“因为在最底层,Matlab显然无法(填充)”——这实际上不是论点。顺便说一句:我取消了否决票,因为这对新成员来说反应过度:);另一个顺便说一句:答案(值得投票)应该是“我修改了(你的链接)来解决你的(东西)”+代码+情节