MATLAB 制作抖音同款炫光海报

2024-01-08 13:48

本文主要是介绍MATLAB 制作抖音同款炫光海报,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇其实步骤比较多,看效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤
0.图片导入
oriPic=imread('test.jpg');

原始图片:
在这里插入图片描述
抖音上是做了铜板雕刻的像素化处理,由于MATLAB本身不具备这个功能,因此我们使用添加椒盐噪声和动态模糊的方法来模拟铜板雕刻的效果

1.添加椒盐噪声

正常彩色图片添加椒盐噪声,其噪声点也是彩色的,这里我们想要为彩图添加黑白的椒盐噪声,就可以先构造一张和原图等大的灰度图,增添椒盐噪声后,把噪声点移植到原图上:

disp('正在进行噪声添加')
grayPic=uint8(150.*ones([size(oriPic,1),size(oriPic,2)]));
J = imnoise(grayPic,'salt & pepper',0.1);
Rchannel=oriPic(:,:,1);Rchannel(J==255)=255;Rchannel(J==0)=0;
Gchannel=oriPic(:,:,2);Gchannel(J==255)=255;Gchannel(J==0)=0;
Bchannel=oriPic(:,:,3);Bchannel(J==255)=255;Bchannel(J==0)=0;
spPic(:,:,1)=Rchannel;
spPic(:,:,2)=Gchannel;
spPic(:,:,3)=Bchannel;
imshow(spPic)

效果:
在这里插入图片描述

2.图像添加动态模糊
disp('正在动态模糊')
H = fspecial('motion', 40, 0);
movePic=imfilter(spPic, H, 'replicate');
imshow(movePic)

在这里插入图片描述

3.径向模糊
disp('正在进行径向模糊')
radialPic=radialConv(movePic,60);
imshow(radialPic)function radialPic=radialConv(oriPic,k)[h,w,c]=size(oriPic);radialPic=zeros(h,w,c);for y=1:hfor x=1:wr=sqrt((y-h/2)^2+(x-w/2)^2);ang=atan2(y-h/2,x-w/2);pix=[0 0 0];pixNum=0;for i=0:1:k%r-i是距离当前像素的距离为r-i的像素,在当前像素和中心像素同一条直线上yy=round(abs(r-i)*sin(ang)+h/2);xx=round(abs(r-i)*cos(ang)+w/2);if yy>=1 && yy<=h && xx>=1 && xx<=wpix(1)=pix(1)+double(oriPic(yy,xx,1));pix(2)=pix(2)+double(oriPic(yy,xx,2));pix(3)=pix(3)+double(oriPic(yy,xx,3));pixNum=pixNum+1;endendpix(1)=pix(1)/pixNum;pix(2)=pix(2)/pixNum;pix(3)=pix(3)/pixNum;radialPic(y,x,:)=pix;endendradialPic=uint8(radialPic);end

效果:
在这里插入图片描述

4.顺时针及逆时针旋转图片
disp('正在进行顺时针方向旋转')
L_rotatePic=rotateImage(radialPic,-10);
disp('正在进行逆时针方向旋转')
R_rotatePic=rotateImage(radialPic,10);function rotatePic=rotateImage(oriPic,degree)[w,h,c]=size(oriPic);rotatePic=zeros(w,h,c);swirl_degree=degree./1000;for y=1:hfor x=1:wYoffset=y-h/2;Xoffset=x-w/2;radian=atan2(Yoffset,Xoffset);radius=sqrt(Xoffset^2+Yoffset^2);xx=int32(radius*cos(radian+radius*swirl_degree)+w/2);yy=int32(radius*sin(radian+radius*swirl_degree)+h/2);xx(xx>w)=w;yy(yy>h)=h;xx(xx<1)=1;yy(yy<1)=1;rotatePic(x,y,:)=oriPic(xx,yy,:);endendrotatePic=uint8(rotatePic);end

效果:
在这里插入图片描述
在这里插入图片描述

5.图片叠加

可以选择变亮或者滤色两种混合模式:
变亮

disp('正在进行混合')
RL=L_rotatePic(:,:,1);RR=R_rotatePic(:,:,1);RL(RL<RR)=RR(RL<RR);
GL=L_rotatePic(:,:,2);GR=R_rotatePic(:,:,2);GL(GL<GR)=GR(GL<GR);
BL=L_rotatePic(:,:,3);BR=R_rotatePic(:,:,3);BL(BL<BR)=BR(BL<BR);
dazzleLightPic(:,:,1)=RL;
dazzleLightPic(:,:,2)=GL;
dazzleLightPic(:,:,3)=BL;
imshow(dazzleLightPic)

