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

[图像处理]图像的灰度变换

程序员文章站 2024-03-15 08:48:17
...

图像的灰度变换是图像的一种点处理算法,指图像任意点的增强仅仅依赖于该点的灰度值。而在下一节将会使用的是图像的模板变换。

1.图像的反转变换

灰度级为[0,L-1]则:反转变换为:g(x,y)=L-1-f(x,y)

其中g(x,y)位输出图像,f(x,y)为输入图像。

2.图像的对数变换

此种变换使一窄带低灰度输入图像转换映射为一宽带输出图像:

y = a + log(1+x)/b

其中a控制曲线的垂直偏移量,b控制曲线的弯曲程度,b越大则曲线越弯曲。

3.图像的幂次变换:

y = cx**r + b

其中c,r均为正数,使x与y的取值均在0-255则;

y = 255c(x/255)**r+b

幂次变换的性质为:

当r<0时,变换函数曲线在正比线上方,此时与对数函数类似,使图像变亮

当r>0时,变换函数曲线在正比线下方,此时扩展高灰度级,压缩低灰度级,使图像变暗。

4.灰度均衡化

灰度均衡化的公式推导涉及到了微积分的知识,均衡化的作用是使一副图像其像素占有全部可能的灰度级并且分布均匀,则这样的图像有高对比度和多变的灰度色调。

{
	float newMi[256];
	LPBYTE p_data = getData();
	int width = getWidth();
	int height = getHeight();
	LPBYTE temp = new BYTE[width*height];
	memcpy(temp, p_data, width*height);
	int bMap[256];
	newMi[0] = midu[0];
	for (int i = 1; i < 256; i++) {
		newMi[i] = newMi[i - 1] + midu[i];
	}
	for (int i = 0; i < 256; i++)
	{
		bMap[i] = (int) (newMi[i] * 255.0 + 0.5f);//这里后边的式子一定要括起来因为强制类型转换的优先级要高
	}
	for(int j=0;j<height;j++)
		for(int i=0;i<width;i++)
		{
			BYTE T = temp[width*j+i];
			temp[width*j+i] = bMap[T];
		}
	memcpy(p_data, temp, width*height);
}