同态滤波:利用广义叠加原理对同态系统进行滤波。 基本原理问度娘,附一个博文链接:同态滤波原理。
同态滤波处理的基本流程如下:
S(x,y)---->Log---->DFT---->频域滤波---->IDFT---->Exp---->T(x,y)
S(x,y)表示原始图像
T(x,y)表示处理后的图像
Log 代表对数运算
DFT 代表傅里叶变换(实际操作中运用快速傅立叶变换DFT)
IDFT 代表傅里叶逆变换(实际操作中运用快速傅立叶逆变换IFFT)
Exp 代表指数运算。
声明该方法只针对灰度图像
第一步:log变换
将灰度图像转化为CV32F或者CV_64F格式,方便进行后续的操作:
srcImage.convertTo(srcFloatImage,CV_32F);
使用opencv自带的log函数对矩阵进行log变换:
cv::log(srcFloatImage+1,logImage); //原图+1 我猜是为了排除0的情况吧
第二步:傅里叶变换
使用cv::dct(input,output)函数进行傅里叶变换: