图像处理 _伽玛变换|幂次变换

醉酒当歌 提交于 2019-12-09 20:45:06
void PowerTrans(BYTE* pixel, BYTE* tempPixel, UINT width, UINT height, double b, double c, double r)
{
	BYTE map[256];
	double dTemp;
	for (int i = 0; i < 256; i++){
		dTemp = c * pow((double)i / 255.0, r) * 255.0 + b;
		if (dTemp < 0) dTemp = 0.0;
		else if (dTemp > 255) dTemp = 255;
		//四舍五入
		map[i] = int(dTemp + 0.5);
	}
	for (UINT i = 0; i < width * height; i++){
			tempPixel[i] = map[pixel[i]];
	}
}

仅针对连续存储的灰度数据。

假设c和b都为0,主要的变量为r

1.当r>1时,图像中高灰度值区域的对比度得到增强。

2.当r<1时,图像中低灰度值区域的对比度得到增强。

3.当r=1时,为线性变换,不改变图像的值。

该处要注意i前面的(double),255后的小数点不能省,不然得出的dTemp恒为0.00000.

原因是计算式结果被强制转换成了int,另外作为中括号中的索引最好加上int,作用是截断小数点。

以下变换采用b=0.0,c=1.0,r=0.5,针对低灰度值区域增强其对比度。

变换前:

变换后:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!