数字图像处理(4)——图像复原

数字图像处理(4)——图像复原

文章目录

  • 数字图像处理(4)——图像复原
    • 1 概述与图像降质模型
      • 1.1 图像增强与图像复原
      • 1.2 图像降质的数学模型
        • 1.2.1 连续图像退化的数学模型
        • 1.2.2 离散图像退化的数学模型
    • 2 无约束与约束图像复原
      • 2.1 无约束图像复原
      • 2.2 约束图像复原
    • 3 图像几何空间变换
    • 4 Matlab命令

1 概述与图像降质模型

1.1 图像增强与图像复原

图像增强:旨在改善图像质量、提高图像的可懂度。更偏向主观判断,即要突出所关心的信息,满足人的视觉系统,具有好的视觉结果。

图像复原:根据图像畸变或退化的原因,进行模型化处理,将质量退化的图像重建或恢复到原始图像,即恢复退化图像的本来面目,忠实于原图像。因此必须根据一定的图像退化模型来进行图像复原,又称图像恢复。

图像复原的目的是尽量减少或去除获取图像或处理图像过程中的图像降质(图像退化),恢复其本来面目。要进行图像恢复,先弄清楚降质或退化的原因,分析引起降质或退化的因素,建立相应的数学模型,并沿着图像降质的逆过程恢复图像。所以所用方法大致可分为两种:一种方法适用于缺乏图像先验知识的情况,此时可对退化过程建立模型进行描述,进而寻找一种去除或消弱其影响的过程,是一种估计方法;另一种是针对原始图像有足够的先验知识的情况,对原始图像建立一个数学模型并根据它的退化图像进行拟合,能够获得更好的复原效果。

1.2 图像降质的数学模型

1.2.1 连续图像退化的数学模型

考虑系统收到加性噪声的影响,对于线性移不变系统,有下述退化模型

原图像 f ( x , y ) → 退化系统 h ( x , y ) → 噪声 η ( x , y ) → 降质图像 g ( x , y ) 原图像f(x,y)\rightarrow 退化系统h(x,y)\rightarrow 噪声\eta(x,y)\rightarrow 降质图像g(x,y) 原图像f(x,y)退化系统h(x,y)噪声η(x,y)降质图像g(x,y)

数学表达式为 g ( x , y ) = f ( x , y ) ∗ h ( x , y ) + η ( x , y ) g(x,y)=f(x,y)*h(x,y)+\eta(x,y) g(x,y)=f(x,y)h(x,y)+η(x,y),频率域上的表达式(傅立叶变换后)有 G ( u , v ) = F ( u , v ) H ( u , v ) + N ( u , v ) G(u,v)=F(u,v)H(u,v)+N(u,v) G(u,v)=F(u,v)H(u,v)+N(u,v)

图像退化包含了两种因素:图像噪声 η ( x , y ) \eta(x,y) η(x,y)(来源于获取过程和传输过程)和退化系统 h ( x , y ) h(x,y) h(x,y)。当不考虑噪声时,即 η ( x , y )   o r   N ( u , v ) \eta(x,y) \ or \ N(u,v) η(x,y) or N(u,v)为0,有三种方法可估计退化函数:

(1)观察估计法

通过图像自身结构信息进行估计,选择图像中具有强信号特征的局部区域图像 g ( x , y ) g(x,y) g(x,y),设法构建一个具有相同大小与特征,但没有退化的近似图像,可有
H s ( u , v ) = G s ( u , v ) F s ( u , v ) H_s(u,v)=\frac{G_s(u,v)}{F_s(u,v)} Hs(u,v)=Fs(u,v)Gs(u,v)
利用这一函数,进一步假设 H ( u , v ) H(u,v) H(u,v)的数学表达式,从而构建 H ( u , v ) H(u,v) H(u,v)使其与 H s ( u , v ) H_s(u,v) Hs(u,v)具有基本相同的形状。

(2)实验估计法

使用或设计一个与图像退化过程相似的装置(过程),使其成像一个脉冲,可得退化系统的冲激响应
H ( u , v ) = G ( u , v ) A H(u,v)=\frac{G(u,v)}{A} H(u,v)=AG(u,v)
(3)模型估计法

从引起图像退化的基本原理进行推到,进而对原始图像进行模拟,在模拟过程中调整模型参数以获得尽可能精准的退化模型。如大气湍流模型和大气扰动模型。

1.2.2 离散图像退化的数学模型

一维离散情况退化模型
g ( x ) = f ( x ) ∗ h ( x ) + η ( x ) g(x)=f(x)*h(x)+\eta(x) g(x)=f(x)h(x)+η(x)
其中f,g分别具有A个和B个采样点。也就是说离散情况下的退化模型为卷积运算。

2 无约束与约束图像复原

2.1 无约束图像复原

目的:已知降质图像g以及对降质系统的循环矩阵H,包括对噪声 η \eta η的了解或假设,估计原始图像 f ^ \hat f f^,使得某种事先确定的误差最小。

方法:不同的误差最优准则,得到不同的复原方法。下面主要介绍逆滤波
g = H f + η ⇒ η = g − H f g=Hf+\eta \Rightarrow \eta=g-Hf g=Hf+ηη=gHf
使得 ∣ ∣ η ∣ ∣ 2 ||\eta||^2 ∣∣η2最小的准则称为最小二乘准则,此时的复原方法是无约束图像复原,称为逆滤波。推导过程就自己看书咯。

remark:无约束图像复原的病态性质,当H(u,v)很小或等于零,即出现了零点,就会导致不定解。即使没有噪声,一般也不可能精确地复原f(x,y)。如果考虑噪声项N(u,v),则出现零点时,噪声项将被放大,零点的影响将会更大,对复原的结果起主导地位。但可以对其进行一些列改进。

2.2 约束图像复原

有约束图像复原技术是指除了要求了解关于退化系统的传递函数之外,还需要知道某些噪声的统计特性或噪声与图像的某些相关情况。根据所了解的噪声的先验知识的不同,采用不同的约束条件,从而得到不同的图像复原技术。主要方法有维纳滤波平滑度约束滤波

3 图像几何空间变换

空间操作直接在给定图像的像素上执行,分为以下三大类:单像素操作,邻域操作,几何空间变换。其中几何变换的两个基本操作:①坐标的空间变换;②灰度内插

图像的仿射变换提出的意义是采用通用的数学影射变换公式,来表示几何变换。为了适应平移,提出了齐次坐标的概念。齐次坐标形式图像 ( x , y ) → ( u , v ) (x,y)\rightarrow(u,v) (x,y)(u,v)的变换表达形式:
∣ u v 1 ∣ = ∣ a 1 b 1 c 1 a 2 b 2 c 2 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}a_1&b_1&c_1\\a_2&b_2&c_2\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = a1a20b1b20c1c21 xy1
(1)平移
∣ u v 1 ∣ = ∣ 1 0 0 0 1 0 t x t y 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}1&0&0\\0&1&0\\t_x&t_y&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = 10tx01ty001 xy1
(2)旋转
∣ u v 1 ∣ = ∣ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}cos\theta&-sin\theta&0\\sin\theta&cos\theta&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = cosθsinθ0sinθcosθ0001 xy1
(3)水平镜像
∣ u v 1 ∣ = ∣ 1 0 0 0 − 1 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}1&0&0\\0&-1&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = 100010001 xy1
(4)垂直镜像
∣ u v 1 ∣ = ∣ − 1 0 0 0 1 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}-1&0&0\\0&1&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = 100010001 xy1
(5)水平错切
∣ u v 1 ∣ = ∣ 1 0 0 d y 1 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}1&0&0\\dy&1&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = 1dy0010001 xy1
(6)垂直错切
∣ u v 1 ∣ = ∣ 1 d x 0 0 1 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}1&dx&0\\0&1&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = 100dx10001 xy1
(7)缩放
∣ u v 1 ∣ = ∣ c x 0 0 0 c y 0 0 0 1 ∣ ∣ x y 1 ∣ \begin{vmatrix}u\\v\\1\end{vmatrix}= \begin{vmatrix}c_x&0&0\\0&c_y&0\\0&0&1\end{vmatrix} \begin{vmatrix}x\\y\\1\end{vmatrix} uv1 = cx000cy0001 xy1
相关程序

Img = imread('1.jpg');
subplot(1,2,1); imshow(Img);
T=affine2d([cos(30) -sin(30) 0;sin(30) cos(30) 0;0 0 1]);
R=imwarp(Img, T, ’nearest’);
subplot(1,2,2); imshow(R);

4 Matlab命令

命令 参数说明 作用
h = fspecial(type)
h = fspecial(‘average’,hsize)
h = fspecial(‘disk’,radius)
h = fspecial(‘gaussian’,hsize,sigma)
h = fspecial(‘laplacian’,alpha)
h = fspecial(‘log’,hsize,sigma)
h = fspecial(‘motion’,len,theta)
h = fspecial(‘prewitt’)
h = fspecial(‘sobel’)
hsize - Size of the filter
radius - Radius of a disk-shaped filter(默认值5)
sigma - Standard deviation(默认值0.5)
alpha - Shape of the Laplacian(0.2默认值)
len - Linear motion of camera(9默认值)
theta - Angle of camera motion(0默认值)
创建二维滤波器
J = deconvwnr(I,psf,nsr) I - Blurry image
psf - Point-spread function
nsr - Noise-to-signal ratio(0)
用维纳滤波去模糊图像
[J,psfr] = deconvblind(I,psfi,iter,dampar,weight) I - Blurry image
psfi - Initial estimate of PSF
iter - Number of iterations(10默认值)
dampar - Threshold for damping(0默认值)
weight - Weight of each pixel
用盲去卷积去模糊图像
J = deconvreg(I,psf,np,lrange) np - Noise power(0默认值)
lrange - Search range([1e-9 1e9] 默认值)
用正则化滤波去模糊图像
一些程序
I=im2double(imread('cat1.jpg')); 
figure,imshow(I); 
title('原图');
LEN=21; 
THETA=11;
PSF=fspecial('motion',LEN,THETA); 
blurred=imfilter(I,PSF,'conv','circular'); 
figure(2),imshow(blurred),title('运动模糊') 
LEN=20; 
THETA=10; 
INITPSF=fspecial('motion',LEN,THETA); 
[J,P]=deconvblind(blurred,INITPSF,30); 
figure(3),imshow(J),title('恢复图像') 
PSF=fspecial('motion',7,45);
% MF=im2double(imfilter(I,PSF,'circular')); 
MF=imfilter(I,PSF,'circular'); 
noise=imnoise(zeros(size(I)),'gaussian',0,0.001); 
MFN=MF+noise; 
figure(4);subplot(2,2,1);imshow(MFN,[]); 
title('无噪声运动 deconvwnr 复原') 
NSR=sum(noise(:).^2)/sum(MFN(:).^2); 
subplot(2,2,2);imshow(deconvwnr(MFN,PSF,NSR),[]); 
title('有噪声运动 deconvwnr(I,PSF)复原'); 
subplot(2,2,3);imshow(deconvwnr(MFN,PSF),[]); 
title('有噪 deconvwnr(I,PSF,NSR)复原'); 
subplot(2,2,4);A=deconvreg(MFN,PSF,0.4,[1e-7,1e7]);imshow(A);
title('有噪 deconvwnr(I,PSF,NCORR,ICORR)复原'); 
figure(5),B=deconvreg(MFN,PSF,4);imshow(B);

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