滤色

disp('正在进行混合')
dazzleLightPic=uint8(255-double(255-L_rotatePic).*double(255-R_rotatePic)./220);
imshow(dazzleLightPic)

变亮效果:
在这里插入图片描述
滤色效果:
在这里插入图片描述

6.完整代码
function dazzleLight
oriPic=imread('test9.jpeg');disp('正在进行噪声添加')
grayPic=uint8(150.*ones([size(oriPic,1),size(oriPic,2)]));
J = imnoise(grayPic,'salt & pepper',0.1);
Rchannel=oriPic(:,:,1);Rchannel(J==255)=255;Rchannel(J==0)=0;
Gchannel=oriPic(:,:,2);Gchannel(J==255)=255;Gchannel(J==0)=0;
Bchannel=oriPic(:,:,3);Bchannel(J==255)=255;Bchannel(J==0)=0;
spPic(:,:,1)=Rchannel;
spPic(:,:,2)=Gchannel;
spPic(:,:,3)=Bchannel;
imshow(spPic)disp('正在动态模糊')
H = fspecial('motion', 40, 0);
movePic=imfilter(spPic, H, 'replicate');
imshow(movePic)disp('正在进行径向模糊')
radialPic=radialConv(movePic,60);
imshow(radialPic)disp('正在进行顺时针方向旋转')
L_rotatePic=rotateImage(radialPic,-10);imshow(L_rotatePic)
disp('正在进行逆时针方向旋转')
R_rotatePic=rotateImage(radialPic,10);imshow(R_rotatePic)disp('正在进行变亮混合')
RL=L_rotatePic(:,:,1);RR=R_rotatePic(:,:,1);RL(RL<RR)=RR(RL<RR);
GL=L_rotatePic(:,:,2);GR=R_rotatePic(:,:,2);GL(GL<GR)=GR(GL<GR);
BL=L_rotatePic(:,:,3);BR=R_rotatePic(:,:,3);BL(BL<BR)=BR(BL<BR);
dazzleLightPic(:,:,1)=RL;
dazzleLightPic(:,:,2)=GL;
dazzleLightPic(:,:,3)=BL;
% dazzleLightPic=uint8(255-double(255-L_rotatePic).*double(255-R_rotatePic)./220);
imshow(dazzleLightPic)function radialPic=radialConv(oriPic,k)[h,w,c]=size(oriPic);radialPic=zeros(h,w,c);for y=1:hfor x=1:wr=sqrt((y-h/2)^2+(x-w/2)^2);ang=atan2(y-h/2,x-w/2);pix=[0 0 0];pixNum=0;for i=0:1:k%r-i是距离当前像素的距离为r-i的像素,在当前像素和中心像素同一条直线上yy=round(abs(r-i)*sin(ang)+h/2);xx=round(abs(r-i)*cos(ang)+w/2);if yy>=1 && yy<=h && xx>=1 && xx<=wpix(1)=pix(1)+double(oriPic(yy,xx,1));pix(2)=pix(2)+double(oriPic(yy,xx,2));pix(3)=pix(3)+double(oriPic(yy,xx,3));pixNum=pixNum+1;endendpix(1)=pix(1)/pixNum;pix(2)=pix(2)/pixNum;pix(3)=pix(3)/pixNum;radialPic(y,x,:)=pix;endendradialPic=uint8(radialPic);endfunction rotatePic=rotateImage(oriPic,degree)[w,h,c]=size(oriPic);rotatePic=zeros(w,h,c);swirl_degree=degree./1000;for y=1:hfor x=1:wYoffset=y-h/2;Xoffset=x-w/2;radian=atan2(Yoffset,Xoffset);radius=sqrt(Xoffset^2+Yoffset^2);xx=int32(radius*cos(radian+radius*swirl_degree)+w/2);yy=int32(radius*sin(radian+radius*swirl_degree)+h/2);xx(xx>w)=w;yy(yy>h)=h;xx(xx<1)=1;yy(yy<1)=1;rotatePic(x,y,:)=oriPic(xx,yy,:);endendrotatePic=uint8(rotatePic);endend

可以通过将旋转方向和旋转角度做出调整获得不同的效果,例如同向但旋转幅度不同时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于MATLAB 制作抖音同款炫光海报的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583659

相关文章

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

OpenStack镜像制作系列2—Windows7镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系列