OpenCV 影象增強(頻率域)
阿新 • • 發佈:2021-01-24
技術標籤:OpenCV
總結最近專案中常用的影象增強方法:
一. 非銳化模板(鈍化模板)
非銳化模板的處理步驟:
1. 高斯低通濾波影象
2. 從原影象減去模糊影象(產生的差值影象稱為模板)
3. 將模板加到原影象上
二. 高提升濾波
高提升濾波的處理步驟:
1. 模糊原影象
2. 從原影象減去模糊影象(產生的差值影象稱為模板)
3. 將模板加到原影象上
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. 獲取高斯高通濾波影象
2. 將模板加到原影象上
3. 更一般的公式為: