实在是太喜欢Richard Szeliski的这本书了,每一章节(after chapter3)都详述了该研究方向比较新的成果,还有许多许多的reference,如果你感兴趣,完全可以看那些参考论文
Point operators(点算子)
点运算是最简单的一类图像处理运算,如简单的对比度变换,亮度变换
Pixel transform(像素变换)
g(x) = af (x) +b a和b有时被认为用来控制对比度和亮度,在我的opencv栏目有个例子是简单的对比度和亮度变换,用的就是这个公式
g(x) = a(x)f (x) + b(x) a,b不一定是常数,可以是空间上的函数
g(x) = (1 − α)f0(x) + αf1(x) α from0→1 可以实现两幅图像的淡入淡出
在OpenCV里有addWeighted( src1, alpha, src2, beta, 0.0, dst);这个函数,就是实现这个式子的
g(x) = [f(x)]1/γ 这是伽马校正属于幂变换,通常用于图像预处理阶段,对于大多数数字摄像机来说γ≈2.2
除了伽马校正,幂变换在控制对比度也很有用,可以取不同的γ试一试
g(x) = L -1 -f(x) 灰度级属于[0,L-1] 这是图像反转 可用于增强嵌入与图像暗色区域的白色或灰色细节
g(x) = clog(1+f(x)) 对数变换
Color transform(彩色变换)
好像没有讲什么 = =
Compositing and matting(合成与抠图)
就是把一张图片里的东西(比如人)挖下来,然后合成到另一张图片中
从一个场景中裁剪出前景物体叫抠图,将物体插入到另一幅图片中叫合成
C=(1−α)B+αF. (覆盖算子)
作者说,在这本书中,关心另外一个常用的算子(在Ex2中,等我做了再更新这里)
Histogram equalization(直方图均衡化)
我对这个非常熟悉,因为之前的图像处理课写过,还看过Pizer那有名的论文也用Java实现了CLAHE
直方图均衡化的思想就是这样的。假设我有灰度级255的图像,但是都是属于[100,110]的灰度,图像对比度就很低,我应该尽可能拉到整个[0,255]
下面是直方图均衡化的代码,有个累积函数的概念,其实很简单。
我先计算出每个灰度级g(0),g(1)......g(255)点的个数,sum为图像width*height
那么累计函数c(0) = g(0)/sum
c(1) = (g(0)+g(1))/sum
......
c(255) = 1
public int[][] Histogram_Equalization(int[][] oldmat)
{
int[][] new_mat = new int[height][width];
int[] tmp = new int[256];
for(int i = 0;i < width;i++){
for(int j = 0;j < height;j++){
//System.out.println(oldmat[j][i]);
int index = oldmat[j][i];
tmp[index]++;
}
}
float[] C = new float[256];
int total = width*height;
//计算累积函数
for(int i = 0;i < 256 ; i++){
if(i == 0)
C[i] = 1.0f * tmp[i] / total;
else
C[i] = C[i-1] + 1.0f * tmp[i] / total;
}
for(int i = 0;i < width;i++){
for(int j = 0;j < height;j++){
new_mat[j][i] = (int)(C[oldmat[j][i]] * 255);
new_mat[j][i] = new_mat[j][i] + (new_mat[j][i] << 8) + (new_mat[j][i] << 16);
//System.out.println(new_mat[j][i]);
}
}
return new_mat;
}
自适应直方图均衡化
AHE算法通过计算图像的局部直方图,然后重新分布亮度来来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。
想像以下一幅图像,左上角是黑乎乎的一团,但是其他区域很正常,如果只用HE,那么黑乎乎的那团是没法有多大改进的。
于是,你可以把那黑乎乎的一团当作一张图片,对那一部分进行HE,其实这就是AHE了,就是把图片分片处理,8*8是常用的选择。
然后,你就可以写一个循环来操作,算法和HE是一模一样的,当然可以工作,只是速度比较慢。
正如我下面代码所写的,利用双线性插值。
我以前写CLAHE时候看的博客找不到了T_T http://m.blog.csdn.net/blog/gududeyhc/8997009这里有但是远远没我以前看的那篇讲的清楚,如果你去看Pizer的论文估计要花很多的时间。下面是我用Java写的CLAHE.
CLAHE比AHE多了裁剪补偿的操作 </