赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 图像处理与人工智能

首页 > 专业技术 > 图像处理与人工智能 > 实用图像处理算法
实用图像处理算法
  1. 直方图:
  2. 图像亮度、对比度和饱和度调整:
  3. 图像特效:
  4. 彩色图像锐化处理
  5. Photoshop中的部分图层复合算法
  6. 图像光照效果
  7. 滤镜效果

1. 直方图:

数字图像处理中,最简单和最有用的工具是直方图Density Histogram,它概括了一幅图像的灰度级,能说明图像灰度分布的总体信息。
灰度直方图描述的是图像中具有该灰度级的像素的个数,其横坐标是灰度级,纵坐标是该灰度级出现的概率,即等于该灰度的像素与总像素数之比。灰度直方图反映了一幅图像中的灰度级与出现这种灰度的概率之间的关系。
一幅连续图像的直方图是其阈值面积函数的导数的负值。负号的出现是由于随着灰度级D的增加相应的阈值面积A(D)在减小。直方图对应于密度函数。在图像中,对像素的灰度值做归一化处理,r的值限定在[0 1]区间内,r=0代表黑,r=1代表白。
直方图是一幅图像中各个像素灰度值出现次数的统计结果,只反映该图像中不同灰度值出现的次数,丢失了其所在位置的信息。
直方图给出了一个简单可见的指标,用来判断一幅图像是否合理地利用全部或几乎全部的灰度级。如果图像数字化的级数小于256,那么丢失的信息除非重新数字化图像,否则将不能恢复。双峰直方图可以选择谷底的灰度值T作为分割图像中背景与目标的阈值。

2. 图像亮度、对比度和饱和度调整:

1)调整亮度Brightness:

图像亮度本质上就是像素灰度值,取值0~255,0表示黑色,255表示白色。调整亮度就是对图像的像素值在RGB每个分量上计算平均值,然后用平均值乘以亮度系数,当系数为1时表示亮度不变,当系数小于1时亮度变暗,系数大于1时亮度变亮。也可以将图像从RGB色彩空间转换到HSL色彩空间,亮度对应L分量,可以直接调整,然后转换回RGB色彩空间,效果更好,但计算量比较大。

2)调整对比度Contrast:

调整对比度有多种算法,常见的直观算法步骤:计算图像像素的RGB每个分量的平均值,对每个待调整的像素减去平均值乘以对比度调整系数,然后加上RGB分量的平均值。最后要归一化处理,使值在0~255之间。
为了计算方便,可以先把0~255范围的数值除以255转换到0~1范围,然后使用公式((Crgb - 0.5) * contrast + 0.5) * 255,这样计算比较方便,结果转换回了0~255范围。
RGB色彩空间中亮度对比度调整的计算:
灰度化:Gray=0.229R+0.587G+0.114B
灰度均值计算:
灰度均值计算
亮度对比度调节:
亮度对比度调节
亮度对比度调节
亮度对比度调节

3)调整饱和度Saturation:

图像饱和度是HSL色彩空间的S分量。对RGB图像,要把像素值从RGB色彩空间转换到HSL色彩空间,调整完毕后再转换回RGB色彩空间。常用调整系数是0.25。
还有一种单一调节饱和度的算法:
  ·  计算RGB的最大值max和最小值:max=max(R,G,B),min=min(R,G,B)
  ·  HSL分量的L分量:L=(max+min)/2
  ·  饱和度计算:
饱和度计算
  ·  计算调整后的RGB:
饱和度计算

3. 图像特效:

1)彩色图像底片效果:

图像底片效果处理时,用255分别减去每个像素的红、绿、蓝3个分量值,得到3个新值。

2)彩色图像曝光处理:

逆转数值小于128的R、G、B三分量,即,如果某分量小于128,就用255减去此值得到新值;若大于128则保持不变。

3)彩色图像扩散处理:

使用rand()函数在图像中引入随机性,产生类似优化效果。具体方法是,从当前5x5相邻的像素中随机性地任意选择一个值作为当前像素的新值。

