【问题标题】:Plot images as axis labels in MATLAB在 MATLAB 中将图像绘制为轴标签
【发布时间】:2011-06-18 12:16:58
【问题描述】:

我正在使用imagesc 命令在 MATLAB 中绘制一个 7x7 像素的“图像”:

imagesc(conf_matrix, [0 1]);

这代表了一个confusion matrix,位于七个不同的对象之间。我有一个我想用作轴刻度标签的七个对象的缩略图。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 知道坐标轴的宽度/高度,以及刻度标签的间距和坐标轴范围,您可以计算刻度线的位置。然后在图像中再添加 14 个轴来绘制缩略图。这是可能的,但并不容易。
  • 想一想:以这种方式缩放像素亮度意味着计数最少和最多的混淆单元将始终显示为黑白。考虑以其他方式进行缩放可能很有用,因为这些值的分布也提供了丰富的信息。例如,如果混淆矩阵计数为 [900 40; 60 1000],这意味着与他们 [510 480; 490 520],尽管单元格的相对顺序是相同的。
  • 谢谢,这是一个很好的观点。

标签: image matlab plot


【解决方案1】:

我不知道简单的方法。决定标签的坐标区属性XtickLabel只能是字符串。

如果您想要一种不太简单的方法,您可以本着以下不完整(在不完整解决方案的意义上)代码的精神做一些事情,创建一个标签:

h = imagesc(rand(7,7));
axh = gca;
figh = gcf;
xticks = get(gca,'xtick');
yticks = get(gca,'ytick');
set(gca,'XTickLabel','');
set(gca,'YTickLabel','');
pos = get(axh,'position'); % position of current axes in parent figure

pic = imread('coins.png');
x = pos(1);
y = pos(2);
dlta = (pos(3)-pos(1)) / length(xticks); % square size in units of parant figure

% create image label
lblAx = axes('parent',figh,'position',[x+dlta/4,y-dlta/2,dlta/2,dlta/2]);
imagesc(pic,'parent',lblAx)
axis(lblAx,'off')

一个问题是标签将具有与原始图像相同的颜色图。

【讨论】:

  • 谢谢,我可以把它塑造成我想要的样子。对颜色图感到遗憾。与此同时,我使用子图拼凑了一个肮脏的解决方案,我将作为单独的答案发布。
【解决方案2】:

@Itmar Katz 提供了一个非常接近我想要做的解决方案,我已将其标记为“已接受”。与此同时,我使用子图制作了这个肮脏的解决方案,为了完整起见,我在这里给出了它。但它只适用于一定大小的输入矩阵,并且只有在图形为正方形时才能很好地显示。

conf_mat = randn(5); A = imread('peppers.png'); tick_images = {A,A,A,A,A}; n = 长度(conf_mat)+ 1; % 在左侧和顶部绘制轴标签 对于 i = 1:(n-1) 子图(n,n,i + 1); imshow(tick_images{i}); 子图(n,n,i * n + 1); imshow(tick_images{i}); 结尾 % 为混淆矩阵应该在哪里生成逻辑数组 idx = 1:(n*n); idx(1:n) = 0; idx(mod(idx, n)==1) = 0; % 绘制混淆矩阵 子图(n,n,查找(idx~=0)); imshow(conf_mat); 轴图像 颜色图(灰色)

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2017-10-09
    • 2011-10-21
    相关资源
    最近更新 更多