如何使用不同的色彩图在另一个图像上“绘制”图像?

时间:2013-03-22 16:53:25

标签: image matlab

我有两张图片,一张100x100我要用灰度绘图,另一张20x20我要用另一张色彩图绘制。后者应叠加在前者上。

这是我目前的尝试:

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

这有几个问题:

  1. 我无法更改较小图像的偏移量。 (它们总是共享左上角的像素。)
  2. 他们有相同的色彩映射。 (第二个colormap会更改所有像素的颜色。)
  3. 像素值在合成图像上被标准化,因此如果第二图像引入新的极值,则第一图像改变。这两个图像的缩放应该是分开的。
  4. 我该如何解决这个问题?

    我想要一个与此类似的效果,除了我的彩色叠加层是矩形而不是褶皱:

    enter image description here

1 个答案:

答案 0 :(得分:4)

只需更改它,以便为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);