2015-01-31 2 views
-1

Есть ли простой способ разместить растровое изображение на фоне графика Matlab, который не заполняет все пространство и сохраняет его соотношение сторон при изменении размера фигуры?Фоновое изображение для графика

ТИА

ответ

0

Я не совсем уверен, чтобы понять, что вы имеете в виду

сюжет, который не заполняет всю доступную площадь

однако следующее решение должно помочь вам решить ваша проблема (или, по крайней мере, начать работу).

В основном прочитано изображение (здесь оттенки серого) и отобразите его с помощью команды 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 

И результат:

enter image description here

Если фоновое изображение 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 изображение, придает этому:

enter image description here

Является ли это то, что вы имели в виду? Если нет, скажите мне!

+0

так что @ 0xy это отвечает на ваш вопрос? –

0
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); 
Смежные вопросы