首页 > 代码库 > 图像亮度调节--幂次变换
图像亮度调节--幂次变换
幂次变换的基本表达式为:y=cxr+b
其中c、r均为正数。与对数变换相同,幂次变换将部分灰度区域映射到更宽的区域中。当r=1时,幂次变换转变为线性变换。
(1) 当0<r<1时,变换函数曲线在正比函数上方。此时扩展低灰度级,压缩高灰度级,使图像变亮。这一点与对数变换十分相似。
(2) 当r>1时,变换函数曲线在正比函数下方。此时扩展高灰度级,压缩低灰度级,使图像变暗。
代码如下:
int PowerTrans(Mat & pSrc,double r,double b=0, double c=1) { //y=cxr+b // 映射表,用于256种灰度变换后的值 BYTE map[256]; // 保存运算后的临时值 double dTemp; for (int i = 0; i < 256; i++) { // 计算当前像素变换后的值 dTemp = c * pow(i / 255.0, r) * 255 + b; // 如果超界则修改其值 if (dTemp < 0) dTemp = 0.0; else if (dTemp > 255) dTemp = 255; // 四舍五入 map[i] = int(dTemp + 0.5); } int columns=pSrc.cols; int channels = pSrc.channels(); int count = 0; for(int i=0;i<pSrc.rows;i++) { uchar* p=pSrc.ptr(i);//获取Mat某一行的首地址 for(int j=0;j<columns*channels;j++) { *(p+j) = map[*(p+j)]; } } return 0; }
图像亮度调节--幂次变换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。