制作了一个集成滤镜的matlabAPP。所谓集成滤镜,就是可以在同一个界面中切换不同的滤镜,并调整对应的参数。该作业老师点评为高分作业。
首先进行界面展示。
![图1](https://i-blog.csdnimg.cn/direct/2a284c0211a74303b2f0cfce1b304f58.png)
初始界面如上图所示,其中最上方的区域为处理后的图像显示的区域,最下方的区域为原图像显示的区域,用于与处理后的图像进行对比来突出处理效果。左侧第一个按钮“选择图像”在按下之后会跳出选择图像文件的界面,中间的“选择滤镜”下拉条点击之后会展开滤镜列表,可以在这边选择一个想要的滤镜,右侧“生成图像”按钮在点击之后会根据选择的滤镜和对应的参数进行图像处理,并将处理后的结果生成在最上方的区域中。
![](https://i-blog.csdnimg.cn/direct/0ad1a50317fe4f2992e9c1859684b970.png)
选择好图片文件之后的界面如上图所示,不多赘述。
![](https://i-blog.csdnimg.cn/direct/84f46a9f6bdf407ea5fea0f9e06b7643.png)
点击“选择滤镜”下拉菜单之后的界面如上图所示,共计五个滤镜,分别为无滤镜、老照片、动态模糊、二值和手动调节。每个滤镜具体的效果将依次进行展示。
![](https://i-blog.csdnimg.cn/direct/8374f182bdc14d2ca0b5a17ec72b9b21.png)
老照片滤镜效果如上图所示,主要就是为照片添加一层噪点效果并进行调色处理。在该滤镜下,可以通过左侧的“噪点”滑动条来调整噪点的效果。
![](https://i-blog.csdnimg.cn/direct/5a9977bbfdc447df9e3316b7b3bc797d.png)
动态模糊滤镜效果如上图所示,这里本来是打算做一个matlab目前提供的所有模糊效果的集合,但其余几个在调试的时候bug频出,就先只做动态模糊的滤镜了。如图,这里可以调节两个参数,分别是动态模糊的程度与方向,程度是控制模糊的力度,程度越大,力度越大,物体被扭曲的效果就越强烈;方向是通过角度来调节的,不同的角度对应的就是不同的方向效果。
![](https://i-blog.csdnimg.cn/direct/f536ed04dae447a898c4bf17e06a4bb1.png)
二值滤镜效果如上图所示,原理简单来说就是选择一个0-255之间的数值,对原图进行处理,先进行灰度化,之后每个像素点高于该值的就更新为255,反之更新为0,最终实现二值效果。左侧滑块可以调整这个选定的阈值,不同的阈值可以展现出不同的效果,还是蛮有趣的。右下角可以调整是黑白二值还是彩色二值,这里是黑白二值,随后展示一下彩色二值的效果。
![](https://i-blog.csdnimg.cn/direct/debdc55ad5554ed5b359a30abf2b10b4.png)
这里就是彩色二值的效果了,原理与上面一致,不过是对三个通道分别进行处理的,最后将三个通道整合起来实现的效果,有时候合理的阈值搭配能够产生奇效哦~
![](https://i-blog.csdnimg.cn/direct/36abc70add2548bfad3054c8c4675fea.png)
手动调节滤镜效果如上图所示,这里我提供了四个可以调节的参数,分别是亮度、对比度、饱和度和锐度,也是比较传统的几个参数了,具体实现的效果就跟平时手机上调节的效果一致,按照需求进行调节就可以了。
下面对滤镜部分的代码进行一下简单说明。
无滤镜
没有添加任何滤镜,也就是直接将原图显示在对应区域。
老照片滤镜
![](https://i-blog.csdnimg.cn/direct/a4e23553a11649d7b1b6e51e211604ff.png)
我使用了imnoise函数来添加噪声,选择的是“speckle”噪声以及一个参数来控制噪点效果。简单调整了一下对比度,随后创建了一个复古色调映射的矩阵,这个色调是我从网上参考的。再接下来的两个for循环中,我将调整了对比度后的灰度图像与这个矩阵相结合,将其映射上去,通过sepiaTone矩阵乘以灰度的向量,产生复古色调的效果。
动态模糊滤镜
![](https://i-blog.csdnimg.cn/direct/831c13bbba9b4a1cb6ad9bf7bd14b622.png)
我使用fspecial函数实现模糊效果,并通过两个参数简单控制它的程度和方向。
二值滤镜
![](https://i-blog.csdnimg.cn/direct/134e4ba55e0c4509a09a6886632cac1a.png)
这里分了两种情况,一种是黑白二值的,还有一种是分别对RGB三种颜色进行处理。方法其实很简单,就是判断图上的每一个像素点与我设置的limit大小关系。大于limit就设置为255,小于limit就设置为0.
手动调节滤镜
![](https://i-blog.csdnimg.cn/direct/840300104a7448a3a5b3bcd428ae89cb.png)
这里包含了四个可以调节的点,分别是亮度、对比度、饱和度和锐度。如图,都是挺基础的代码。锐度的调节我选择的是拉普拉斯滤波器,通过两个参数的设置来增强它的边缘。
大概就是这样。整个制作过程比较费心思的地方在于app界面的设计以及各个组件之间的协作关系,算法代码倒并没有想象中的那么难。本文提供的几段代码主要提供思路和辅助说明,完整的app代码在GitHub里放出,喜欢的帮我点个star哦~
https://github.com/Jiukuang/MATLAB/blob/main/Multifunctional_app.mlapp