首页 > 解决方案 > 在 matlab 上创建一个适合使用 viscircle 绘制的圆圈颜色的颜色条

问题描述

我在一个序列的图像上检测到一些对象。ik对于我保存的每一帧:

    IMG(ik,:)={centers, radii, metric, ik};

其中centers是一个* 2 数组,其中包含我检测到的 n 个圆的 2D 坐标,radii是值或其各自的半径,metrics提供有关此检测的“质量”的信息。

我想在一张图像(颜色图是“灰色”)上一次绘制所有这些圆圈,这些圆圈的颜色对应于时间步长(即 的值ik)。为此,我执行以下操作:

    figure(2001)
    imagesc(averageIMG)
    axis equal
    colormap(gray)
    hold on
    cmap=jet(imgend-imgstart+1);
    for ik = 1:length(IMG)
        centers = IMG{ik,1};
        radii   = IMG{ik,2};
        viscircles(centers,radii,'Color',cmap(ik,:));
        hold on
    end

如何绘制与圆圈颜色相对应的颜色条(带有喷射颜色图)作为时间步长的图像ik

注意:我需要将用作该图背景的图像的颜色图保持为“灰色”。

谢谢您的帮助!

标签: matlabplotmatlab-figurecolorbarcolormap

解决方案


老实说,这很难。您想要的是两个颜色条,我不确定您是要绘制两者还是只绘制其中一个。现在您可以做的是在更改颜色图之前绘制颜色条并获得限制

hcb=colorbar;
Limsgray=hcb.Limits; %I'm doing this because it's the easiest way to get the max value of the image if you don't know it. if do know the max value you don't necessarily have to do this part

然后将“Limsgray”的最大值添加到所有圆圈的值中,并将颜色栏限制的第二个(最大值)设置为“圆圈的最大值+图像的最大值”。
您还必须附加颜色图,以便:

cg=colormap(gray);
cj=jet(imgend-imgstart+1);
cmap=[cg;cj];

然后,您必须添加自定义标签和刻度,您可以使用

 hcb.TickLabels=[]; %removes tick labels if there's no text
hcb.Ticks=[]; %removes ticks if there are no numbers, so add your own

您还可以通过在灰色和喷射之间添加像白色这样的颜色来在颜色条之间添加一些间距。如果您只想显示 1,您只需通过调整限制来更改范围,我建议先绘制圆圈然后附加灰色(但这是我的意见)。

如果你觉得它太费力或什么的,你可以试试这个文件,但我认为改变它更容易。 交易所的彩条文件


推荐阅读