Подтвердить что ты не робот

Как я могу построить изображение (.jpg) в MATLAB как в 2-D, так и в 3-D?

У меня есть 2-D график рассеяния, и в начале координат я хочу отобразить изображение (не красочный квадрат, а фактическое изображение). Есть ли способ сделать это?

Я также буду строить трехмерную сферу, в которой я хотел бы, чтобы изображение также отображалось в начале координат.

4b9b3361

Ответ 1

Для двухмерных графиков...

Функция IMAGE - это то, что вы ищете. Вот пример:

img = imread('peppers.png');             %# Load a sample image
scatter(rand(1,20)-0.5,rand(1,20)-0.5);  %# Plot some random data
hold on;                                 %# Add to the plot
image([-0.1 0.1],[0.1 -0.1],img);        %# Plot the image

alt text


Для трехмерных графиков...

Функция IMAGE больше не подходит, так как изображение не будет отображаться, если только ось не просматривается непосредственно (т.е. из вдоль положительной оси z). В этом случае вам нужно будет создать поверхность в 3-D, используя функцию SURF, и текстура отобразит на ней изображение. Вот пример:

[xSphere,ySphere,zSphere] = sphere(16);          %# Points on a sphere
scatter3(xSphere(:),ySphere(:),zSphere(:),'.');  %# Plot the points
axis equal;   %# Make the axes scales match
hold on;      %# Add to the plot
xlabel('x');
ylabel('y');
zlabel('z');
img = imread('peppers.png');     %# Load a sample image
xImage = [-0.5 0.5; -0.5 0.5];   %# The x data for the image corners
yImage = [0 0; 0 0];             %# The y data for the image corners
zImage = [0.5 0.5; -0.5 -0.5];   %# The z data for the image corners
surf(xImage,yImage,zImage,...    %# Plot the surface
     'CData',img,...
     'FaceColor','texturemap');

alt text

Обратите внимание, что эта поверхность фиксирована в пространстве, поэтому изображение не всегда будет непосредственно обращено к камере при вращении осей. Если вы хотите, чтобы текстурированная поверхность автоматически вращалась так, что она всегда перпендикулярна лучу зрения камеры, это гораздо более сложный процесс.