4)彩色马赛克处理:

图像划分为很多小块,每块内的像素值都取相同的值,一般可以通过计算小块像素之和的平均值得到新值。

5)彩色图像平滑处理:

① 邻域平滑处理:
邻域平均法是将原图像的每一个像素都由其相邻的nxn像素的平均值代替,一般使用3x3邻域。
② 线性平滑滤波:
空间线性平滑滤波常用模板有:
空间线性平滑滤波模板
③ 高斯滤波模板:
当参数r=1,sigma=1时,经过修正得到一个经典的3×3及5×5高斯滤波模板:
高斯滤波模板
得到高斯模板后,用它对图像卷积,就可以得到高斯滤波图像了。
高斯滤波器的模板系数随着与模板中心距离的增大而减小。对于一个(2k+1)×(2k+1)大小的高斯滤波器模板,取模板中心为原点得到各位置坐标,将坐标带入下式即可得到系数:
高斯滤波器的模板系数
对高斯模板,最重要的参数就是σ,其决定了数据的离散程度。

4. 彩色图像锐化处理:

1)水平增强:

增强图像水平方向也是一种高通滤波,模板为[-1 2 -1]。

2)垂直增强:

增强图像垂直方向模板为:
增强图像垂直方向模板

3)图像双向增强:

图像双向增强的模板为:
图像双向增强模板

4)梯度锐化:

采用的算法是将要处理的像素与它对角线的像素之间的差值乘以一个锐化系数,然后再加上原来的像素值。可以计算图像像素f(i,j)与其边缘上相邻像素f(i-1,j-1)值的差的绝对值的1/4之和:
图像双向增强模板

5)USM锐化:

USM锐化,即Unsharp Masking,可以去除细小的干扰和噪声,边界清晰噪声较小。经典USM锐化技术是通过增强图像的高频内容来增强图像的视觉效果。框图:
USM锐化
图中,x为输入信号,y为输出信号,z为校正信号,λ表示锐化强度因子。z一般通过对x使用高通滤波器得到,常使用拉普拉斯算子。公式:
  y(n,m)=x(n,m)+λz(n,m)
  z(n,m)=4x(n,m)-x(n-1,m)-x(n+1,m)-x(n,m-1)-x(n,m+1)
PS中的USM锐化有半径Radius、数量Amount和阈值Threshold三个参数。原图为S,锐化结果为D,计算步骤:
  ⑴  根据半径Radius,对S进行高斯滤波得到图A。
  ⑵  计算校正信号Z:Z=S-A
  ⑶  根据Z和Threshold计算二值蒙版Mask M:
USM锐化
  ⑷  根据半径Radius对M进行高斯滤波,得到Alpha通道:Alpha=Gauss(M)
  ⑸  根据Amount和Alpha计算D:
USM锐化

6)高通滤波器:

高通滤波器对图像的低频分量进行抑制,常用模板为:
高通滤波器
三个模板分别为基本高通、中等高通、过量高通模板。

7)浮雕处理:

浮雕处理将图像的变化部分突出,而相同颜色部分被淡化,使图像出现纵深感,从而达到浮雕效果。算法是将要处理的像素值与处于前一个相邻像素间的差值,这样只有颜色变化区才会出现颜色,而颜色平淡区因差值几乎为零则变成黑色,可以通过加上一个常量来增加亮度:
浮雕处理

8)霓虹处理:

计算原图像当前像素f(i,j)的红、绿、蓝分量与其相同行f(i+1,j)及相同列f(i,j+1)相邻像素的梯度,即差的平方和的平方根,然后将梯度值作为处理后的新值:
浮雕处理
浮雕处理

5. Photoshop中的部分图层复合算法:

1)正片叠底: 结果=混合色X基色/255
可以表示为:C(i,j)=A(i,j)*B(i,j)
2)滤色: 结果=255-混合色补色X基色补色/255
3)叠加:
结果色=255-(255-混合色)X(255-基色)/128    (当基色>128)
结果色=混合色X基色/128       (当基色<=128)
4)颜色加深:
C(i,j)=255-255*((255-A(i,j))/B(i,j)
5)颜色混合: 采用下层的亮度和上层的色调和饱和度

