Computer Vision: Algorithms and ApplicationsのImage processing

实在是太喜欢Richard Szeliski的这本书了,每一章节(after chapter3)都详述了该研究方向比较新的成果,还有许多许多的reference,如果你感兴趣,完全可以看那些参考论文

Point operators(点算子)

点运算是最简单的一类图像处理运算,如简单的对比度变换,亮度变换

Pixel transform(像素变换)

g(x) = af (x) +b    a和b有时被认为用来控制对比度和亮度,在我的opencv栏目有个例子是简单的对比度和亮度变换,用的就是这个公式

g(x) = a(x)(x) + b(x)    a,b不一定是常数,可以是空间上的函数

g(x) = (1 α)f0(x) + αf1(x)   α from0可以实现两幅图像的淡入淡出

在OpenCV里有addWeighted( src1, alpha, src2, beta, 0.0, dst);这个函数,就是实现这个式子的

g(x) = [f(x)]1    这是伽马校正属于幂变换,通常用于图像预处理阶段,对于大多数数字摄像机来说γ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.  (覆盖算子)

这个算子通过 (1 α )因子减弱了背景图像的影响,加入了对应于前景图像的彩色值(和不透明度)
作者说,在这本书中,关心另外一个常用的算子(在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多了裁剪补偿的操作 </
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值