生活随笔
收集整理的這篇文章主要介紹了
图像复原之维纳滤波
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本原理
圖像復原是圖像處理的重要組成部分,由于圖像在獲取和傳輸過程中通常不可避免的要受到一些噪聲的干擾,因此在進行其他圖像處理以及圖像分析之前,應該盡量將圖像復原到其原始真實狀態。圖像復原的關鍵問題是在于建立退化模型。圖像退化模型如下:
維納濾波器是一種自適應最小均方誤差濾波器,它最終的目的是使得復原圖像和原始圖像的均方誤差最小。省去推導過程,給出頻率的維納濾波公式
示例演示
在下面例子中,我們對退化函數進行了簡化,將退化函數置為1,因此維納濾波公式簡化為:
#include <opencv2\opencv.hpp>
#include <iostream>using namespace std
;
using namespace cv
;Mat
GetSpectrum(const Mat
&src
)
{Mat dst
, cpx
;Mat planes
[] = { Mat_
<float>(src
), Mat
::zeros(src
.size(), CV_32F
) };merge(planes
, 2, cpx
);dft(cpx
, cpx
);split(cpx
, planes
);magnitude(planes
[0], planes
[1], dst
);multiply(dst
, dst
, dst
);return dst
;
}Mat
WienerFilter(const Mat
&src
, const Mat
&ref
, int stddev
)
{Mat pad
, cpx
, dst
;int m
= getOptimalDFTSize(src
.rows
);int n
= getOptimalDFTSize(src
.cols
);copyMakeBorder(src
, pad
, 0, m
- src
.rows
, 0, n
- src
.cols
, BORDER_CONSTANT
, Scalar
::all(0));Mat
tmpR(pad
.rows
, pad
.cols
, CV_8U
);resize(ref
, tmpR
, tmpR
.size());Mat refSpectrum
= GetSpectrum(tmpR
);Mat
tmpN(pad
.rows
, pad
.cols
, CV_32F
);randn(tmpN
, Scalar
::all(0), Scalar
::all(stddev
));Mat noiseSpectrum
= GetSpectrum(tmpN
);Mat planes
[] = { Mat_
<float>(pad
), Mat
::zeros(pad
.size(), CV_32F
) };merge(planes
, 2, cpx
);dft(cpx
, cpx
);split(cpx
, planes
);Mat factor
= refSpectrum
/ (refSpectrum
+ noiseSpectrum
);multiply(planes
[0], factor
, planes
[0]);multiply(planes
[1], factor
, planes
[1]);merge(planes
, 2, cpx
);idft(cpx
, dst
, DFT_SCALE
| DFT_REAL_OUTPUT
);dst
.convertTo(dst
, CV_8UC1
);return dst
;
}int main(int argc
, char** argv
)
{char *imgName
= "D:\\TestData\\lena.jpg";Mat inputImg
;inputImg
= imread(imgName
, 0);if (!inputImg
.data
){cout
<< "No image data" << endl
;return -1;}imshow("OriginImage", inputImg
);cv
::Mat
noise(inputImg
.size(), inputImg
.type());float m
= (10);float sigma
= (50);cv
::randn(noise
, m
, sigma
); Mat noiseImg
=inputImg
+ noise
;imshow("NoiseImage", noiseImg
);Mat resultImg
= WienerFilter(noiseImg
, inputImg
, 50);imwrite("./result.jpg", resultImg
);imshow("ResultImage", resultImg
);waitKey(0);return 0;
}
運行結果
參考資料
總結
以上是生活随笔為你收集整理的图像复原之维纳滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。