在MATLAB中将图像绘制为轴标签

时间:2011-01-31 10:49:47

标签: image matlab plot

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

imagesc(conf_matrix, [0 1]);

这表示七个不同对象之间的confusion matrix。我有七个对象中的每个对象的缩略图,我想用它们作为轴刻度标签。有一个简单的方法吗?

2 个答案:

答案 0 :(得分:3)

我不知道 easy 方式。确定标签的轴属性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')

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

答案 1 :(得分:3)

@Itmar Katz给出了一个非常接近我想做的解决方案,我将其标记为'已接受'。与此同时,我使用子图进行了这个肮脏的解决方案,我在这里给出了完整性。它只能用于一定大小的输入矩阵,并且只有在数字为方形时才能很好地显示。


conf_mat = randn(5);
A = imread('peppers.png');
tick_images = {A, A, A, A, A};

n = length(conf_mat) + 1;

% plotting axis labels at left and top
for i = 1:(n-1)
    subplot(n, n, i + 1); 
    imshow(tick_images{i});
    subplot(n, n, i * n + 1);
    imshow(tick_images{i});
end

% generating logical array for where the confusion matrix should be
idx = 1:(n*n);
idx(1:n) = 0;
idx(mod(idx, n)==1) = 0;

% plotting the confusion matrix
subplot(n, n, find(idx~=0));
imshow(conf_mat);
axis image
colormap(gray)

enter image description here