幂次变换又称伽马变换:
✓ c和 γ是正常数
✓ γ < 1 提高灰度级,在正比函数上方,使图像变亮
✓ γ > 1 降低灰度级,在正比函数下方,使图像变暗
创建滑动条改变Gama值
• 例:人体胸上部脊椎骨折的核磁共振图像
代码如下:
/*
*伽马变换--s=cr^γ
* 滑动条改变Gama值,γ<1时将较窄范围的暗色输入转换为较宽范围的输出值;γ>1时将较窄范围的亮色输入转换为较宽范围的输出值。
* OpenCV代码实现,注意此代码使用与灰度图像
*/
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
#define WINDOW_NAME "【滑动条改变Gama值】" //为窗口标题定义的宏
const int g_nMaxGamaValue = 25;//Alpha值的最大值
int g_nGamaValueSlider;//滑动条对应的变量
double g_spiderValue;
//声明存储图像的变量
Mat g_srcImage1;
Mat g_dstImage;
void gammaTransformation(cv::Mat& matInput, cv::Mat& matOutput, float fGamma, float fC /*= 1.0f*/)
{
assert(matInput.elemSize() == 1);
//构造输出图像
matOutput = cv::Mat::zeros(matInput.rows, matInput.cols, matInput.type());
//循环中尽量避免除法
float fNormalFactor = 1.0f / 255.0f;
for (size_t r = 0; r < (size_t)matInput.rows; r++)
{
unsigned char* pInput = matInput.data + r * matInput.step[0];
unsi