MATLAB 制作抖音同款旋转星空海报图

大概像是下面这样(我是真的不会设计海报,大家凑乎着看叭)
MATLAB 制作抖音同款旋转星空海报图_第1张图片
我们要制作的就是上面这样的背景图,文章最后由完整代码

步骤

1.导入图片

导入图片并获得长宽及通道数信息,图片需要和m文件在同一文件夹:

I=imread('test.jpeg');
[W,H,nChanels]=size(I);

我用的原图在这里:
MATLAB 制作抖音同款旋转星空海报图_第2张图片

2.将图片扭曲到合适角度
degree=15;
eddy_mat=zeros(W,H,nChanels);
swirl_degree=degree./1000;
midX=W/2;
midY=H/2;

for y=1:H
    for x=1:W
        Yoffset=y-midY;
        Xoffset=x-midX;
        
        radian=atan2(Yoffset,Xoffset);
        radius=sqrt(Xoffset^2+Yoffset^2);
        X=int32(radius*cos(radian+radius*swirl_degree)+midX);
        Y=int32(radius*sin(radian+radius*swirl_degree)+midY);
        
        X(X>W)=W;Y(Y>H)=H;
        X(X<1)=1;Y(Y<1)=1;
        eddy_mat(x,y,:)=I(X,Y,:);
    end
end
eddy_mat=uint8(eddy_mat);

MATLAB 制作抖音同款旋转星空海报图_第3张图片

3.构造映射矩阵

其实就是灰度化这张图,我们要根据图片的亮度绘制曲面,因而用灰度图做高度索引再适合不过

map_mat=rgb2gray(eddy_mat);

MATLAB 制作抖音同款旋转星空海报图_第4张图片

4.构造曲面,上色并调整角度

使用灰度图构造曲面,再把有色图贴图上去

[Xmesh,Ymesh]=meshgrid(1:H,1:W);
surf(Xmesh,map_mat,Ymesh,'EdgeColor','none','LineWidth',0.01,'CData',eddy_mat,'FaceColor','interp')

调整曲面角度,为了方便截图,可以把背景设置成黑色

axes=gca;
axes.PlotBoxAspectRatio=[0.6860    0.6875    1.0000];
axes.CameraPosition=[-0.9862    2.2773    1.5062].*1e3;
axes.Color=[0 0 0];

MATLAB 制作抖音同款旋转星空海报图_第5张图片
MATLAB 制作抖音同款旋转星空海报图_第6张图片
注可以将figure调大后截图

5.完整代码及成品效果

完整代码:

function FarGate
I=imread('test.jpeg');
[W,H,nChanels]=size(I);

degree=15;
eddy_mat=zeros(W,H,nChanels);
swirl_degree=degree./1000;
midX=W/2;
midY=H/2;

for y=1:H
    for x=1:W
        Yoffset=y-midY;
        Xoffset=x-midX;
        
        radian=atan2(Yoffset,Xoffset);
        radius=sqrt(Xoffset^2+Yoffset^2);
        X=int32(radius*cos(radian+radius*swirl_degree)+midX);
        Y=int32(radius*sin(radian+radius*swirl_degree)+midY);
        
        X(X>W)=W;Y(Y>H)=H;
        X(X<1)=1;Y(Y<1)=1;
        eddy_mat(x,y,:)=I(X,Y,:);
    end
end
eddy_mat=uint8(eddy_mat);
disp('已完成图像旋转...'),pause(0.5)

%T=affine2d([1 0 0;0 1 0;0 0 1]);
%dst_mat=imwarp(eddy_mat,T);
imshow(eddy_mat)


map_mat=rgb2gray(eddy_mat);
disp('已获得映射矩阵...'),pause(0.5)
imshow(map_mat)

[Xmesh,Ymesh]=meshgrid(1:H,1:W);
surf(Xmesh,map_mat,Ymesh,'EdgeColor','none','LineWidth',0.01,'CData',eddy_mat,'FaceColor','interp')
disp('已构造曲面...'),pause(0.5)

axes=gca;
axes.PlotBoxAspectRatio=[0.6860    0.6875    1.0000];
axes.CameraPosition=[-0.9862    2.2773    1.5062].*1e3;
axes.Color=[0 0 0];
disp('已调整曲面角度')

end

MATLAB 制作抖音同款旋转星空海报图_第7张图片


抖音同款系列又出了两篇哟,大家可以去看一下:
MATLAB 制作抖音同款 立体人物文字海报
MATLAB 制作抖音同款旋转星空海报图_第8张图片
MATLAB 制作抖音同款旋转星空海报图_第9张图片
MATLAB 制作抖音同款含褶皱面料图
MATLAB 制作抖音同款旋转星空海报图_第10张图片
MATLAB 制作抖音同款旋转星空海报图_第11张图片

你可能感兴趣的:(MATLAB,星空图,海报,曲面)