2011-01-31 2 views
2

Я планировавший пиксельный «изображения» 7x7 в MATLAB, используя команду imagesc:Plot изображение в качестве меток осей в MATLAB

imagesc(conf_matrix, [0 1]); 

Это представляет confusion matrix, между семью различными объектами. У меня есть миниатюрный снимок каждого из семи объектов, которые я хотел бы использовать в качестве меток тиков. Есть простой способ сделать это?

+3

Зная ширина/высота осей, а также интервалов между метками и клещей в пределах осей, можно вычислить положение отметками. Затем вы добавляете еще 14 осей в изображение для создания миниатюр. Это возможно, но не легко. – Jonas

+1

Просто мысль: масштабирование яркости пикселей таким образом означает, что ячейки с беспорядками с наименьшим количеством отсчетов всегда будут выглядеть черно-белыми. Может быть полезно рассмотреть масштабирование каким-либо другим способом, поскольку распространение этих значений также информативно. Для isntance, если количество матриц путаницы составляет [900 40; 60 1000], это означает нечто совсем иное, чем они [510 480; 490 520], хотя относительный порядок ячеек одинаковый. – Predictor

+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') 

Одна из проблем заключается в том, что на этикетке будет одинаковая цветовая карта исходного изображения.

+0

Спасибо, я могу сформировать это в то, что я хочу, чтобы он делал. Жаль о цветовой палитре. В то же время я взломал грязное решение, используя подзаголовки, которые я выложу в виде отдельного ответа. –

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

Смежные вопросы