У меня есть два изображения: одно 100x100, которое я хочу построить в оттенках серого, и одно 20x20, которое я хочу построить, используя другую цветовую карту. Последнее должно быть совмещено с первым.

Это моя текущая попытка:

A = randn(100);
B = ones(20);
imagesc(A);
colormap(gray);
hold on;
imagesc(B);
colormap(jet);

С этим есть пара проблем:

  1. Я не могу изменить смещение меньшего изображения. (У них всегда общий верхний левый пиксель.)
  2. У них одинаковая палитра. (Второй colormap изменяет цвет всех пикселей.)
  3. Значения пикселей нормализуются по составному изображению, так что первое изображение изменяется, если второе изображение вводит новые экстремальные значения. Масштабирование двух изображений должно быть отдельным.

Как я могу это исправить?

Мне нужен эффект, подобный этому, за исключением того, что мой цветной оверлей прямоугольный, а не шаткий:

enter image description here

3
Andreas 22 Мар 2013 в 20:53

1 ответ

Лучший ответ

Просто измените его так, чтобы вы передавали полную и правильную цветовую матрицу для A (т.е. матрицу 100x100x3), а не позволяли ей решать:

A = rand(100); % Using rand not randn because image doesn't like numbers > 1
A = repmat(A, [1, 1, 3]);
B = rand(20); % Changed to rand to illustrate effect of colormap
imagesc(A);
hold on;
Bimg = imagesc(B);
colormap jet;

Чтобы установить положение изображения B внутри его родительских осей, вы можете использовать его свойства XData и YData, которые оба установлены в [1 20], когда этот код будет завершен. Первое число указывает координату самой левой / самой верхней точки изображения, а второе число - координату самой правой / самой нижней точки изображения. Изображение растянется, если оно не соответствует исходному размеру.

Примере:

xpos = get(Bimg, 'XData');
xpos = xpos + 20; % shift right a bit
set(Bimg, 'XData', xpos);
4
wakjah 22 Мар 2013 в 23:31
Спасибо! Как я могу поставить B на какое-то смещение, чтобы оно не было в углу?
 – 
Andreas
22 Мар 2013 в 21:25