对数变换的通用形式为:
对数函数的一般形状的任何曲线,都能完成图像灰度级的扩展/压缩;但幂律变换对于这个目的更为通用;
代码实现:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//注意opencv中的log函数只能处理灰度图片,或单层图片
//基于源图像的方法1
Mat logTransform1(Mat srcImage, int c)
{
if (srcImage.empty())
cout << "No data" << endl;
Mat resultImage = Mat::zeros(srcImage.size(), srcImage.type());
add(srcImage, Scalar(1.0), srcImage); //计算 r+1
srcImage.convertTo(srcImage, CV_32F); //转化为32位浮点型
log(srcImage, resultImage); //计算log(1+r)