MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\ Image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление книги \ К предыдущему разделу \ К следующему разделу

Визуализация объектов

Построение объектов со свойствами прозрачности

Довольно часто существует необходимость визуализировать не только внешнюю, но и внутреннюю часть объекта. Для этого при визуализации объектов используют свойство прозрачности. Рассмотрим пример визуализации некоторой трехмерной фигуры.

[x y z v]=flow;
p=patch(isosurface(x,y,z,v,-3));
isonormals(x,y,z,v,p);
set(p,'facecolor','red','edgecolor','none');
daspect([1 1 1]);
view(3); axis tight; grid on;
camlight;lighting gouraud;

Из рисунка видно, что представленная фигура абсолютно не прозрачна. Степень прозрачности можно задавать с помощью функции alpha.

При alpha=0.8 изображение будет такое

 

При alpha=0.5 изображение будет такое

 

При alpha=0.2 изображение будет такое

Из представленных изображений видно, что при уменьшении параметра alpha от 1 до 0, уровень прозрачности изменяется от полного отсутствия до абсолютной прозрачности.

Построение закрашенных многоугольников

Для построения закрашенных многоугольников может применяться объект patch.

t=0:pi/3:2*pi;
a=t(1:length(t)-1);
patch(sin(a),cos(a),1:length(a),'Facecolor','interp');
colormap cool; axis equal;

В общем случае, объект patch может использоваться для построения произвольного многоугольника:

patch(x,y,z,colordata),

где x,y и z – массивы координат вершин многоугольника; colordata – информация о цвете.

Приведем еще один пример построения закрашенного многоугольника.

x=[-1 -1 1 1];y=[-1 1 1 -1]; % вершины многоугольника
z=[1:4];
patch(x,y,z,'Facecolor','interp');
colormap cool; axis equal;

Визуализация срезов черепной коробки человека

Система Matlab располагает средствами визуализации срезов черепной коробки человека с использованием изображений, полученных методом магнитного резонанса.

Рассмотрим два способа визуализации.

Первый способ.

load mri;
D=squeeze(D);
[N M k]=size(D);
for i=1:k;
figure,image(D(:,:,i));
axis image;
colormap(map);
end;

Второй способ.

phandles=contourslice(D,[],[],[1,12,19,27],8);
view(3); axis tight;daspect([1,1,.4]);
set(phandles,'LineWidth',2);

Построение реалистического изображения черепной коробки

В системе Matlab существует возможность визуализации не только срезов, но и реалистического изображения черепной коробки.

load mri; 
D=squeeze(D);
Ds=smooth3(D);
hiso=patch(isosurface(Ds,5),'FaceColor',[1,.75,.65],'Edgecolor','none');
hcap=patch(isocaps(D,5),'FaceColor','interp','Edgecolor','none');
colormap(map);view(45,30);axis tight; daspect([1,2,.4])
lightangle(45,30); set(gcf,'Renderer','zbuffer');
lighting phong; isonormals (Ds,hiso);
set(hcap, 'AmbientStrength',.6)
set(hiso,'SpecularColorReflectance',0,'SpecularExponent',50);

Визуализация фрагмента объекта

Также в системе Matlab существует возможность визуализации части трехмерного объекта. Продемонстрируем это на примере визуализации черепной коробки.

load mri; 
D=squeeze(D);
[x,y,z,D]=subvolume(D,[60,80,nan,80,nan,nan]);
p1=patch(isosurface(x,y,z,D,5),'FaceColor','red','Edgecolor','none');
isonormals(x,y,z,D,p1);
p2=patch(isocaps(x,y,z,D,5),'FaceColor','interp','Edgecolor','none');
view(3); axis tight; daspect([1,1,.4]);colormap(gray(100))
camlight right;camlight left;lighting gouraud

Изменяя параметры строки

[x,y,z,D]=subvolume(D,[30,80,nan,80,nan,nan]);

можно визуализировать произвольную часть черепной коробки.

Пространственная визуализация струи

Покажем пример пространственной визуализации струи жидких или газообразных веществ.

[x,y,z,v]=flow;
xmin=min(x(:));ymin=min(y(:));zmin=min(z(:));
xmax=max(x(:));ymax=max(y(:));zmax=max(z(:));
hslice=surf(linspace(xmin,xmax,100),linspace(ymin,ymax,100),zeros(100));
rotate(hslice,[-1,0,0],-45);
xd=get(hslice,'XData');yd=get(hslice,'YData');zd=get(hslice,'ZData');
delete(hslice);

