欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ruby实现的图片滤镜算法代码

程序员文章站 2022-06-24 11:06:01
原图 一、灰度算法 彩色照片每一个像素的颜色值由红、绿、蓝三种值混合而成,红绿蓝的取值分别由很多种,于是像素的颜色值也可以有很多种颜色值,这就是彩色图片的原理,...

原图

Ruby实现的图片滤镜算法代码

一、灰度算法

彩色照片每一个像素的颜色值由红、绿、蓝三种值混合而成,红绿蓝的取值分别由很多种,于是像素的颜色值也可以有很多种颜色值,这就是彩色图片的原理,而灰度照片则只有256种颜色,一般的处理方法是将图片颜色值的rgb三个通道值设为一样,这样图片的显示效果就会是灰色。

灰度处理一般有三种算法:

  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%

下面是加权平均值法的ruby实现:

灰度效果:

Ruby实现的图片滤镜算法代码

二、二值化

图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。

图像二值化常常用于破解验证码等图片识别应用上

二值化效果

Ruby实现的图片滤镜算法代码

 三、底片

底片效果的实现很简单,就是将rgb的每一个通道值取反,就是用255去减

底片效果

Ruby实现的图片滤镜算法代码

四、浮雕效果

浮雕的算法相对复杂一些,用当前点的rgb值减去相邻点的rgb值并加上128作为新的rgb值。由于图片中相邻点的颜色值是比较接近的,因此这样的算法处理之后,只有颜色的边沿区域,也就是相邻颜色差异较大的部分的结果才会比较明显,而其他平滑区域则值都接近128左右,也就是灰色,这样
就具有了浮雕效果。

在实际的效果中,这样处理后,有些区域可能还是会有”彩色”的一些点或者条状痕迹,所以最好再对新的rgb值做一个灰度处理。

浮雕效果

Ruby实现的图片滤镜算法代码

项目主页

/rubyimageprocess