MATLAB轻松实现三维图像自动旋转、颜色渐变、自动保存为GIF

本文介绍了MATLAB中3D图像自动旋转(camorbit)功能,包括z轴旋转示例,以及如何使用颜色渐变(如autumn色域)和指定颜色线条。此外,还展示了如何自动生成GIF动画,并分享了复杂的多色面组合与旋转实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 3D图像自动旋转

camorbit函数
官方文档中给出了详细说明:
在这里插入图片描述
示例:

%旋转功能核心语句: 
axis vis3d  %3维坐标系
surf(peaks)
for i = 1:36
    camorbit(10,0,'data',[0 0 1]) %%[0 0 1]表示按z轴旋转。36*10=360表示旋转一周
    drawnow %%即时显示旋转的结果
end

效果展示:

2. 颜色渐变

MATLAB中提供了多种颜色渐变的色域:包括Opencv中常见的hsv等



使用示例:autumn色域

clc,clear,close all
c = autumn(256);
surf(peaks);
colormap(c);
shading interp;

效果:

更多示例可参考官方文档,百度搜索:MATLAB autumn,jet等.

3. 保留指定颜色线条

核心语句:surf(peaks,'EdgeColor','yellow'),即在surf或其他绘图函数中添加‘EdgeColor’指定内容.

有效名称包括: ‘red’、‘green’、‘blue’、‘cyan’、‘magenta’、‘yellow’、‘black’、‘white’
和 ‘none’。有 效的十六进制颜色代码由 ‘#’ 后跟三个或六个十六进制数字组成。

示例:保留黄色线条

axis vis3d  %3维坐标系
surf(peaks,'EdgeColor','yellow')
for i = 1:36
    camorbit(10,0,'data',[0 0 1]) %%[0 0 1]表示按z轴旋转。36*10=360表示旋转一周
    drawnow %%即时显示旋转的结果
end

效果:

4. 自动生成GIF至桌面

axis vis3d  %3维坐标系
surf(peaks,'EdgeColor','yellow')
for i=1:36
camorbit(10,0,'data',[0,0,1])%[0 0 1]表示按z轴旋转。36*10=360表示旋转一周
M=getframe(gcf);
nn=frame2im(M);
[nn,cm]=rgb2ind(nn,256);
if i==1
imwrite(nn,cm,'out.gif','gif','LoopCount',inf,'DelayTime',0.1);%说明loopcount只是在i==1的时候才有用
else
imwrite(nn,cm,'out.gif','gif','WriteMode','append','DelayTime',0.1)%当i>=2的时候loopcount不起作用
end
end

为了表示色域渐进程度,可以加上一句colorbar.

示例:让MATLAB绘制的lantern旋转起来~

clc,clear,close all

t = 0:pi/10:2*pi;
figure
[X,Y,Z] = cylinder(cos(t),1);
surf(X,Y,Z)
axis square
theta=0:pi/12:2*pi;
phy=0:pi/24:pi;
[theta,phy]=meshgrid(theta,phy);
r=2;
x=r.*sin(phy).*cos(theta);
y=r.*sin(phy).*sin(theta);
z=r.*cos(phy);

figure,surf(x,y,z)

[x,y,z]=ellipsoid(0,0,5,2,2,2) ;
figure,surf(x,y,z,'EdgeColor','yellow') 
colormap(autumn(1));

hold on
axis([-2,2,-2,2,0,9])
[x, y, z]=cylinder(0.6) ;
CO1(:,:,1) = ones(size(z)); % red
CO1(:,:,2) = ones(size(z)); % green
CO1(:,:,3) = zeros(size(z));
hold on,surf(x, y, 4*z,CO1)

[x, y, z]=cylinder(0.5) ;
CO2(:,:,1) = ones(size(z)); % red
CO2(:,:,2) = ones(size(z)); % green
CO2(:,:,3) = zeros(size(z));
hold on,surf(x, y, 6.7+0.6*z,CO2)

[X,Y,Z] = cylinder(0.05);
CO3(:,:,1) = ones(size(z)); % red
CO3(:,:,2) = zeros(size(z)); % green
CO3(:,:,3) = zeros(size(z));
surf(X,Y,1*Z+7,CO3,'EdgeColor',[1,0,0]);
hold off
% colorbar
% shading interp; %是否渲染


% 实现并保存为gif至桌面
% shading interp;%颜色渲染
axis vis3d;
for i=1:36
camorbit(10,0,'data',[0,0,1])%[0 0 1]表示按z轴旋转。36*10=360表示旋转一周
M=getframe(gcf);
nn=frame2im(M);
[nn,cm]=rgb2ind(nn,256);
if i==1
imwrite(nn,cm,'out.gif','gif','LoopCount',inf,'DelayTime',0.1);%说明loopcount只是在i==1的时候才有用
else
imwrite(nn,cm,'out.gif','gif','WriteMode','append','DelayTime',0.1)%当i>=2的时候loopcount不起作用
end
end

旋转调速:

for i=1:180
camorbit(2,0,'data',[0,0,1])%[0 0 1]表示按z轴旋转。180*2=360表示旋转一周,步长为2

在这里插入图片描述

总结:
MATLAB figure配色问题实际上还存在着很多很多的技巧,需要多使用多积累,很难一篇文章就总结完所有用法,所以最好的办法就是查阅MATLAB官方文档,里面会给出很多简单易懂的例程,如果担心英文看不懂,就把页面设置为中文;
另外,很多顶刊文献中也不乏很多精彩的配色方案,不妨去从中借鉴汲取灵感。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wayne_Fine

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

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

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

打赏作者

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

抵扣说明:

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

余额充值