天天看點

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;

}

結果:

OpenCV非銳化掩蔽和高提升濾波

dst更清晰了

繼續閱讀