6. 图像光照效果:

当聚光灯照射到一幅图像中心。从中心到边缘,随着距离变化,亮度不断变暗。首先要计算中心点到边缘的距离Dmax=Math.sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)),并计算每个像素点P到中心点的距离D,计算出系数factor=1-(D/Dmax)
然后根据系数来计算各点的像素:
scale=1-d/dmax;
scale=scale*scale;
pixel[r]=scale*r;
pixel[g]=scale*g;
pixel[b]=scale*b;

7. 滤镜效果:

1)空气风格:

对图像的每个像素在RGB三个分量上分别两两相加,然后取平均值作为新像素值:
pixel[r]=(g+b)/2;
pixel[g]=(r+b)/2;
pixel[b]=(g+r)/2;

2)燃情风格:

对RGB像素值三个分量进行简单的求取平均值后再处理:
gray=(r+g+b)/3;
pixel[r]=clamp(gray*3);
pixel[g]=gray;
pixel[b]=gray/3;

3)雾风格:

通过建立查找表实现。查找表可以用以下方法建立:
  fogLimit=40,fogArray[256];
  for(var i=0;i<fogArray.length;i++){
    if(i>127){
      fogArray[i]=i-fogLimit;
      if(fogArray[i]<127) fogArray[i]=127;
    }else{
      fogArray[i]=i+fogLimit;
      if(fogArray[i]>127) fogArray[i]=127;
    }
  }

分别对图像的RGB三个分量按上式进行处理。

4)冰冻风格:

属于冷色调调色,饱和度与亮度相对降低:
pixel[r]=clamp(Math.abs((r-g-b)*1.5);
pixel[g]=clamp(Math.abs((g-b-pixel[r])*1.5);
pixel[b]=clamp(Math.abs(b-pixel[r]-pixel[g])*1.5);

5)熔岩风格:

先将像素值三个分量相加求平均值再进行运算: gray=(r+g+b)/3;
pixel[r]=gray;
pixel[g]=Math.abs(b-128);
pixel[b]=Math.abs(b-128);

6)金属风格:

tr=Math.abs(r-64);
tg=Math.abs(tr-64);
tb=Math.abs(tg-64);
gray=((222*tr+707*tg+71*tb)/1000);
tr=gray+70;
pixel[r]=clamp(tr+(((tr-128)*100)/100));
tg=gray+65;
pixel[g]=clamp(tg+(((tg-128)*100)/100));
tb=gray+75;
pixel[b]=clamp(tb+(((tb-128)*100)/100));

7)海洋风格:

海洋风格就是把像素值RGB的三个分量相加取得平均值,然后将最大的比重放到蓝色分量:
gray=(r+g+b)/3;
pixel[r]=clamp(gray/3);
pixel[g]=gray;
pixel[b]=clamp(gray*3);

8)湖水风格:

gray=(r+g+b)/3;
pixel[r]=clamp(gray-g-b);
pixel[g]=clamp(gray-pixel[r]-b);
pixel[b]=clamp(gray-pixel[r]-pixel[g]);

9)彩虹风格:

根据一张彩虹图片初始化生成彩虹查找表,通过查找表实现。读入彩虹图像后读取查找表:
  for(var col=0;col<width;col++){
    rainbowArray[col]=poxels[col];
  }

然后对图像的RGB三个分量按上式获得的查找表进行映射。

10)老照片效果:

R=0.393*r+0.769*g+0.189*b
G=0.349*r+0.686*g+0.168*b
B=0.272*r+0.534*g+0.131*b

11)素描效果:

图像A灰度化成为图像B
图像B反转颜色成为图像C
图像C高斯模糊成为图像D
混合图像B和D,模式为颜色减淡:E=B+(B*D)/(255-D)

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659