如何使用Matlab绘制超绚丽的烟花效果
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章将为大家详细讲解有关如何使用Matlab绘制超绚丽的烟花效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.使用效果2.随机点生成我们要构造一个黑色背景,
千家信息网最后更新 2025年11月10日如何使用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(oriPic
5.级坐标变换
% 极坐标变换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安全错误
数据库的锁怎样保障安全
服务器之服
学软件开发英语重要
易语言源码软件开发
物种分类数据库都有哪些
软件开发进度估算
重大节日网络安全报备总结
提高网络安全 怎么做
大荔县软件开发
数据库创建语句的命令是
开源web数据库客户端
服务器管理器在哪里找
皇室战争客服端服务器错误
kgb服务器
网络安全的审查方法包括
比阿里云服务器好的
软件开发一个人收入
数据库技术主要运用
艾尔登法环服务器状态
网易我的世界如何下载服务器
安徽软件开发价钱是多少
数据库安全配置实验报告总结
服务器数据错误402怎么解决
共享access数据库
永州软件开发中职学校
网络安全防火墙厂商排名
深圳有哪些软件开发公司是国企的
德旺网络技术集团
国家青少年网络安全条约组织
fmrs属于引文数据库吗
sql中修改表数据库
