图像滤镜处理算法:灰度、黑白、底片、浮雕

今天我们来介绍几种简单的滤镜算法。
灰度:
我们都知道,一般我们拿到的彩色图片中都有 rgb 三个通道。有些还有额外的 alpha 通道。其中 rgb 和 alpha 通道分别表示红色、绿色、蓝色和透明度通道。顾名思义,红色通道的值保存的是红色分量的亮度大小值。其值是从 0 到 255 的整数分布。绿色和蓝色通道同理。alpha 通道一般是 0 到 1 的浮点数,代表像素点的透明程度。灰度值就是代表像素的亮度。灰度值为 255 时,图片像素最亮,为 0 时最暗。这也是为什么我们把每通道的值都称为灰度值的原因。其实只是表示亮度。
灰度图像只有 256 种颜色值。这样其实三通道原本 256 * 256 * 256 中颜色值就退化成只有 0 到 255 的亮度值。因此为灰度图片。常见灰度化思想为将颜色三通道的值保持一致。
下面是三种常见算法:
1 最大值法:即新的颜色值R=G=B=Max(R,G,B),这种方法处理后的图片看起来亮度值偏高。
2 平均值法:即新的颜色值R=G=B=(R+G+B)/3,这样处理的图片十分柔和
3 加权平均值法:即新的颜色值R=G=B=(R * Wr+G*Wg+B*Wb),一般由于人眼对不同颜色的敏感度不一样,所以三种颜色值的权重不一样,一般来说绿色最高,红色其次,蓝色最低,最合理的取值分别为Wr = 30%,Wg = 59%,Wb = 11%
下面是我的c++实现效果图:


灰度化效果.png

黑白:
黑白图像比灰度图像更粗暴,只保留了黑和白两种颜色。灰度值要么为0,要么为255。所以黑白算法更简单:
求RGB平均值Avg = (R + G + B) / 3,如果Avg >= 100,则新的颜色值为R=G=B=255;如果Avg < 100,则新的颜色值为R=G=B=0;255就是白色,0就是黑色。这里的 100 为阈值。阈值是可以调整的。至于此处为什么用100作,这是一个经验值。相对来说,100作为阈值一般都能得到不错的黑白花效果。当然设置成其他值也可以。如设置为128。可以根据效果来做调整。
下面是我的c++实现效果:


黑白滤镜.png

底片:
算法原理:将当前像素点的RGB值分别与255之差后的值作为当前点的RGB值,即
R = 255 – R;G = 255 – G;B = 255 – B
下面是我的c++实现效果图:
底片效果.png

浮雕效果:
浮雕算法其实也很简单。即相邻的像素点进行做差求值。之后再加上128(正好是灰度值的平均值)。因为一般来说,相邻像素之间的差别不是特别大,差别大的一般都是在边缘。所以该算法能很好的保留住边缘,而且处理过后边缘处的亮度会比周围像素高。而差别不大的像素的差值接近于0,加上128后就约等于128。即一个灰度平均值的表现。最终图像就形成了浮雕效果。这种算法处理下,因为rgb三个通道的值不完全相等,所以处理过后的图像会有一些颜色彩带现象。可以通过灰度化算法进行优化去除彩带。
下面是我的c++实现效果图:
浮雕效果.png

你可能感兴趣的:(图像滤镜处理算法:灰度、黑白、底片、浮雕)