OpenCV非锐化掩蔽和高提升滤波
非锐化掩蔽和高提升滤波
在印刷和出版界使用多年的图像锐化处理过程是从原图像中减去一幅非锐化(平滑过的)版本。这个称为非锐化掩蔽的处理过程由下列步骤组成:
1、模糊原图像
2、从原图像中减去模糊图像(产生的差值图像称为模板)
3、将模板加到原图像上。
另F(x,y)表示模糊图像,非锐化掩蔽以公式形式描述如下。首先我们要先得到模板:
gmask(x,y)=f(x,y) - F(x,y)
然后在原图像上加上该模板的一个权重部分:
g(x,y)= f(x,y) + k* gmask(x,y)
通常,我们会在上式中包含一个权重系数k(k>=0)。当k=1时,我们得到上面定义的非锐化掩蔽。当k>1时,该处理称为高提升滤波。当k<1时,则不强调非锐化模板的贡献。
代码:
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
using namespace cv;
int main( int argc, char** argv )
{
Mat src, gaussi;
const char* imageName = argc >=2 ? argv[1] : "123.tif";
int k = 3;
src = imread( imageName, IMREAD_COLOR ); // Load an image
// Check if image is loaded fine
if(src.empty()){
printf(" Error opening image\n");
printf(" Program Arguments: [image_name -- default ../data/lena.jpg] \n");
return -1;
}
imshow("src", src);
GaussianBlur(src, gaussi, Size(5, 5), 3, 3);
imshow("gaussi", gaussi);
Mat mask;
cv::subtract(src, gaussi, mask);
imshow("mask", k*mask);
Mat imageEnhance;
cv::add(src,k*mask, imageEnhance );
imshow("dst", imageEnhance);
waitKey(0);
return 0;
}
结果:
dst更清晰了