h=slice(x,y,z,v,xd,yd,zd);
set(h,'FaceColor','interp','DiffuseStrength',.8)
hold on;
hx=slice(x,y,z,v,xmax,[],[]);
set(hx,'FaceColor','interp','EdgeColor','none')
hy=slice(x,y,z,v,[],ymax,[]);
set(hy,'FaceColor','interp','EdgeColor','none')
hz=slice(x,y,z,v,[],[],zmin);
set(hz,'FaceColor','interp','EdgeColor','none')
daspect([1,1,1]);axis tight;box on
view(-38.5,16);camzoom(1.4);camproj perspective
lightangle(-45,45);colormap(jet(24));
set(gcf,'Renderer','zbuffer');colormap(flipud(jet(24)));
caxis([-5,2.4832]);colorbar('horiz');

Визуализация электрических разрядов

Приведем пример визуализации развития электрического разряда.

load wind;
xmin=min(x(:));
xmax=max(x(:));ymax=max(y(:));zmin=min(z(:));
wind_speed=sqrt(u.^2+v.^2+w.^2);
hsurfaces=slice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin);
set(hsurfaces,'FaceColor','interp','EdgeColor','none');
hcont=contourslice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin);
[sx,sy,sz]=meshgrid(80,20:10:50,0:5:15);
hlines=streamline(x,y,z,u,v,w,sx,sy,sz);
set(hlines,'LineWidth',2,'Color','r');
view(3); daspect([2,2,1]); axis tight

Визуализация вихрей

Рассмотрим два примера визуализации вихрей.

Пример 1.

load wind;[sx,sy,sz]=meshgrid(100,20:2:50,5);
verts=stream3(x,y,z,u,v,w,sx,sy,sz);
sl=streamline(verts);
view(-10.5,18);daspect([2 2 0.125]); axis tight; box on;
iverts =interpstreamspeed(x,y,z,u,v,w,verts,0.05);
set(gca,'drawmode','fast'); streamparticles(iverts,15,'Animate',10,'ParticleAlignment','on',...
    'MarkerEdgeColor','none','MarkerFaceColor','red','Marker','o');

Пример 2.

load wind;[sx,sy,sz]=meshgrid(80,20:1:55,5);
verts=stream3(x,y,z,u,v,w,sx,sy,sz);
sl=streamline(verts);
iverts=interpst
reamspeed(x,y,z,u,v,w,verts,.025);
axis tight; view(30,30); daspect([1 1 .125]);
camproj perspective; camva(8); set(gca,'DrawMode','fast');
box on;
streamparticles(iverts,35,'animate',10,'ParticleAlignment','on');

Визуализация струй с помощью конусов

Продемонстрируем один из примеров исследования движения газовых или жидкостных струй.

load wind;
wind_speed=sqrt(u.^2+v.^2+w.^2);
hiso=patch(isosurface(x,y,z,wind_speed,40));
isonormals(x,y,z,wind_speed,hiso);
set(hiso,'FaceColor','red','EdgeColor','none');
hcap=patch(isocaps(x,y,z,wind_speed,40),'FaceColor','interp','EdgeColor','none');
colormap hsv; daspect([1 1 1]);
[f verts]=reducepatch(isosurface(x,y,z,wind_speed,30),0.07);
h1=coneplot(x,y,z,u,v,w,verts(:,1),verts(:,2),verts(:,3),3);
set(h1,'FaceColor','blue','EdgeColor','none');
xrange=linspace(min(x(:)),max(x(:)),10);
yrange=linspace(min(y(:)),max(y(:)),10);
zrange=3:4:15;
[cx,cy,cz]=meshgrid(xrange,yrange,zrange);
h2=coneplot(x,y,z,u,v,w,cx,cy,cz,2);
set(h2,'FaceColor','green','EdgeColor','none');
axis tight; box on;camproj perspective;
camzoom(1.25);view(65,45);
camlight(-45,45);set(gcf,'Renderer','zbuffer');
lighting phong;set(hcap,'AmbientStrength',.6);

Литература

  1. Дьяконов В.П. MATLAB 6.5 SP1/7/7 SP1+Simulink 5/6. Работа с изображениями и видеопотоками. – М.: СОЛОН–Пресс. 2005. –400 стр.

В оглавление книги \ К предыдущему разделу \ К следующему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика