实验三、图像复原

1.  实验目的

(1) 理解退化模型。

(2) 掌握常用的图像复原方法。

2.  实验内

(1) 模拟噪声的行为和影响的能力是图像复原的核心。 示例 1 :使用 imnoise 添加噪声。

J = imnoise(I,'gaussian')  将方差为 0.01  的零均值高斯白噪声添加到灰度图I J = imnoise(I,'gaussian',m)  添加高斯白噪声,均值为 m ,方差为 0.01

J = imnoise(I,'gaussian',m,var_gauss)  添加高斯白噪声,均值为 m ,方差为 var_gauss J = imnoise(I,'localvar',var_local)  添加局部方差为 var_local  的零均值高斯白噪声。

J = imnoise(I,'localvar',intensity_map,var_local)  添加零均值高斯白噪声。噪声的局部方差 var_local I 中图像强度值的函数。图像强度值到噪声方差的映射由向量 intensity_map 指定。

J = imnoise(I,'poisson')  数据中生成泊松噪声,而不是向数据中添加人为噪声。有关详 细信息,请参阅算法。

J = imnoise(I,'salt & pepper')  添加椒盐噪声,默认噪声密度为 0.05。这会影响大约 5%   像素。J = imnoise(I,'salt & pepper',d)  添加椒盐噪声,其中 d 是噪声密度。这会影响 大约 d*numel(I)  个像素。

J = imnoise(I,'speckle')使用方程 J = I+n*I  添加乘性噪声,其中 n 是均值为 0、方差为 0.05 的均匀布随机噪声。

J = imnoise(I,'speckle',var_speckle)  添加方差为 var_speckle  的乘性噪声。

示例 2 :使用指定的分布产生空间随机噪

均匀噪声实例z = a + (b a) xU(0, 1)

实验三、图像复原_第1张图片

 

clear

clc

a=2;

b=5;

noise= a + (b - a) * rand(100, 100) ;

blackIm=zeros( 100, 100);

noisedIm=noise + blackIm;

subplot(1,2, 1);histogram(noisedIm);

subplot(1,2,2);imshow(noisedIm,[])

示例 3 :自编程实现指定噪声与周期噪声 (见资料 imnoise2.m, imnoise3.m  文件)

例:利用椒盐噪声污染图像

[M,N]=size(f);

R=imnoise2('salt & pepper',M,N,0. 1,0);

gp=f;

gp(R==0)=0;

subplot(1,2, 1),imshow(f);

subplot(1,2,2),imshow(gp);

%图像是被概率只有 0. 1 的胡椒噪声污染的 uint8 类图像,图像上出现点 (胡椒状)

[M,N]=size(f);

R=imnoise2('salt & pepper',M,N,0,0. 1);

gp=f;

gp(R==1)=255;

figure

subplot(121),imshow(f);

subplot(122),imshow(gp);

%图像是被概率只有 0. 1 的盐粒噪声污染的 uint8 类图像,图像上出现点 (盐粒状)

意,由椒盐噪声成的噪声数组有三个值:对应于胡椒噪声的 0 ,对应于盐粒噪 1 ,以及对应于噪声的 0.5。为了使这个数组有,还需要对他进步的处理。椒 噪声污染图像时,需要找到 R 中所有的 0 值坐标,把相应原图像的坐标位置置为最 灰度,找到 R 中值为 1 的坐标,把相应原图像的坐标位置置为最灰度值。

例:利用周期噪声污染图像

实验三、图像复原_第2张图片

 

C=[0 64;0 128;32 32;64 0;128 0;-32 32];

[r,R,S]=imnoise3(512,512,C);

subplot(3,2, 1),imshow(S,[]),title('规定脉冲的')

subplot(3,2,2),imshow(r,[]),title('空域中相应的正弦噪声模型')

C=[0 32;0 64;16 16;32 0;64 0;-16 16];

[r,R,S]=imnoise3(512,512,C);

subplot(3,2,3),imshow(S,[])

subplot(3,2,4),imshow(r,[])

C=[6,32;-2 2];

[r,R,S]=imnoise3(512,512,C);

subplot(3,2,5),imshow(r,[])

A=[1,5];

[r,R,S]=imnoise3(512,512,C,A);

subplot(3,2,6),imshow(r,[])

注意:像出现周期噪声通常源于电,电机的扰,通常通过在频域滤波来处理。

周期噪声的噪声模型是个离散的维正弦波,程为:

r (x, y ) = Asin 【2xp0 (x + Bx )/ M + 2xv0 (y + By ) / N】 

其中,x=0, 1,2 M-1 y=0, 1,2, … ,N- 1 A 是振幅,u0 v0 分别确定了关于 x 轴和 y 的正弦频率。Bx By 分别是关于原点的相移。定义M 函数接受任意数量的脉 位置 (频率坐标),每个脉冲位置都有自己的振幅,频率和相移参数。该函数还能够

输出各个正弦波之和的傅叶变换以及谱。

