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

4

我有一张背景图片和一个带有每个向量的单独颜色信息的向量场,我想将其绘制在背景图片上:

% 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)是如此。

有什么想法吗?


我查看了R2012b已知的错误列表,但是没有看到这种特定的行为。然而,在使用OpenGL渲染器时似乎存在相当多的与图形相关的错误。似乎这些错误的常见解决方法是改用zbuffer渲染器。也许在for循环中尝试一下这个方法会有所帮助? - am304
使用“zbuffer”(或“painters”)仍然会导致背景图像的擦除。 - jolo
我想知道你是否尝试过以不同的方式设置背景图像,例如按照此链接中的方式进行设置:https://de.mathworks.com/matlabcentral/answers/96023-how-do-i-add-a-background-image-to-my-gui-or-figure-window - beesleep
也许你可以尝试使用 refresh(gcf) 来刷新图形... - beesleep
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
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个点提供一个Nx3向量。

更重要的是,我不希望quiver能够接受多个颜色参数。(我现在无法测试。)请参见其属性页面,特别是“颜色”选项卡,并与scatter属性的相同选项进行比较。

我无法看到问题的适当解决方法,因为在底部,Matlab 显然无法使用同一调用绘制不同颜色的向量。如果您只需要以统一颜色绘制向量并在它们的起始点添加各种颜色的 scatter,那就这么做吧...否则,我建议查看 this 的源代码:它不能做你想要的事情,但也许可以进行改编。


第一条:关于连接颜色矩阵的表述,你是正确的,但这只值得一条注释! 第二条:你的其他评论也只是评论,没有回答 - 抱歉... - matheburg
@matheburg:我是社区的新成员,对此感到抱歉。我完全同意颜色矩阵的问题只需要一条评论就可以了。然而,我认为“由于(某些原因)无法实现”是对“我该如何实现(某些事情)?”这个问题的一个可以接受的回答。请参见http://meta.stackoverflow.com/questions/261168/is-this-is-not-possible-an-acceptable-answer/。 - Leporello
@Leporello 你的回答不应该是“因为(某些原因)无法完成”,而是“我找不到一个合适的解决方案来解决(某些问题)”。很难相信对于jolo的问题没有解决方案,你唯一的论据是“由于Matlab在底层似乎不能够(处理某些事情)” - 其实这根本不是一个论点。顺便说一句:我撤销了之前的Downvote,尤其是针对一个新成员;另外,一个值得赞赏的答案会是类似于“我修改了(你的链接)以解决(某些问题)”+代码+图表。 - matheburg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,