文章目录
- 一、同态滤波大体原理
- 二、代码
- 三、效果举例
一、同态滤波大体原理
之前介绍的几个锐化、增强方法,包括更早之前介绍的图像模糊方法,都是基于空间域进行处理,也就是直接对目标点周边像素值进行各种数学运算。而这篇文章提到的同态滤波,就要更厉害了,是基于频率域的,要用到Dft()傅里叶变换函数。
高等数学比较好的读者可能很好理解,我看了半天也没明白是什么意思,下面都是我自己的理解,可能有错的啊。傅里叶变换是一个非常厉害的操作,图像的原始表达方式是 m * n个像素点组合,这个叫空间域,空间域大小就是m * n,转成频率域呢,用处就大了,因为高频的就是噪声或者物体边缘,低频的就是图像内比较平缓的部位,比如蓝天、纯色背景、雪地等等。因为有了高低频,就可以提取出边缘、噪声来,进一步就可以对边缘、噪声进行有针对性的处理。
通过傅里叶转换,在频率域内对图像进行处理,也是很重要、很有效的一种办法,属于比较高级的应用,很值得用一大章来仔细讲解,可惜我不会,就免了吧。
二、代码
网上有很对专家利用OpenCV 实现同态滤波,原理也讲了不少,读者们可以去找找。我这里也是根据他们的原始代码,转换成Emgu CV + C#的形式来实现,代码如下:
Mat dstMat = new Mat();
// 1、log变换,将源图像转为float类型 然后进行log变换
Mat gray = srcMat.Clone();
// CvInvoke.Resize(gray, gray, new System.Drawing.Size(1280, 720), 0, 0, Inter.Linear);
CvInvoke.CvtColor(gray, gray, ColorConversion.Bgr2Gray);
Mat f = new Mat();
gray.ConvertTo(f, DepthType.Cv32F, 1 / 255.0);
f += 0.1;
CvInvoke.Log(f, f);
// 2、傅里叶变换
Mat fourierMat = new Mat();
CvInvoke.Dft(f, fourierMat, DxtType.Forward, 0);
// 3、构造一个高斯频域高通滤波器
Mat filter = new Mat(fourierMat.Rows, fourierMat.Cols, DepthType.Cv32F, 1);
filter.SetTo(new MCvScalar(0, 0, 0));
Image<Gray, double> filterImage = filter.ToImage<Gray, double>();
for (int y = 0; y < filter.Rows; y++)
{
for (int x = 0; x < filter.Cols; x++)
{
int xx = x > filter.Cols / 2 ? x - filter.Cols : x;
int yy = y > filter.Rows / 2 ? y - filter.Rows : y;
double duv = Math.Sqrt((xx * xx) + (yy * yy));
double d0 = 3;
double huv = ((1.0 - 0.4) * (1 - Math.Pow(2.71828, -1 * (duv * duv / (d0 * d0))))) + 0.4;
filterImage.Data[y, x, 0] = huv;
}
}
filter = filterImage.Mat;
filter.ConvertTo(filter, DepthType.Cv32F);
// 4、滤波,将傅里叶变换过后的图像与滤波器相乘:
CvInvoke.Multiply(fourierMat, filter, fourierMat, 1); // 相乘后,最大值255,最小值0
// 5、傅里叶逆变换,指数变换(图像还原)
CvInvoke.Dft(fourierMat, dstMat, DxtType.InvScale, 0);
CvInvoke.Exp(dstMat, dstMat);
dstMat -= 0.1;
// 6、显示
CvInvoke.Imshow("Destination image,methord 2, " + dstMat.Size.ToString(), dstMat);
不要问为什么,因为我也看不懂,对于频率域操作,代码能跑起来就是万幸了。
三、效果举例
原始素材定义为srcMat,如下:
还是这张夜晚天桥的照片,执行上述代码,同态滤波增强后的图像如下:
同态滤波就是灰度增强,使图形明亮更均匀,而且明亮处的纹理保留的很好。代码执行起来速度很快,效果也很好,值得有兴趣的同学们去研究研究。再举个例子加深印象,如下:
原创不易,请勿抄袭。共同进步,相互学习。