【三维重建】基于切片的三维重建MATLAB仿真


clc,clear
v=csvread('vdata.txt');   %  数据 这里的数据矩阵为v(5*27*6),可以看成一本27页纸,每页绘制了5*6的网格,
                          %  然后27页纸叠在一起。当你理解本图绘制后,数据可以随意制作
                          %  读取文件,也可以读取一部分
v=reshape(v,5,27,6);      %  语法是 A = reshape(A,m,n); 或者 A = reshape(A,[m,n]);
                          %  都是将A 的行列排列成m行n列。另外 reshape是按照列取数据的
[x,y,z]=meshgrid(1:27,1:5,1:6);  % 三维网格化
h=figure(1);
set(h,'name','取单切片')
subplot(221)
slice(x,y,z,v,[],[1],[]);   % 切片函数 y=1
shading interp              % 平滑处理
set(gca,'zdir','reverse');  % ‘’都是属性调整
axis equal                  %   将横轴纵轴的定标系数设成相同值 ,即单位长度相同
grid on
subplot(222)
slice(x,y,z,v,[],[2],[]);   % 切片函数 y=2
shading interp              % 平滑处理
colormap('jet')             % 颜色属性
set(gca,'zdir','reverse');  % ‘’都是属性调整
axis equal
grid on
subplot(223)
slice(x,y,z,v,[],[3],[]);
shading interp 
set(gca,'zdir','reverse');
axis equal
grid on
subplot(224)
slice(x,y,z,v,[],[4],[]);
shading interp 
set(gca,'zdir','reverse');
axis equal
grid on

% 2.全空间立体切片
h2=figure(2);
set(h2,'name','全空间切片','MenuBar','none','ToolBar','none')
slice(x,y,z,v,[1:2:27],[2 3 4],[2 3 4 5])  % x方向1-27,以2位单元,y方向 分成3分,z方向分成4分
shading interp                             % 图像平滑
colorbar                                   % 颜色条
colormap('jet')                            % 颜色属性
set(gca,'zdir','reverse');                 % 属性调整
axis equal
grid on 
box on       % 显示坐标区轮廓   显示围绕当前坐标区的框轮廓

% 3.立体包络图
h3=figure(3);
subplot(221);
set(h3,'name','定值包络立体图','MenuBar','none','ToolBar','none')
set(gcf,'InvertHardcopy','off')
fw=150;                     % fw是作主要可变参数,控制最外层包络面的值                                                                                                  %%此值为最外层包络面取值
fv=isosurface(x,y,z,v,fw);  % 从三维体数据中提取等值面数据
% isovalue 中指定的等值面值处的体数据 V 计算等值面数据。等值面连接具有指定值的点,与等高线连接仰角相同的点的方式大致相同
p=patch(fv);                % 创建一个或多个填充多边形
set(p,'facecolor','b','edgecolor','none');
patch(isocaps(x,y,z,v, fw), 'FaceColor', 'interp', 'EdgeColor', 'none');% isocaps 计算等值面端帽几何图
% colorbar
% colormap('jet')
box on
daspect([1,1,1]) % 坐标轴尺寸变化为1:1:1
view(3)          % 观看角度 三维视角
set(gca,'zdir','reverse','color',[0.2,0.2,0.2]);
camlight         % 在照相机坐标系中创建或移动光源对象
camproj perspective  % 设置或查询投影类型 
lighting phong       % 指定光照算法 
axis equal
grid on
% title(['最外层表面的值为: ' , num2str(fw)]);

% 三维投影
hold on
subplot(222);
set(h3,'name','定值包络立体图','MenuBar','none','ToolBar','none')
set(gcf,'InvertHardcopy','off')
fw=150;                     % fw是作主要可变参数,控制最外层包络面的值                                                                                                  %%此值为最外层包络面取值
fv=isosurface(x,y,z,v,fw);  % 从三维体数据中提取等值面数据
%isovalue 中指定的等值面值处的体数据 V 计算等值面数据。等值面连接具有指定值的点,与等高线连接仰角相同的点的方式大致相同
p=patch(fv);                % 创建一个或多个填充多边形
set(p,'facecolor','b','edgecolor','none');
patch(isocaps(x,y,z,v, fw), 'FaceColor', 'interp', 'EdgeColor', 'none');% isocaps 计算等值面端帽几何图
% colorbar
% colormap('jet')
box on
daspect([1,1,1]) % 坐标轴尺寸变化为1:1:1
view(90,0);      %在yoz面上的投影
set(gca,'zdir','reverse','color',[0.2,0.2,0.2]);
camlight         % 在照相机坐标系中创建或移动光源对象
camproj perspective  % 设置或查询投影类型 
lighting phong       % 指定光照算法 
axis equal
grid on
% title(['最外层表面的值为: ' , num2str(fw)]);

hold on
subplot(223);
set(h3,'name','定值包络立体图','MenuBar','none','ToolBar','none')
set(gcf,'InvertHardcopy','off')
fw=150;                     % fw是作主要可变参数,控制最外层包络面的值                                                                                                  %%此值为最外层包络面取值
fv=isosurface(x,y,z,v,fw);  % 从三维体数据中提取等值面数据
%isovalue 中指定的等值面值处的体数据 V 计算等值面数据。等值面连接具有指定值的点,与等高线连接仰角相同的点的方式大致相同
p=patch(fv);                % 创建一个或多个填充多边形
set(p,'facecolor','b','edgecolor','none');
patch(isocaps(x,y,z,v, fw), 'FaceColor', 'interp', 'EdgeColor', 'none');% isocaps 计算等值面端帽几何图
....................................

 

D202

 

  • 4
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值