DWT 如何帮助图像增强?
How DWT help in Image enhancement?
我在某处读到要去除噪声,请使用 4 级小波变换。任何人都可以让我了解它的真正帮助吗??
Wavelet 变换可以像傅立叶变换一样通过压缩降低质量来帮助您,因此一些细小的细节和噪声可以消失。
我建议您尝试 Gaussian blur 从图像中滤除单调噪声。就我而言,它比其他方法(包括小波)更有效。
基本思想是 "true"(无噪声)图像的 DWT 是稀疏的,即大部分 "image energy" 集中在几个孤立的 DWT bin 中,而噪声的 DWT也是噪声 - 它或多或少均匀地分布在 DWT bin 中。在嘈杂的海洋中找到一些稀疏的峰值比重建嘈杂的图像容易得多。
这里有一个简单的例子来说明原理(下面的 Mathematica 源代码)。如您所见,Lena 图像的 DWT(离散小波变换)大部分为零,噪声图像的 DWT 或多或少是纯噪声。 lena + noise 的 DWT 是两个 DWT 的总和(即 DWT 是线性变换)。在此 DWT 中选取最大的 N 值并从中重建图像可在保留边缘的同时有效地去除噪声,但它也去除了该特定小波 (CDF) 无法很好表示的结构,即纹理和对角线边缘:
Mathematica 代码:
img = ImageResize[ExampleData[{"TestImage", "Lena"}], 256]
wf = CDFWavelet[];
noise = Image[
RandomVariate[NormalDistribution[], ImageDimensions[img]]*0.05 +
0.5];
noisyImg = Image[ImageData[img] + ImageData[noise] - 0.5];
Grid[
{
{Image[img, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[img, wf]],
ImageSize -> 256]},
{Image[noise, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[noise, wf]],
ImageSize -> 256]},
{Image[noisyImg, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[noisyImg, wf]],
ImageSize -> 256]},
{Image[noisyImg, ImageSize -> 256],
" Highest 5000 DWT coefficients => ",
Image[InverseWaveletTransform[
WaveletThreshold[
DiscreteWaveletTransform[noisyImg, wf], {"LargestCoefficients",
5000}]], ImageSize -> 256]}
}]
我在某处读到要去除噪声,请使用 4 级小波变换。任何人都可以让我了解它的真正帮助吗??
Wavelet 变换可以像傅立叶变换一样通过压缩降低质量来帮助您,因此一些细小的细节和噪声可以消失。
我建议您尝试 Gaussian blur 从图像中滤除单调噪声。就我而言,它比其他方法(包括小波)更有效。
基本思想是 "true"(无噪声)图像的 DWT 是稀疏的,即大部分 "image energy" 集中在几个孤立的 DWT bin 中,而噪声的 DWT也是噪声 - 它或多或少均匀地分布在 DWT bin 中。在嘈杂的海洋中找到一些稀疏的峰值比重建嘈杂的图像容易得多。
这里有一个简单的例子来说明原理(下面的 Mathematica 源代码)。如您所见,Lena 图像的 DWT(离散小波变换)大部分为零,噪声图像的 DWT 或多或少是纯噪声。 lena + noise 的 DWT 是两个 DWT 的总和(即 DWT 是线性变换)。在此 DWT 中选取最大的 N 值并从中重建图像可在保留边缘的同时有效地去除噪声,但它也去除了该特定小波 (CDF) 无法很好表示的结构,即纹理和对角线边缘:
Mathematica 代码:
img = ImageResize[ExampleData[{"TestImage", "Lena"}], 256]
wf = CDFWavelet[];
noise = Image[
RandomVariate[NormalDistribution[], ImageDimensions[img]]*0.05 +
0.5];
noisyImg = Image[ImageData[img] + ImageData[noise] - 0.5];
Grid[
{
{Image[img, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[img, wf]],
ImageSize -> 256]},
{Image[noise, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[noise, wf]],
ImageSize -> 256]},
{Image[noisyImg, ImageSize -> 256], " DWT => ",
Image[WaveletImagePlot[DiscreteWaveletTransform[noisyImg, wf]],
ImageSize -> 256]},
{Image[noisyImg, ImageSize -> 256],
" Highest 5000 DWT coefficients => ",
Image[InverseWaveletTransform[
WaveletThreshold[
DiscreteWaveletTransform[noisyImg, wf], {"LargestCoefficients",
5000}]], ImageSize -> 256]}
}]