1. 程式人生 > 其它 >OpenCV 影象增強(頻率域)

OpenCV 影象增強(頻率域)

技術標籤:OpenCV

總結最近專案中常用的影象增強方法:

一. 非銳化模板(鈍化模板)

非銳化模板的處理步驟:

1. 高斯低通濾波影象f_{LP}(x,y)

2. 從原影象減去模糊影象(產生的差值影象稱為模板)g_{mask}(x,y) = f(x,y)-f_{LP}(x,y)

3. 將模板加到原影象上g(x,y) = f(x,y)+g_{mask}(x,y)

二. 高提升濾波

高提升濾波的處理步驟:

1. 模糊原影象f_{LP}(x,y)

2. 從原影象減去模糊影象(產生的差值影象稱為模板)g_{mask}(x,y) = f(x,y)-f_{LP}(x,y)

3. 將模板加到原影象上g(x,y) = f(x,y)+k*g_{mask}(x,y)

        cv::Mat srcMat = imread("ImageEnhancement\\0_dust.bmp");

	cv::Mat grayMat = srcMat.clone();
	if (grayMat.channels() != 1) cvtColor(grayMat, grayMat, cv::COLOR_BGR2GRAY);

	cv::Mat blurMat;
	GaussianBlur(grayMat, blurMat, cv::Size(15, 15), 3);

	//擴充套件四周邊界確保傅立葉變換結果
	const int fillSize = 100;
	Mat imgGrayEx;
	cv::copyMakeBorder(blurMat, imgGrayEx, fillSize, fillSize, fillSize, fillSize, cv::BORDER_DEFAULT);

	//傅立葉低通濾波獲取背景,可公開引數低通值
	cv::Mat lpf3 = m_conFunCls.GaussianLPFilter(imgGrayEx.rows, imgGrayEx.cols, 20, false, CV_32F);
	cv::Mat imgFreqBluredEx3 = m_conFunCls.GaussFreqBlur(imgGrayEx, lpf3, CV_32FC1);
	imgFreqBluredEx3 = imgFreqBluredEx3(cv::Rect(fillSize, fillSize, blurMat.cols, blurMat.rows));
	imgFreqBluredEx3.convertTo(imgFreqBluredEx3, CV_8UC1);

	//非銳化模板
	cv::Mat mask = grayMat - blurMat;

	//非銳化遮蔽
	cv::Mat dstMat = grayMat + mask;

	//高提升濾波
	cv::Mat dstMat2 = grayMat + 4.5*mask;

	//非銳化模板(高斯低通濾波模板)
	cv::Mat gmask = grayMat - imgFreqBluredEx3;

	//非銳化遮蔽(高斯低通濾波模板)
	cv::Mat gdstMat = grayMat + mask;

	//高提升濾波(高斯低通濾波模板)
	cv::Mat gdstMat2 = grayMat + 4.5*mask;

三.高頻強調濾波

高頻強調濾波的處理步驟:

1. 獲取高斯高通濾波影象g_{mask}(x,y) = f_{HP}(x,y)

2. 將模板加到原影象上g(x,y) = f(x,y) +k*g_{mask}(x,y)

3. 更一般的公式為:g(x,y) = k_1*f(x,y)+k_2*g_{mask}(x,y)