如何使用Matlab绘制超绚丽的烟花效果
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章将为大家详细讲解有关如何使用Matlab绘制超绚丽的烟花效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.使用效果2.随机点生成我们要构造一个黑色背景,
千家信息网最后更新 2024年11月11日如何使用Matlab绘制超绚丽的烟花效果
这篇文章将为大家详细讲解有关如何使用Matlab绘制超绚丽的烟花效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.使用效果
2.随机点生成
我们要构造一个黑色背景,对其添加高斯噪声,然后依据阈值删掉部分噪声,生成一张随机点图片:
% 构造黑色背景并生成白色杂点blackPic=uint8(zeros(800,800));distPic=imnoise(blackPic,'gaussian',0, 0.11);distPic(distPic<254)=0;
3.图像膨胀
我们发现之前构造的点太小了,我们要对其进行形态学膨胀处理:
% 杂点膨胀se=strel('square',3);distPic=imdilate(distPic,se);
4.特效「风」模拟
就是建立一个循环,不断地将点往右侧复制,并将颜色变暗,代码中第二个参数为拖拽长度,第三个参数为暗化速度:
% 构造风特效windPic=wind(distPic,180,0.99);% 风特效构造函数 function resultPic=wind(oriPic,len,ratio) oriPic=double(oriPic); for i=1:len tempPic=[zeros(size(oriPic,1),1),oriPic(:,1:(end-1))].*ratio; oriPic(oriPic5.级坐标变换
% 极坐标变换polarPic=polarTransf(windPic(:,end:-1:1)');% 级坐标变换构造函数 function resultPic=polarTransf(oriPic) oriPic=double(oriPic); [m,n]=size(oriPic); [t,r]=meshgrid(linspace(-pi,pi,n),1:m); M=2*m; N=2*n; [NN,MM]=meshgrid((1:N)-n-0.5,(1:M)-m-0.5); T=atan2(NN,MM); R=sqrt(MM.^2+NN.^2); resultPic=interp2(t,r,oriPic,T,R,'linear',0); resultPic=uint8(resultPic); end6.图像模糊及再映射
我们发现烟花图片中心区域方格化严重:
我们很容易想到图像模糊,但是模糊后亮度又不够,因此我们再做一次映射将图片整体亮度提高:
模糊及映射:
% 模糊以减少像素化polarPic=imgaussfilt(polarPic,1.5);polarPic=uint8(double(polarPic)./double(max(max(polarPic))).*260);7.图像上色
生成一个圆形的渐变图片,并与白色烟花图片进行一次正交叠底:
% 构造圆形渐变图matSize=[1600,1600];point=[800,800];colorList=[195 53 93 211 102 141 231 179 192 229 182 172 227 178 137 238 191 147 236 195 113];% 正片叠底colorMat=cColorMat(matSize,point,colorList);colorMatR=colorMat(:,:,1);colorMatG=colorMat(:,:,2);colorMatB=colorMat(:,:,3);fwPicR=double(colorMatR).*double(polarPic)./255;fwPicG=double(colorMatG).*double(polarPic)./255;fwPicB=double(colorMatB).*double(polarPic)./255;fwPic(:,:,1)=fwPicR;fwPic(:,:,2)=fwPicG;fwPic(:,:,3)=fwPicB;fwPic=uint8(fwPic);imshow(fwPic)%==========================================================================% 图像颜色映射函数 function colorMat=cColorMat(matSize,point,colorList) [xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1)); zMesh=sqrt((xMesh-point(2)).^2+(yMesh-point(1)).^2); zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh))); colorFunc=colorFuncFactory(colorList); colorMesh=colorFunc(zMesh); colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1)); colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1)); colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1)); colorMat=uint8(colorMat); end function colorFunc=colorFuncFactory(colorList) x=(0:size(colorList,1)-1)./(size(colorList,1)-1); y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3); colorFunc=@(X)[interp1(x,y1,X,'linear')',... interp1(x,y2,X,'linear')',... interp1(x,y3,X,'linear')']; end其他几个颜色:
colorList2=[25 59 157 24 71 219 38 124 237 93 215 255 168 244 255 243 254 250 246 252 240];colorList3=[239 250 210 229 164 122 232 150 138 255 164 204 192 58 111 158 10 26 224 168 121];8.完整代码
function drawFireWorks% 构造黑色背景并生成白色杂点blackPic=uint8(zeros(800,800));distPic=imnoise(blackPic,'gaussian',0, 0.11);distPic(distPic<254)=0;% 杂点膨胀se=strel('square',3);distPic=imdilate(distPic,se);% 构造风特效windPic=wind(distPic,180,0.99);% 极坐标变换polarPic=polarTransf(windPic(:,end:-1:1)');% 模糊以减少像素化polarPic=imgaussfilt(polarPic,1.5);polarPic=uint8(double(polarPic)./double(max(max(polarPic))).*260);%-----------------------------------------------------------------% 构造圆形渐变图matSize=[1600,1600];point=[800,800];colorList=[195 53 93 211 102 141 231 179 192 229 182 172 227 178 137 238 191 147 236 195 113];% 正片叠底colorMat=cColorMat(matSize,point,colorList);colorMatR=colorMat(:,:,1);colorMatG=colorMat(:,:,2);colorMatB=colorMat(:,:,3);fwPicR=double(colorMatR).*double(polarPic)./255;fwPicG=double(colorMatG).*double(polarPic)./255;fwPicB=double(colorMatB).*double(polarPic)./255;fwPic(:,:,1)=fwPicR;fwPic(:,:,2)=fwPicG;fwPic(:,:,3)=fwPicB;fwPic=uint8(fwPic);imshow(fwPic)%==========================================================================% 风特效构造函数 function resultPic=wind(oriPic,len,ratio) oriPic=double(oriPic); for i=1:len tempPic=[zeros(size(oriPic,1),1),oriPic(:,1:(end-1))].*ratio; oriPic(oriPic关于"如何使用Matlab绘制超绚丽的烟花效果"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
函数
图像
图片
特效
变换
生成
烟花
颜色
效果
圆形
极坐标
白色
篇文章
背景
黑色
绚丽
亮度
代码
像素
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有品服务器
数据库规范表格练习题
公共网络安全主题班会
广东商城软件开发靠谱吗
猫咪服务器
数据库实训日志
依文中国手工坊线上数据库
服务器环境监测
国家网络安全宣传周今日拉开帷幕
软件开发工资深圳
软件开发自我介绍知乎
深圳市聚美通道互联网科技
单位网络安全应急值班表
网络安全手抄报文字内容六年级
河南虚拟化服务器
网络安全考研 知乎
滁州边缘计算工控机服务器
山东云服务器有哪些云主机
永兴计算机软件开发培训学校
组建自己的数据库
信息网络安全相关内容
zigbee数据库
网络安全 投稿
软件开发任务完成情况描述
软件开发三本就业好吗
数据仓库是什么数据库
数据库运用技术范畴
58红包软件开发裙
滁州边缘计算工控机服务器
扬州软件开发工程招聘网