java图像处理之幂律变换

        幂律(伽马)变换公式:s = cr^\gamma,γ取值范围(0,+∞)

        对图像做幂律变换处理,当γ取值(0,1)可以将图像较暗的灰度值映射到更大的灰度值,同时较亮部分变化较小;γ取值(1,+∞)可以将较亮部分映射到更低的亮度,而更暗的部分变化较小。

        处理彩色图像,只需要将RGB取出,分别进行幂律变换即可。公式中,c可以取值255,r = a/255,a为像素上RGB分量之一,那么整个公式的取值范围为(0,255),不考虑计算过程的四舍五入的话,幂律变换的操作是可逆的。

实现代码如下:

public void gammaTranverse(BufferedImage image, double param) {
		for (int i = 0; i < image.getWidth(); i++) {
			for (int j = 0; j < image.getHeight(); j++) {

				// 将rgb转换为各个值
				int rgb = image.getRGB(i, j);
				double R = (rgb >> 16) & 0xff;
				double G = (rgb >> 8) & 0xff;
				double B = rgb & 0xff;

				// 进行伽马变换
				R = 255 * Math.pow(R / 255, param);
				G = 255 * Math.pow(G / 255, param);
				B = 255 * Math.pow(B / 255, param);
				// 将值转换为rgb
				rgb = ((clamp(255) & 0xff) << 24) | ((clamp((int) R) & 0xff) << 16) | ((clamp((int) G) & 0xff) << 8)
						| ((clamp((int) B) & 0xff));
				image.setRGB(i, j, rgb);
			}
		}
	}

测试结果:

1、原图。这是一张光线暗到几乎很难直接看到地面物体的航拍影像。通过幂律变换进行处理,增强较暗影像。

2、γ取值为0.4,通过幂律变换处理后效果,可以看到影像增强效果非常明显,影像大部分区域由几乎不可见变得可见。

3、这是一幅光线比较强,且受到云雾干扰的影像。

4、γ取值为2处理后效果,影像整体变暗,但对比度更明显,受光线和云雾干扰造成的泛白现象减弱,整体视觉效果有所提升。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheMatrixs

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值