注: 本文算法参考大佬 grafx 的这篇博客: 图像处理算法之水面倒影特效
由于本文使用MATLAB复现,因此很多语法上会显得比较简洁,同时本博文对原大佬文章部分内容进行了改写,详见本文:
0效果展示
导入图像: 这部分其实没啥好说的:
% 图片导入
oriPic=imread('test.jpg');
[Row,Col,~]=size(oriPic);
翻转及白化图像:
翻转就是单纯的将行索引倒过来; 白化就是将当前像素的颜色按比例和白色取个带权均值,行索引越大白色权重也越大,图像也就越白。
% 图片翻转及白化 ==========================================================
whiteMat=((1:Row)./Row./1.2)'*ones(1,Col); % 白化比例矩阵
flipPic=zeros(Row,Col,3); % 翻转后矩阵初始化
for i=1:3
tempChannel=double(oriPic(:,:,i)); % 获得通道图
tempChannel=tempChannel(end:-1:1,:); % 翻转
tempChannel=tempChannel.*(1-whiteMat)+255.*whiteMat; % 白化
flipPic(:,:,i)=tempChannel;
end
当然如果我们将这一行:
tempChannel=tempChannel.*(1-whiteMat)+255.*whiteMat;
改写为:
tempChannel=tempChannel.*(1-whiteMat)+0.*whiteMat;
就变成了一个黑化的过程:
当然你也可以尝试其他颜色,例如将整段改写为:
Color=[255,0,0];
colorMat=((1:Row)./Row./1.2)'*ones(1,Col); % 比例矩阵
flipPic=zeros(Row,Col,3); % 翻转后矩阵初始化
for i=1:3
tempChannel=double(oriPic(:,:,i)); % 获得通道图
tempChannel=tempChannel(end:-1:1,:); % 翻转
tempChannel=tempChannel.*(1-colorMat)+Color(i).*colorMat; % 渐变
flipPic(:,:,i)=tempChannel;
end
imshow(uint8(flipPic))
生成噪声并模糊
noiseMat=ones(Row,Col);
noiseMat=imnoise(noiseMat,'gaussian',0,5); % 噪声添加
gaussOpt=fspecial('gaussian',[3 3],1);
noiseMat=imfilter(noiseMat,gaussOpt);
噪声图:
模糊后噪声图:
浮雕特效
实际上浮雕特效就是用以下类似形式的矩阵对图像进行卷积,卷积结果在加上RGB范围的均值,[0,1]区间就加0.5,[0,255]区间就加128: [ 1 0 0 0 0 0 0 0 − 1 ] [ 2 0 2 0 0 0 − 2 0 − 2 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & -1 \end{bmatrix} \begin{bmatrix} 2 & 0 & 2 \\ 0 & 0 & 0 \\ -2 & 0 & -2 \end{bmatrix} ⎣⎡10000000−1⎦⎤⎣⎡20−200020−2⎦⎤ 数值和位置不重要,重要的是相对位置互为相反数,浮雕过程描述如下:
H=[cos(pi+pi/4),0,cos(pi-pi/4);
cos(pi+2*pi/4),0,cos(pi-2*pi/4);
cos(pi+3*pi/4),0,cos(pi-3*pi/4)];
noiseMat=imfilter(noiseMat,H,'conv')+0.5;
noiseMat=noiseMat.*255;
noiseMat(noiseMat
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?