Есть ли простой способ разместить растровое изображение на фоне графика Matlab, который не заполняет все пространство и сохраняет его соотношение сторон при изменении размера фигуры?Фоновое изображение для графика
ТИА
Есть ли простой способ разместить растровое изображение на фоне графика Matlab, который не заполняет все пространство и сохраняет его соотношение сторон при изменении размера фигуры?Фоновое изображение для графика
ТИА
Я не совсем уверен, чтобы понять, что вы имеете в виду
сюжет, который не заполняет всю доступную площадь
однако следующее решение должно помочь вам решить ваша проблема (или, по крайней мере, начать работу).
В основном прочитано изображение (здесь оттенки серого) и отобразите его с помощью команды imagesc
вместе с цветовой палитрой grayscale
, затем выполните команду hold on
и распечатайте данные. Обратите внимание, что вам нужно изменить направление оси x, чтобы получить правильное направление для графика.
Вот код:
clear
clc
close all
A = imread('cameraman.tif');
x = 1:10;
y = x;
figure
%// Notice the fliplr(A) to reverse the direction of the x data
imagesc([min(x(:)) max(x(:))], [min(y(:)) max(y(:))],fliplr(A));
colormap gray
%// Here reverse the direction of the x axis, otherwise the plot is
%// reversed
set(gca,'XDir','reverse')
hold on
plot(x,y,'--r')
axis off
И результат:
Если фоновое изображение RGB, вы можете использовать image
функцию: (модифицированную от ответа here): Вам нужно перевернуть данные x из изображения для каждого канала отдельно, потому что fliplr
принимает только двумерные аргументы:
DataXImage = linspace(min(x), max(x), size(A, 2));
DataYImage = linspace(min(y), max(y), size(A, 1));
%// flip dimensions for each channel
B = cat(3,fliplr(A(:,:,1)),fliplr(A(:,:,2)),fliplr(A(:,:,3)));
image(DataXImage, DataYImage, B, 'CDataMapping', 'scaled');
, который, используя peppers.png изображение, придает этому:
Является ли это то, что вы имели в виду? Если нет, скажите мне!
img = imread('myimage.png');
% set the range of the axes
% The image will be stretched to this.
min_x = 0;
max_x = 8;
min_y = 0;
max_y = 6;
% make data to plot - just a line.
x = min_x:max_x;
y = (6/8)*x;
imagesc([min_x max_x], [min_y max_y], img);
hold on;
plot(x,y);
так что @ 0xy это отвечает на ваш вопрос? –