C 是具有 K 对频率 K×2 矩阵。定义频率中脉冲位置的域坐标(u, v) 。这些位置相对于 频率矩形中心在(floor(M/2) + 1, floor(N/2) + 1) 。脉冲位置被指定为相对于中心的增量。 例如,如果 M = N = 512 ,则中心位于 (257, 257) 。要指定 (280, 300)  处的脉冲,我们 指定对 (23, 43);即 257 + 23 = 280 257 + 43 = 300 。每个脉冲只需要一对坐

(2) 空域滤

help imfilter

imfilter -  多维图像的 N  维滤波

MATLAB  函数 使用多维滤波器 h  对多维数组 A 进行滤波,并在 B  中返回 果。

B = imfilter(A,h)

B = imfilter(A,h,options,...)

h = fspecial(type)

type -  滤波器的类型

'average' | 'disk' | 'gaussian' | 'laplacian' | 'log' | 'motion' | 'prewitt' | 'sobel'

help medfilt2

medfilt2 -  二维中位数滤波

MATLAB  函数 对图像 I  执行二维中位数滤波。每个输出像素包含输入图像中 应像素周围 3×3  邻域的中位数值。

J = medfilt2(I)

J = medfilt2(I,[m n])

J = medfilt2(___,padopt)

实验一

1. 1 至少 2 种不同类型的噪声,并绘制原图像、加噪后图像及对应直方图 图形窗口中[subplot(m,n,p)]

1.2 有椒盐噪声图像进行 5×5 方形窗口中值滤波。

附加内容: 自编程实现均值、中值、 自适应中值滤波器

(2) 幅退化的图像可以近似地用方g=Hf+n ,其中 g 为图像,H 为变称为点扩散函数 (PSF),f 为原始的真实图像,n 为附加噪声, 它在像捕获过程中产并且使图像质量变坏。其中,PSF 个很重要的因素, 值直接影响到恢复后图像的质量。

MATLAB具箱4 个图像恢复函数。这 4 个函数都以PSF 和模糊 图像作为主要变量。deconvwnr 函数使维纳滤波对图像恢复,求取最小二deconvreg 数实现约束去卷积,求取有约束的最小二乘解,可以设置对输出图 像的约束。deconvlucy 函数实现了个加速衰减的 Lucy-Richardson 算法。该 优化技术和泊松统计量进多次迭代。使该函数,不需要提供有关模糊 中附加噪声的信息。deconvblind 函数使的是盲去卷积算法,它在不知道 PSF 情况下进恢复。调deconvblind 函数时,将 PSF 的初值作为个变量 传递。该函数除了返回个修复后的图像以外,还返回个修复后的 PSF

实验三、图像复原_第3张图片

 

示例:使用维纳滤波恢复图

J=deconvwnr(I,psf,nsr)使用 Wiener 滤波算法对图像 I 进行反卷积,从而返回去模糊后的 图像 J psf I 进行卷积的点扩散函数(PSF) nsr 是加性噪声的噪信功率比。在估计图 像与真实图像之间的最小均方误差意义上,该算法是最优的。

J = deconvwnr(I,psf,ncorr,icorr)对图像I 进行反卷积,其中ncorr 是噪声的自相关函数,icorr 是原始图像的自相关函数

J = deconvwnr(I,psf)使用 Wiener 滤波算法对图像 I 进行反卷积,无估计噪声。在不含 情况下,Wiener 滤波等效于理想的逆滤波。

%读取图片到工作区

I = im2double(imread('cameraman.tif'));

imshow(I);

title('Original Image (courtesy of MIT)');

%模拟一个运动模糊

LEN = 21;

THETA = 11;

PSF = fspecial('motion', LEN, THETA);

blurred = imfilter(I, PSF, 'conv', 'circular');

figure, imshow(blurred)

%模拟加性噪声

noise_mean = 0;

noise_var = 0.0001;

blurred_noisy = imnoise(blurred, 'gaussian', noise_mean, noise_var);

figure, imshow(blurred_noisy)

title('Simulate Blur and Noise')

%假定噪声为 0 恢复图像

estimated_nsr = 0;

wnr2 = deconvwnr(blurred_noisy, PSF, estimated_nsr);

figure, imshow(wnr2)

title('Restoration of Blurred, Noisy Image Using NSR = 0')

%使用最佳噪声/信号功率比恢复图

estimated_nsr = noise_var / var(I(:));

wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr);

figure, imshow(wnr3)

title('Restoration of Blurred, Noisy Image Using Estimated NSR');

实验二(选做其一)

2. 1  选择一幅晰的灰度图像,对该图像进行模糊化处理,然后分别采用逆滤波、 维纳滤波和约束最小二乘方滤波对模糊图像进行复原,比较各种图像复原方法 原效果。

2.2  选择一幅清晰的灰度图像,对该图像进行模糊化处理并加入不同强度的高斯 噪声,然后分别采用逆滤波、维纳滤波和约束最小二乘方滤波对退化图像进行 比较各种图像复原方法的复原效果。

加内容: 自编程实现不同截至频率的逆滤波并比较其复原效果。

Matlab help 图像去模糊_长笛人倚楼Gloria_新浪博客 (sina.com.cn)

你可能感兴趣的:(实验数字图像处理,图像处理)