本文由JavaCS3原创,转载请注明出处!
由于最近在做数字图像处理方面的程序,偶然想到PS里面有个自定滤镜的玩意。猛然发现这不就是卷积么,于是就想跟大家分享一下!本以为这个IDEA是我最先想出来的没想到网上好像有相关介绍,先摘录一些,大家可以先去浏览一下http://www.wzsky.net/html/Photo/Photoshop/114775.html
http://wenku.baidu.com/view/d13c40d276eeaeaad1f330c7.html
先给大家讲讲这神秘的PS吧!!!!可能很多搞设计的人,或者对PS稍微有所了解的人都觉得PS这软件简直就是魔术一般,模糊变清晰,什么美图啊等等。自从学习数字图像处理后觉得这软件无非就是把这深奥的理论变为轻松的可以供人们随意组合的工具罢了。很多的处理方法都是数字图像处理里面很经典的方法。一下针对今天的主题(自定滤镜)探讨一下。
其实所谓的滤镜在信号处理里面无非就是滤波这样的东西,只不过我们所处理的图像是数字图像罢了。
首先,这个自定滤镜在滤镜->其他->自定 里面,大家一看这面板可能会非常陌生。(什么玩意啊?全是些框框!连滑块都没有!)呵呵!我估计大家平时去乱玩的时候看到这个就没兴趣了。其实这东西是数字图像里面非常常见的滤波算子 也可以叫他内核(Kernel) 接下来就要提到卷积了。以下是openCV里面有关卷积的介绍:HERE
———————————————————————————————————--
高度概括地说,卷积是在每一个图像块与某个算子(核)之间进行的运算。
核说白了就是一个固定大小的数值数组。该数组带有一个 锚点 (其实就是中心点) ,一般位于数组中央。
由于最近在做数字图像处理方面的程序,偶然想到PS里面有个自定滤镜的玩意。猛然发现这不就是卷积么,于是就想跟大家分享一下!本以为这个IDEA是我最先想出来的没想到网上好像有相关介绍,先摘录一些,大家可以先去浏览一下http://www.wzsky.net/html/Photo/Photoshop/114775.html
http://wenku.baidu.com/view/d13c40d276eeaeaad1f330c7.html
先给大家讲讲这神秘的PS吧!!!!可能很多搞设计的人,或者对PS稍微有所了解的人都觉得PS这软件简直就是魔术一般,模糊变清晰,什么美图啊等等。自从学习数字图像处理后觉得这软件无非就是把这深奥的理论变为轻松的可以供人们随意组合的工具罢了。很多的处理方法都是数字图像处理里面很经典的方法。一下针对今天的主题(自定滤镜)探讨一下。
其实所谓的滤镜在信号处理里面无非就是滤波这样的东西,只不过我们所处理的图像是数字图像罢了。
首先,这个自定滤镜在滤镜->其他->自定 里面,大家一看这面板可能会非常陌生。(什么玩意啊?全是些框框!连滑块都没有!)呵呵!我估计大家平时去乱玩的时候看到这个就没兴趣了。其实这东西是数字图像里面非常常见的滤波算子 也可以叫他内核(Kernel) 接下来就要提到卷积了。以下是openCV里面有关卷积的介绍:HERE
———————————————————————————————————--
高度概括地说,卷积是在每一个图像块与某个算子(核)之间进行的运算。
核说白了就是一个固定大小的数值数组。该数组带有一个 锚点 (其实就是中心点) ,一般位于数组中央。
假如你想得到图像的某个特定位置的卷积值,可用下列方法计算:
- 将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;
- 将核内各值与相应像素值相乘,并将乘积相加;
- 将所得结果放到与锚点对应的像素上;
- 对图像所有像素重复上述过程。
———————————————————————————————————--
希望大家会明白上面的原理!这个类似于两个矩阵的乘法!
好了接下来来我给大家介绍一下常见的操作!
1.首先最简单的box filter,其实就是最简单的模糊操作。
希望大家会明白上面的原理!这个类似于两个矩阵的乘法!
好了接下来来我给大家介绍一下常见的操作!
1.首先最简单的box filter,其实就是最简单的模糊操作。
他实际上就是将原来像素值替换为四周像素的均值!从而达到模糊的效果!当然也可以扩大kernel的尺寸比如5×5,7×7 ,接下来讲讲在PS的用法!
放大
这里展示的是一个5×5的kernel。由于PS里面的kernel只能是整数。所以要加上个缩放参数,其实就是整体除以缩放值。因为是5×5所以每个位置应该为1/25,所以缩放为25。
2.接下来与之对应的就是锐化Sharp效果了,以下是kernel!
这是个3×3的kernel。我们看到中央为5,周围为-1。这样的操作就是为了突出中央和周围的差异!可以发现这5个数加起来刚好为1!因此可以很好的保证亮度不变!
3.如果把中间的5改为4的话,kernel的和为0。这样会变成什么呢?其实就是边缘
为了效果明显我将其扩大!其实获取图像的边缘也就是对其求导。因为在边缘亮度变化大!当然导数也就大咯!
4.最后给大家介绍个高斯模糊GaussianBlur。其实这东西很简单!大学的概率论里也有提到,就是那个正态分布!他比boxfilter最大的不同就是有权值!
以下是维基的解释:
http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A
这边还有:
http://www.cnblogs.com/hoodlum1980/articles/1088567.html
不过为了简单,我将用一个近似的权值代替
以下是维基的解释:
http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A
这边还有:
http://www.cnblogs.com/hoodlum1980/articles/1088567.html
不过为了简单,我将用一个近似的权值代替
这里为了让效果明显一点用了个5×5的kernel!可以看到中央的权重较大!四周的较小!
好不容易写完了!!!!希望大家喜欢!!!