2015-05-13 3 views
1

У меня есть график из сети линий в 3D-пространстве, и у меня есть одно изображение с объекта. Теперь я хочу поместить файл изображения на фоне моего сюжета в качестве фиксированного фона, а затем сеть должна быть построена на этом фоне. Кстати, поскольку Сеть находится в 3D-пространстве, я могу легко ее повернуть, и для меня важно также повернуть сеть на моем комбинированном графике.Как получить изображение на фоне графика в matlab

это мой код, который я написал, но он показывает мой участок отдельно! если я нарисую imshow внутри фигуры, тогда изображение будет помещено в верхнюю часть моей сети, и я вижу только одну точку в моей сети. Вот ссылка на Network и фоновое изображение из background Вот мой код: первая линия участок изображения и остальная часть кода участка моей сети линий:

Img1 = imshow('STP1.png'); 
figure('name','Distance'); 
hold on; 
labels = cellstr(num2str([1:SIFT_Length]')); 
text(SIFT_3D(:,1), SIFT_3D(:,2),SIFT_3D(:,3),labels,'FontWeight','bold','FontSize', 12,... 
'VerticalAlignment','bottom','HorizontalAlignment','right') 
title('Distances Network with colorized lines based on Uncertainty','FontWeight','bold'); 
hold on 
for k = 1:Num_Line_SIFTS 
     plot3([SIFT_3D(Line_among_2_Sifts(k,1),1),SIFT_3D(Line_among_2_Sifts(k,2),1)],... 
     [SIFT_3D(Line_among_2_Sifts(k,1),2),SIFT_3D(Line_among_2_Sifts(k,2),2)],... 
     [SIFT_3D(Line_among_2_Sifts(k,1),3),SIFT_3D(Line_among_2_Sifts(k,2),3)],... 
     'o-','Color',[RGB_0_1(k,1) RGB_0_1(k,2) RGB_0_1(k,3)],'MarkerFaceColor',[RGB_0_1(k,1) RGB_0_1(k,2) RGB_0_1(k,3)],'MarkerEdgeColor',... 
     'k', 'LineWidth',2) 
end 
hold off; 

Пожалуйста, помогите мне, как я могу решить Эта проблема.

+0

Вы пытались использовать 'imshow' после команды' hold on' и перед тем, как сделать что-либо еще? – Cecilia

+0

Я тоже проверил ваше предложение. Но это не сработает! все точки сети будут застряли в одной точке! и, как я сказал, только сеть должна быть вращаемой, и фон должен быть исправлен! –

ответ

3

Я не уверен, что я понял вашу потребность, тем не менее ...

figure('name','Distance','unit','normalized'); 

a=axes('position',[0 0 1 1]) 
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% UPDATED CODE STARTS HERE 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 
% Disable zoom 
h=zoom; 
setAllowAxesZoom(h,a,false); 
% Disable rotation 
h = rotate3d; 
setAllowAxesRotate(h,a,false) 
% 
%%%%%%%%%%%%%%%%%%%%%%%%%% 
% UPDATED CODE ENDS HERE 
%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 
hold on 
imshow('Jupiter_New_Horizons.jpg','parent',a) 

t=0:.01:2*pi; 
z=sin(t).*cos(t) 
a1=axes('position',[0.3 0.3 .5 .5]) 

plot3(cos(t),sin(t),z,'r','linewidth',3) 
grid on 
set(gca,'color','none') 

Этого скрипт генерирует следующий график:

enter image description here

Надеется, что это помогает.

+0

Ницца! Я думаю, вы поняли это правильно, и я неправильно понял вопрос haha ​​+1 –

+0

Спасибо @ Benoit_11. Ваш ответ пришел первым, я должен обновить страницу, пока я отвечаю. Об интерпретации вопроса ... ну ... посмотрим, что думает user3185893 :-) –

+0

@ il_raffa, это именно то, что мне нужно, но я думаю, что моя сеть и мое изображение не имеют одинакового размера, так как все точки моего сеть застревает в верхнем левом углу окна моего графика! Я должен увеличивать масштаб во много раз, чтобы увидеть свою сеть, и когда я увеличиваю масштаб, фон также увеличивается. фон не должен быть масштабируемым и вращающимся !!! но здесь можно масштабировать и поворачивать! можете ли вы рассказать мне, как я могу зафиксировать фон и только верхний слой с возможностью поворота и масштабирования? –

4

Что об этом:

clear 
clc 
close all 


%// Read image 
Im=flipud(imread('STP1_low.png')); 

%// Dummy surface to plot. 
Z = peaks(25); 

%// Prepare image position 
shift = 20; 
xIm=zeros(size(Z))-shift; 

hold on 
surface(xIm,Im,'FaceColor','texturemap','EdgeColor','none','CDataMapping','direct') 
surface(Z,'FaceAlpha',0.8,'LineStyle','none','FaceColor','interp'); 
axis on 
view(-35,45) 

box on 
rotate3d on 

Выход:

enter image description here

Вы можете повернуть его и изображение остается в качестве фона.

+0

Когда я пытаюсь загрузить изображение с помощью данной функции Im = flipud (imread ('peppers.png')); Matlab дает мне эту ошибку: X должна быть двумерной матрицей.! Я даже не могу загрузить файл изображения. можете ли вы взглянуть на фоновое изображение, которое я поместил в мой вопрос, и посмотреть, можете ли вы загрузить его по вашему коду? –

+0

yep, который отлично работает; Я только что отредактировал ответ. Вы уверены, что ошибка вызвана вызовом 'imread'? –

+0

не для imread, ошибка связана с flipud –

Смежные вопросы