《数字图像处理-MATLAB》运动模糊图像复原
- 格式:ppt
- 大小:3.09 MB
- 文档页数:13
如何在Matlab中进行图像去噪与复原图像去噪与复原在计算机视觉和图像处理领域有着重要的应用价值。
当图像受到噪声污染或损坏时,我们需要采取适当的方法来还原图像的清晰度和准确性。
在这方面,Matlab作为一种强大的数值计算软件,提供了丰富的图像处理工具和函数,能够帮助我们有效地进行图像去噪和复原。
一、图像去噪方法介绍在进行图像去噪之前,我们需要了解一些常见的图像噪声类型和去噪方法。
常见的图像噪声类型包括高斯噪声、椒盐噪声和泊松噪声等。
对于这些噪声,我们可以采用滤波方法进行去噪处理。
Matlab提供了多种滤波函数,包括均值滤波、中值滤波、高斯滤波等。
这些函数能够基于不同的滤波算法,去除图像中的噪声,提高图像质量。
1.1 均值滤波均值滤波是一种简单的滤波方法,通过计算像素周围邻域的平均灰度值来减小噪声的影响。
在Matlab中,可以使用imfilter函数实现均值滤波。
该函数可以指定滤波器的大小和形状,对图像进行滤波处理。
均值滤波适用于高斯噪声的去除,但对于椒盐噪声等其他类型的噪声效果不佳。
1.2 中值滤波中值滤波是一种非线性滤波方法,通过在像素周围邻域中选择中间灰度值来减小噪声的影响。
在Matlab中,可以使用medfilt2函数实现中值滤波。
该函数可以指定滤波器的大小和形状,对图像进行滤波处理。
中值滤波适用于椒盐噪声的去除,对于高斯噪声等其他类型的噪声有效果不佳。
1.3 高斯滤波高斯滤波是一种线性滤波方法,通过根据像素周围邻域的权重来减小噪声的影响。
在Matlab中,可以使用imgaussfilt函数实现高斯滤波。
该函数可以指定滤波器的大小和标准差,对图像进行滤波处理。
高斯滤波适用于高斯噪声的去除,对于椒盐噪声等其他类型的噪声效果较好。
二、图像复原方法介绍除了去噪,图像复原也是图像处理中常见的任务之一。
图像复原主要是指恢复图像中的缺失或破损的信息,使得图像在视觉上更加清晰和准确。
在Matlab中,可以使用多种方法进行图像复原,包括图像插值、图像修复和图像增强等。
Matlab中的模糊图像恢复与图像重建技术详解引言:随着数码相机、移动设备以及各种图像处理软件的普及,人们对图像质量要求越来越高。
然而,在图像获取和传输过程中,由于种种原因,图像可能会变得模糊,失真或损坏。
为了解决这些问题,图像恢复和重建技术应运而生。
本文将详细介绍基于Matlab的模糊图像恢复与图像重建技术。
一、图像模糊恢复技术1. 模糊图像的概念和原因模糊图像是指由于摄像机移动、图像采集设备问题、环境光线等因素而导致图像失真的现象。
图像模糊会降低图像的细节和清晰度,使得图像难以辨认和识别。
常见的模糊原因有运动模糊、焦距模糊、镜头畸变等。
2. 模糊图像恢复方法为了恢复模糊图像的清晰度和细节,研究人员提出了各种方法。
其中,基于傅里叶变换的频域滤波是最常用的方法之一。
该方法通过将模糊图像转换到频域,应用适当的频域滤波器来消除模糊效果。
Matlab提供了丰富的函数和工具箱来实现这些滤波方法,比如利用低通滤波器恢复运动模糊图像。
另外,基于对图像恢复的数学建模和优化算法也是常用的方法。
例如,最小二乘法、最小化总变差等。
3. Matlab中的模糊图像恢复函数Matlab提供了多种函数用于模糊图像恢复。
其中,`deconvwnr`函数可以用于模糊图像的逆滤波处理。
该函数通过对图像进行频域滤波,去除模糊效果。
另外,`deconvblind`函数可以用于盲去卷积处理,即对图像进行反卷积操作以恢复图像细节。
二、图像重建技术1. 图像重建的意义和应用图像重建指的是利用已有的图像信息来还原、修复或生成新的图像。
与图像恢复类似,图像重建技术对于改善图像质量、还原损坏图像、生成虚拟图像等方面有着重要的应用。
图像重建技术在医学影像、图像压缩和增强、虚拟现实等领域都有广泛的应用。
2. 图像重建算法在Matlab中,图像重建可以通过多种算法实现。
其中一种常用的算法是基于插值的图像重建方法。
该方法通过对已有图像的像素进行插值来生成新的图像。
实验六 模糊图像恢复一、实验目的本实验是一个综合性实验,要求学生巩固学习多个知识点和内容,主要有: 1、理解掌握运动图像的退化模型; 2、掌握维纳滤波法的原理和实现方法;3、在不同的噪声和点扩散函数参数下进行恢复,并比较结果;4、通过分析和实验得出相应的结论。
二、实验准备1、运动模糊退化模型:运动模糊是图像退化的一种,可以用数学表达式刻画出来。
对线性移(空)不变系统,退化模型可表示为:g(x,y)=h(x,y)*f(x,y)+n(x,y)。
对匀速直线运动而言,退化图像为:()()()[]⎰--=Tdt t y y t x x f y x g 000,,其中x 0(t)和y 0(t)分别表示x 和y 方向的运动分量。
并假设退化系统是线性移不变的,光学成像过程是完善的,快门开关是瞬间完成的。
对上式进行傅立叶变换,则得频域表达式为()()()[]()()[]()[]()()()[]{}),(),(2exp ,2exp ,2exp ,,000000v u H v u F dt t vy t ux j v u F dtdxdy vy ux j t y y t x x f dxdy vy ux j y x g v u G T T=+-=⎥⎥⎦⎤⎢⎢⎣⎡+---=+-=⎰⎰⎰⎰⎰⎰+∞∞-+∞∞-+∞∞-+∞∞-πππ 其中()()()[]{}dt t vy t ux j v u H T⎰+-=0002exp ,π假设景物只在x 方向匀速运动,在T 时间内共移动距离是a ,即x 0(t)=at/T ,y 0(t)=0,则()()[]ua j ua ua T dt T at uj v u H Tππππ-=⎥⎦⎤⎢⎣⎡-=⎰exp sin 2exp ,0 在Matlab 中可用滤波器卷积的方法仿真出运动模糊图像。
h=fspecial(‘motion ’,len,theta),表示在theta 方向移动len 长度,产生运动模糊的点扩散函数h 。
Matlab中的模糊图像处理和图像模糊恢复技术随着数字图像的广泛应用和发展,图像模糊成为一个重要的问题。
由于摄像器材或传输媒介等方面的限制,图像的清晰度可能受到一定程度的影响,导致图像模糊。
在实际应用中,图像的模糊问题会给图像解析、目标跟踪、计算机视觉等许多领域带来困扰。
为了改善模糊图像的质量,并解决图像模糊问题,Matlab提供了一系列的模糊图像处理和图像模糊恢复技术。
一、图像模糊的产生原因图像模糊一般是由光学系统的缺陷、运动物体、相机抖动等因素引起的。
光学系统的缺陷包括镜头的失真、散射、衍射等;运动物体指的是图像中的物体在拍摄过程中出现运动造成模糊;相机抖动是由于相机本身的不稳定性或者手持摄影造成的。
二、模糊图像处理的方法1.滤波方法滤波方法是最基本也是最常用的图像模糊处理方法。
在Matlab中,可以使用各种滤波器对图像进行处理,例如平滑滤波、高斯滤波、中值滤波等。
这些滤波器可以消除图像中的高频噪声,同时也会导致图像的模糊。
2.图像退化模型图像退化模型是描述图像模糊过程的数学模型。
常见的图像退化模型有运动模糊模型、模糊核模型等。
通过了解图像退化模型的特性,可以更准确地恢复图像的清晰度。
在Matlab中,可以根据图像退化模型进行图像恢复的研究和实现。
3.频域方法频域方法是一种基于图像频谱的模糊图像处理方法。
通过对图像进行傅里叶变换,可以将图像从空间域转换到频率域,然后在频率域进行处理,最后再进行逆傅里叶变换得到恢复后的图像。
在Matlab中,可以利用fft2函数进行傅里叶变换和逆傅里叶变换,实现频域方法对图像的处理。
三、图像模糊恢复技术1.盲去卷积算法盲去卷积算法是一种不需要知道图像退化模型的图像恢复方法。
通过对模糊图像进行去卷积处理,可以尽可能地恢复图像的清晰度。
在Matlab中,可以使用盲去卷积相关的函数和工具箱实现图像模糊恢复。
2.基于深度学习的图像超分辨率重建技术深度学习技术如今在计算机视觉领域取得了巨大的成功。
Matlab中的图像重建与图像恢复技术深入研究和掌握图像重建与图像恢复技术对于图像处理和计算机视觉领域的研究人员来说至关重要。
在现实生活中,图像可能因传感器噪声、数据传输损失或其他因素而受损,导致图像出现模糊、噪声等问题。
为了改善这些问题,我们需要使用图像重建和恢复技术,将受损的图像还原到原始清晰的状态。
Matlab作为一种功能强大的科学计算软件,提供了丰富的工具和函数,可以帮助我们实现图像重建和恢复的任务。
在本文中,我们将探讨几种常用的图像重建和恢复技术,并介绍如何使用Matlab来实现它们。
第一部分:图像去噪与平滑图像中的噪声往往是由电子设备、图像采集过程或传输过程中引入的。
去除这些噪声对于提高图像质量非常重要。
在Matlab中,我们可以使用均值滤波、中值滤波、高斯滤波等方法进行图像去噪和平滑。
均值滤波是一种常用的线性滤波方法,它通过计算图像周围像素的平均值来减小噪声。
中值滤波则取邻域像素的中值作为当前像素的值,可以有效地去除脉冲噪声和椒盐噪声。
高斯滤波则使用高斯核函数对图像进行平滑,可以在平滑图像的同时保留图像的细节信息。
第二部分:图像复原与去模糊当图像受到模糊因素的影响时,如相机抖动、运动模糊等,我们可以使用图像复原和去模糊技术来提高图像的清晰度。
在Matlab中,我们可以使用逆滤波、维纳滤波等方法进行图像复原和去模糊。
逆滤波是一种经典的图像复原方法,通过将图像的频谱进行逆变换,消除因模糊而引入的相位延迟和衰减。
然而,逆滤波在存在噪声的情况下容易引入放大噪声的问题。
为了解决这个问题,可以使用维纳滤波器,它通过权衡图像信号和噪声的功率谱来恢复原始图像。
第三部分:图像超分辨率重建超分辨率重建是一种在低分辨率图像的基础上提高图像分辨率的技术。
它在很多应用中都非常有用,如视频监控、医学图像分析等。
在Matlab中,我们可以使用插值方法、重建方法等技术进行图像超分辨率重建。
插值方法是一种常用的图像超分辨率技术,它通过对像素进行重新采样来增加图像的分辨率。
%%通过BP神经网络训练将模糊化的图像进行还原处理%%下面是主程序image=imread('image.bmp');image1=rgb2gray(image);figure,subplot(121),imshow(image);title('RGB原图'); subplot(122),imshow(image1);title('灰度图');image2=imresize(image1,[128,128]);%读入图像,并改变成90*90image2=double(image2)./256;len=5;theta=10;PSF=fspecial('motion',len,theta);%加入运动模糊Blurredmotion=imfilter(image2,PSF,'circular','conv' );w=fspecial('gaussian',[9 9],1);%加入高斯模糊blurred_image=imfilter(Blurredmotion,w);P_Matrix=zeros(32,(size(image2,1))*(size(image2,2)) /16);%输入矩阵T_Matrix=zeros(16,(size(image2,1))*(size(image2,2))/16);%目标矩阵blurred_BW = edge(blurred_image,'sobel');%提取模糊图像边缘BW = edge(image2,'sobel');%提取清晰图像边缘image_edge=double(BW).*image2;blurred_image_edge=double(blurred_BW).*blurred_imag e;%blurred_image_flat=blurred_image-blurred_image_edg e;%得到模糊图像非边缘区域,即平坦区域%target_image=zeros(size(image2,1),size(image2,2));%目标矩阵t=1;%初始化输入矩阵P_Matrix,假设神经网络是32-30-16的结构,故按如下方式初始化for i=1:4:size(image2,1)for j=1:4:size(image2,2)P_Matrix(1,t)=blurred_image(i,j);%前16位为degraded image的block,大小为4x4P_Matrix(2,t)=blurred_image(i,j+1);P_Matrix(3,t)=blurred_image(i,j+2);P_Matrix(4,t)=blurred_image(i,j+3);P_Matrix(5,t)=blurred_image(i+1,j);P_Matrix(6,t)=blurred_image(i+1,j+1);P_Matrix(7,t)=blurred_image(i+1,j+2);P_Matrix(8,t)=blurred_image(i+1,j+3);P_Matrix(9,t)=blurred_image(i+2,j);P_Matrix(10,t)=blurred_image(i+2,j+1);P_Matrix(11,t)=blurred_image(i+2,j+2);P_Matrix(12,t)=blurred_image(i+2,j+3);P_Matrix(13,t)=blurred_image(i+3,j);P_Matrix(14,t)=blurred_image(i+3,j+1);P_Matrix(15,t)=blurred_image(i+3,j+2);P_Matrix(16,t)=blurred_image(i+3,j+3);P_Matrix(17,t)=blurred_image_edge(i,j);%后16位为original image's edge 的block,大小为4x4P_Matrix(18,t)=blurred_image_edge(i,j+1);P_Matrix(19,t)=blurred_image_edge(i,j+2);P_Matrix(20,t)=blurred_image_edge(i,j+3);P_Matrix(21,t)=blurred_image_edge(i+1,j);P_Matrix(22,t)=blurred_image_edge(i+1,j+1);P_Matrix(23,t)=blurred_image_edge(i+1,j+2);P_Matrix(24,t)=blurred_image_edge(i+1,j+3);P_Matrix(25,t)=blurred_image_edge(i+2,j);P_Matrix(26,t)=blurred_image_edge(i+2,j+1);P_Matrix(27,t)=blurred_image_edge(i+2,j+2);P_Matrix(28,t)=blurred_image_edge(i+2,j+3);P_Matrix(29,t)=blurred_image_edge(i+3,j);P_Matrix(30,t)=blurred_image_edge(i+3,j+1);P_Matrix(31,t)=blurred_image_edge(i+3,j+2);P_Matrix(32,t)=blurred_image_edge(i+3,j+3);t=t+1;endendt=1;%初始化目标矩阵for i=1:4:size(image2,1)for j=1:4:size(image2,2)T_Matrix(1,t)=image2(i,j);T_Matrix(2,t)=image2(i,j+1);T_Matrix(3,t)=image2(i,j+2);T_Matrix(4,t)=image2(i,j+3);T_Matrix(5,t)=image2(i+1,j);T_Matrix(6,t)=image2(i+1,j+1);T_Matrix(7,t)=image2(i+1,j+2);T_Matrix(8,t)=image2(i+1,j+3);T_Matrix(9,t)=image2(i+2,j);T_Matrix(10,t)=image2(i+2,j+1);T_Matrix(11,t)=image2(i+2,j+2);T_Matrix(12,t)=image2(i+2,j+3);T_Matrix(13,t)=image2(i+3,j);T_Matrix(14,t)=image2(i+3,j+1);T_Matrix(15,t)=image2(i+3,j+2);T_Matrix(16,t)=image2(i+3,j+3);t=t+1;endendnet=newff(P_Matrix,T_Matrix,30);%得到神经网络,假设使用的是BP神经网络net=train(net,P_Matrix,T_Matrix);Y=sim(net,P_Matrix);%Y得到复原矩阵restored_image=zeros(size(image2,1),size(image2,2)) ;%复原图像t=1;%通过复原矩阵得到复原图像for i=1:4:size(image2,1)for j=1:4:size(image2,2)restored_image(i,j)=Y(1,t);restored_image(i,j+1)=Y(2,t);restored_image(i,j+2)=Y(3,t);restored_image(i,j+3)=Y(4,t);restored_image(i+1,j)=Y(5,t);restored_image(i+1,j+1)=Y(6,t);restored_image(i+1,j+2)=Y(7,t);restored_image(i+1,j+3)=Y(8,t);restored_image(i+2,j)=Y(9,t);restored_image(i+2,j+1)=Y(10,t);restored_image(i+2,j+2)=Y(11,t);restored_image(i+2,j+3)=Y(12,t);restored_image(i+3,j)=Y(13,t);restored_image(i+3,j+1)=Y(14,t);restored_image(i+3,j+2)=Y(15,t);restored_image(i+3,j+3)=Y(16,t);t=t+1;endendPSNR_edge_BP=Cal_PSNR(image2*255,restored_image*255 );SSIM_edge_BP=ssim_index(image2*255,restored_image*2 55);PSNR_edge_BP_blurred=Cal_PSNR(image2*255,blurred_im age*255);SSIM_edge_BP_blurred=ssim_index(image2*255,blurred_ image*255);figure,%显示结果subplot(221),imshow(image2);title('原图像');subplot(222),imshow(blurred_image);title('运动模糊后的图像');subplot(223),imshow(restored_image);title('BP神经网络复原图像');imwrite(image2,'image.bmp');imwrite(blurred_image,'blurred_image.bmp');imwrite(restored_image,'restored_image.bmp');image=imread('image.bmp');image1=rgb2gray(image);figure,subplot(121),imshow(image);title('RGB原图'); subplot(122),imshow(image1);title('灰度图');image2=imresize(image1,[128,128]);%读入图像,并改变成90*90image2=double(image2)./256;len=5;theta=10;PSF=fspecial('motion',len,theta);%加入运动模糊Blurredmotion=imfilter(image2,PSF,'circular','conv' );w=fspecial('gaussian',[9 9],1);%加入高斯模糊blurred_image=imfilter(Blurredmotion,w);P_Matrix=zeros(32,(size(image2,1))*(size(image2,2)) /16);%输入矩阵T_Matrix=zeros(16,(size(image2,1))*(size(image2,2)) /16);%目标矩阵blurred_BW = edge(blurred_image,'sobel');%提取模糊图像边缘BW = edge(image2,'sobel');%提取清晰图像边缘image_edge=double(BW).*image2;blurred_image_edge=double(blurred_BW).*blurred_imag e;%blurred_image_flat=blurred_image-blurred_image_edg e;%得到模糊图像非边缘区域,即平坦区域%target_image=zeros(size(image2,1),size(image2,2));%目标矩阵t=1;%初始化输入矩阵P_Matrix,假设神经网络是32-30-16的结构,故按如下方式初始化for i=1:4:size(image2,1)for j=1:4:size(image2,2)P_Matrix(1,t)=blurred_image(i,j);%前16位为degraded image的block,大小为4x4P_Matrix(2,t)=blurred_image(i,j+1);P_Matrix(3,t)=blurred_image(i,j+2);P_Matrix(4,t)=blurred_image(i,j+3);P_Matrix(5,t)=blurred_image(i+1,j);P_Matrix(6,t)=blurred_image(i+1,j+1);P_Matrix(7,t)=blurred_image(i+1,j+2);P_Matrix(8,t)=blurred_image(i+1,j+3);P_Matrix(9,t)=blurred_image(i+2,j);P_Matrix(10,t)=blurred_image(i+2,j+1);P_Matrix(11,t)=blurred_image(i+2,j+2);P_Matrix(12,t)=blurred_image(i+2,j+3);P_Matrix(13,t)=blurred_image(i+3,j);P_Matrix(14,t)=blurred_image(i+3,j+1);P_Matrix(15,t)=blurred_image(i+3,j+2);P_Matrix(16,t)=blurred_image(i+3,j+3);P_Matrix(17,t)=blurred_image_edge(i,j);%后16位为original image's edge 的block,大小为4x4P_Matrix(18,t)=blurred_image_edge(i,j+1);P_Matrix(19,t)=blurred_image_edge(i,j+2);P_Matrix(20,t)=blurred_image_edge(i,j+3);P_Matrix(21,t)=blurred_image_edge(i+1,j);P_Matrix(22,t)=blurred_image_edge(i+1,j+1);P_Matrix(23,t)=blurred_image_edge(i+1,j+2);P_Matrix(24,t)=blurred_image_edge(i+1,j+3);P_Matrix(25,t)=blurred_image_edge(i+2,j);P_Matrix(26,t)=blurred_image_edge(i+2,j+1);P_Matrix(27,t)=blurred_image_edge(i+2,j+2);P_Matrix(28,t)=blurred_image_edge(i+2,j+3);P_Matrix(29,t)=blurred_image_edge(i+3,j);P_Matrix(30,t)=blurred_image_edge(i+3,j+1);P_Matrix(31,t)=blurred_image_edge(i+3,j+2);P_Matrix(32,t)=blurred_image_edge(i+3,j+3);t=t+1;endendt=1;%初始化目标矩阵for i=1:4:size(image2,1)for j=1:4:size(image2,2)T_Matrix(1,t)=image2(i,j);T_Matrix(2,t)=image2(i,j+1);T_Matrix(3,t)=image2(i,j+2);T_Matrix(4,t)=image2(i,j+3);T_Matrix(5,t)=image2(i+1,j);T_Matrix(6,t)=image2(i+1,j+1);T_Matrix(7,t)=image2(i+1,j+2);T_Matrix(8,t)=image2(i+1,j+3);T_Matrix(9,t)=image2(i+2,j);T_Matrix(10,t)=image2(i+2,j+1);T_Matrix(11,t)=image2(i+2,j+2);T_Matrix(12,t)=image2(i+2,j+3);T_Matrix(13,t)=image2(i+3,j);T_Matrix(14,t)=image2(i+3,j+1);T_Matrix(15,t)=image2(i+3,j+2);T_Matrix(16,t)=image2(i+3,j+3);t=t+1;endendnet=newff(P_Matrix,T_Matrix,30);%得到神经网络,假设使用的是BP神经网络net=train(net,P_Matrix,T_Matrix);Y=sim(net,P_Matrix);%Y得到复原矩阵restored_image=zeros(size(image2,1),size(image2,2)) ;%复原图像t=1;%通过复原矩阵得到复原图像for i=1:4:size(image2,1)for j=1:4:size(image2,2)restored_image(i,j)=Y(1,t);restored_image(i,j+1)=Y(2,t);restored_image(i,j+2)=Y(3,t);restored_image(i,j+3)=Y(4,t);restored_image(i+1,j)=Y(5,t);restored_image(i+1,j+1)=Y(6,t);restored_image(i+1,j+2)=Y(7,t);restored_image(i+1,j+3)=Y(8,t);restored_image(i+2,j)=Y(9,t);restored_image(i+2,j+1)=Y(10,t);restored_image(i+2,j+2)=Y(11,t);restored_image(i+2,j+3)=Y(12,t);restored_image(i+3,j)=Y(13,t);restored_image(i+3,j+1)=Y(14,t);restored_image(i+3,j+2)=Y(15,t);restored_image(i+3,j+3)=Y(16,t);t=t+1;endendPSNR_edge_BP=Cal_PSNR(image2*255,restored_image*255 );SSIM_edge_BP=ssim_index(image2*255,restored_image*2 55);PSNR_edge_BP_blurred=Cal_PSNR(image2*255,blurred_im age*255);SSIM_edge_BP_blurred=ssim_index(image2*255,blurred_ image*255);figure,%显示结果subplot(221),imshow(image2);title('原图像');subplot(222),imshow(blurred_image);title('运动模糊后的图像');subplot(223),imshow(restored_image);title('BP神经网络复原图像');imwrite(image2,'image.bmp');imwrite(blurred_image,'blurred_image.bmp');imwrite(restored_image,'restored_image.bmp');function[mssim, ssim_map] = ssim_index(img1, img2, K, window, L)% % 结构相似度(SSIM)用于图像复原(去噪,去模糊,盲复原,修复)后的客观评价!% % 该评价标准比较适合于纹理结构多的图像质量评价if (nargin < 2 | nargin > 5) %判断输入变量的个数mssim = -Inf; %设定为负的无穷大ssim_map = -Inf;return;endif (size(img1) ~= size(img2)) %两个图像的大小不相等mssim = -Inf;ssim_map = -Inf;return;end[M N] = size(img1);if (nargin == 2)if ((M < 11) | (N < 11))mssim = -Inf;ssim_map = -Inf;returnendwindow = fspecial('gaussian',11,1.5); %统计的本地窗口默认是高斯窗口,模板尺寸为11,滤波器标准值为1.5像素K(1) = 0.01; %默认的设置K(2) = 0.03;L = 255; %图像的动态范围endif (nargin == 3)if ((M < 11) | (N < 11))mssim = -Inf;ssim_map = -Inf;returnendwindow = fspecial('gaussian',11,1.5);L = 255;if(length(K) == 2) %SSIM指标公式常数的长度为2if (K(1) < 0 | K(2) < 0)mssim = -Inf;ssim_map = -Inf;return;endelsemssim = -Inf;ssim_map = -Inf;return;endendif (nargin == 4)[H W] = size(window);if ((H*W) < 4 | (H > M) | (W > N)) mssim = -Inf;ssim_map = -Inf;returnendL = 255;if (length(K) == 2)if (K(1) < 0 | K(2) < 0)mssim = -Inf;ssim_map = -Inf;return;endelsemssim = -Inf;ssim_map = -Inf;return;endendif (nargin == 5)[H W] = size(window);if ((H*W) < 4 | (H > M) | (W > N)) mssim = -Inf;ssim_map = -Inf;returnendif (length(K) == 2)if (K(1) < 0 | K(2) < 0)mssim = -Inf;ssim_map = -Inf;return;endelsemssim = -Inf;ssim_map = -Inf;return;endendC1 = (K(1)*L)^2;C2 = (K(2)*L)^2;window = window/sum(sum(window));img1 = double(img1); %将图像矩阵uint8型数据转换成double型img2 = double(img2);% % 计算图片的平均值和方差--------------------------------------------------mu1= filter2(window, img1, 'valid'); %使用矩阵h中的二维FIR(有限长单位冲%激响应)过滤器过滤变量X中的数据,使用二维相关性计算结果Y,并且返回与X的维数相%同的相关项的中心部分。
基于MATLAB的运动模糊图像恢复技术王洪珏(温州医学院,浙江,温州)摘要:MATLAB是当今流行的科学计算软件,它具有很强的数据处理能力。
在其图像处理工具箱中有四个图像复原函数,本文就这些函数的算法原理、运用和恢复处理效果结合实力效果作简要对比讨论。
0前言图像复原时图像处理中一个重要的研究课题。
图像在形成、传输和记录的过程中,由于传感器的噪声、摄像机未对好焦、摄像机与物体相对运动、系统误差、畸变、噪声等因素的影响,使图像往往不是真实景物的完善影像。
这种图像在形成、传输和记录过程中,由于成像系统、传输介质和设备的不完善,使图像质量下降的过程称为图像的退化。
图像复原就是通过计算机处理,对质量下降的图像加以重建或恢复的过程。
图像复原过程一般为:找退化原因→建立退化模型→反向推演→图像复原1算法产生概述开发算法时,首先要创建图像退化的线性数学模型,接着选择准则函数,并以适当的数学形式表达,然后进行数学推演。
推演过程中通常要进行表达形式(即空域形式、频域形式、矩阵-矢量形式或变换域形式)的相互转换,最后得到图像复原算式。
退化数学模型的空域、频域、矢量-矩阵表达形式分别是:g(x,y)=d(x,y)*f(x,y)+n(x,y)G(u,v)=D(u,v)·F(u,v)+N(u,v)g=HF+n其中:g(x,y)、d(x,y)、f(x,y)、n(x,y)分别为观测的退化图像、模糊函数、原图像、加性噪声,*为卷积运算符,(x=0,1,2,…,M-1),(y=0,1,2,…,N-1)。
2运动模糊的产生景物与相机之间的相对运动通常会使相机所成的像存在运动模糊。
对于线性移不变模糊,退化图像u0可以写成,u0=h*u+n,其中h为模糊核,*表示卷积,n为加性噪声。
由du/dt=0,文献[5]将这种运动模糊过程描述为波动方程:аu/аt+V xаu/аx+ V yаu/аy=0其中,V x=dx/dt, V y=dy/dt为x,y方向上的速度分量并且通过分析该方程的达朗贝尔解得出结论:vаu0/аx=u(x)-u(x-L)其中即退化图像沿运动方向的导数等于原始图像和其移位L后图像的差,这里L也可以认为是模糊长度。
实验课二一、实验目的1.进一步了解MATLAB仿真软件图像处理工具箱中图像操作的基本函数;2.深入理解数字图像处理算法的功能。
二、实验内容及要求1.编写由运动引起的图像模糊的MATLAB恢复程序的,并对自选图像进行处理(可对正常图像先进行运动模糊处理,再恢复);源程序:I=imread('C:\Documents and Settings\Administrator\My Documents\MATLAB\picture.bmp imshow(I);title('原始图象');hold on;J=fspecial('motion',20,50);%滤波器J1=imfilter(I,J,'circular','conv');%用滤波器模糊原图像K1=deconvwnr(J1,J);%恢复不加噪声的模糊图象N=0.002*prod(size(I));%设定一个高斯噪声N1=imnoise(J1,'gaussian',0,.002);%对模糊后图象加噪N2=sum(N.^2)/sum(im2double(I(:)).^2);%计算噪声的NSRK2=deconvwnr(N1,J,N2/100);%恢复加噪后的模糊图象figure;subplot(2,2,1);imshow(J1);title('不加噪声的模糊图象');subplot(2,2,2);imshow(N1);title('加高斯噪声的模糊图象');subplot(2,2,3);imshow(K1);title('对不加噪声的图象的恢复');subplot(2,2,4);imshow(K2);title('对加噪的图象的恢复');2.将变换结果与原始图像进行对比分析。
以上模糊图象的恢复采用维纳滤波法实现。
如何利用Matlab进行图像恢复图像恢复是数字图像处理中的一个重要的研究领域。
Matlab作为一种功能强大的工具,被广泛应用于图像处理领域。
本文将介绍如何利用Matlab进行图像恢复,并探讨其中的原理和算法。
首先,图像恢复是一种通过消除或减小图像失真、模糊或噪声等问题,使图像更加清晰和还原的过程。
在实际应用中,图像常常受到噪声污染、运动模糊、光照变化等影响,导致图像质量下降。
利用图像恢复技术,可以提高图像的视觉质量和辨识度,对于图像处理、计算机视觉等领域具有重要意义。
Matlab作为一款高级的数学计算工具,提供了丰富的函数库和灵活的编程接口,能够方便地进行图像处理和分析。
在图像恢复中,Matlab提供了多种处理图像的函数和算法,可以帮助我们实现各种图像恢复的方法。
一种常用的图像恢复方法是基于空域滤波的处理。
在Matlab中,可以使用imfilter函数来实现各种空域滤波算法,如均值滤波、中值滤波、高斯滤波等。
这些滤波算法通过在图像像素之间进行加权平均或统计操作,可以消除图像中的噪声和模糊。
另一种常用的图像恢复方法是基于频域滤波的处理。
在Matlab中,可以使用fft2函数和ifft2函数来实现图像的傅里叶变换和反傅里叶变换。
通过将图像从空域转换到频域,可以利用频域滤波算法对图像进行处理,如理想低通滤波、巴特沃斯低通滤波、维纳滤波等。
这些滤波算法可以根据图像的频域特征,有选择地增强或抑制图像中的某些频率分量,从而实现图像的恢复。
此外,Matlab还提供了一些专门用于图像恢复的函数,如wiener2函数、deconvwnr函数等。
wiener2函数实现了维纳滤波算法,可以用于消除运动模糊或加性噪声的图像恢复。
deconvwnr函数实现了维纳滤波的变种算法,可以根据图像和模糊函数的噪声特性,自适应地调整滤波参数,从而实现更好的图像恢复效果。
除了上述方法,Matlab还提供了其他一些高级的图像恢复算法,如超分辨率恢复、图像拼接等。
1、退化程序clc;clear all;close all;I=imread('F:\mmw\B1\图2.jpg');%读图figure;subplot(4,3,1);imshow(I);title('原图像');LEN=30;%运动长度30THETA=30;%运动角度30% LEN=60;% THETA=60;n=2;for i=1:3for j=1:3PSF=fspecial('motion',LEN*i,THETA*j);%退化并研究运动角度和长度对图片模糊程度的影响PSF=fspecial('motion',LEN,THETA);Blurred=imfilter(I,PSF,'circular','conv');subplot(4,3,n);imshow(uint8(Blurred));title('模糊化');hold onn=n+1;endend%imwrite(Blurred,'模糊∠60长60.png');%保存图2、运动角度的求解%求解模糊运动角度matlab代码close all;clc;clear all;im=imread('F:\mmw\B1\模糊∠60长60.png');img_gray=rgb2gray(im);%灰度化img_fft=fftshift(fft2(img_gray));N=abs(img_fft);P=(N-min(min(N)))/(max(max(N))-min(min(N)))*225;figure;imshow(P);title('频谱图(运动角度与光斑方向垂直)');len=35;theta=0;PSF=fspecial('motion',len,theta);B=imfilter(img_gray,PSF,'circular','conv');subplot(121);imshow(B);%模糊图像B1=fft2(double(B));B2=mat2gray(log(abs(B1)));subplot(122);imshow(B2);%模糊图像的频谱图C=sum(B2,1);%对频谱图求列和[m,n]=size(C); x=0:1:n-1; y=C;figure,plot(x,y);title('频谱列和曲线图1') %绘制频谱列和曲线图3、运动长度算法%求解模糊运动长度matlab代码:im=imread('F:\mmw\B1\模糊∠60长60.png'); img_gray=rgb2gray(im);%灰度化h=fspecial('sobel');%sobel边缘检测img_double=double(img_gray);J=conv2(img_double,h,'same');IP=abs(fft2(J));S=fftshift(real(ifft2(IP)));figure;plot(S);title('模糊运动长度');4、噪声分析%噪声分析clc;clear allim=imread('F:\mmw\B1\图1.png');[m,n,h]=size(im);f11=ones(192,162,3);f22=ones(130,130,3);f33=ones(100,100,3);f44=ones(70,70,3);for i=1:190for j=1:162for k=1:3f11(i,j,k)=im(i,j,k);endendendfor i=1:130for j=501:630fork=1:3;f22(i,j-500,k)=im(i,j,k);endendfor i=721:870for j=11:170for k=1:3f33(i-720,j-10,k)=im(i,j,k);endendendfor i=761:830for j=561:630for k=1:3f33(i-760,j-560,k)=im(i,j,k);endendendfigure;subplot(221),hist(f11,100);subplot(222),hist(f22,100);subplot(223),hist(f33,100);subplot(224),hist(f44,100);title('噪声分析2');5、去噪还原clc;clear all;close all;I=imread('F:\mmw\B1\图1.png');%读图Len=60;Theta=60;PSF=fspecial('motion',Len,Theta); %模糊化BlurredA=imfilter(I,PSF,'circular','conv');wnr1=deconvwnr(BlurredA,PSF);%维纳滤波BlurredD=imfilter(I,PSF,'circ','conv');INITPSF=ones(size(PSF));[K DePSF]=deconvblind(BlurredD,INITPSF,30);%盲去卷积法BlurredB=imfilter(I,PSF,'conv');v=0.02;Blurred_I_Noisy=imnoise(BlurredB,'gaussian',0,v);NP=v*prod(size(I));J=deconvreg(Blurred_I_Noisy,PSF,NP);%最小二乘法BlurredC=imfilter(I,PSF,'symmetric','conv');v=0.002;BlurredNoisy=imnoise(BlurredC,'gaussian',0,v);Luc=deconvlucy(BlurredNoisy,PSF,5);%L_Rl滤波subplot(221);imshow(I);title('原图');subplot(222);imshow(BlurredA);title('模糊化');%subplot(233);imshow(wnr1);title('维纳滤波');subplot(223);imshow(J);title('最小二乘法');imwrite(J,'min_recover1.png');subplot(224);imshow(Luc);title('L_R法');imwrite(Luc,'LR_recover1.png');6、截取部分图片进行对比程序clear all;clc;a=imread('F:\mmw\B1\模糊∠60长60.png');%未处理质量较差图像b=a([64:120],[67:126]);a=imread('F:\mmw\min_recover1.png');%算法处理后质量较好图象c=a([64:120],[67:126]);%%从eyechart3中截取测试参考图象,截取部分需要进行缩放------------------%%使之与eyechart1,eyechart2截取部分大小匹配-----------------------a=imread('F:\mmw\B1\图2.jpg');%高清晰参考图象d=a([64:120],[67:126]);e=imresize(d,[length(b(:,1)),length(b(1,:))],'bicubic');%调整imwrite(b,'area_模糊∠60长60.png');imwrite(c,'area_最小二乘法复原图.png');imwrite(e,'area_图2.png');subplot(1,3,1);imshow(e);title('模糊∠60长60截取参考');hold on;subplot(1,3,2);imshow(b);title('eyechart1截取部分');hold on;subplot(1,3,3);imshow(c);title('eyechart2截取部分');7、模糊系数、质量指数、PSNR的计算(评价)clc;clear;PSNRenable=1; %PSNR计算使能,为0不计算,为1,计算KBlurenable=1; %模糊系数KBlur计算使能,为0不计算,为1,计算Qenable=1; %质量指数Q计算使能,为0不计算,为1,计算for m=1:2imsrcnamehead='area_模糊∠60长60'; %源图象文件名头imsrcnameext='png'; %源图象文件名扩展if m==1 %以area_eyechart1.bmp为测试图象imdstname=strcat('area_图2','.',imsrcnameext);%污染图象文件名,可修改elseif m==2%以area_eyechart2.bmp为测试图象imdstname=strcat('area_最小二乘法复原图','.',imsrcnameext);%污染图象文件名,可修改end%--------------------------------------------------------------------------iminfo=imfinfo(strcat(imsrcnamehead,'.',imsrcnameext));%源图象信息读取imsrc=imread(strcat(imsrcnamehead,'.',imsrcnameext)); %源图象读取imdst=imread(imdstname,imsrcnameext); %污染图象读取doubleimsrc=double(imsrc); %转换为浮点类型doubleimdst=double(imdst); %转换为浮点类型%----------------------------------------------------源图象和污染图象读取W=iminfo.Width; %图象宽H=iminfo.Height; %图象高%----------------------------PSNR计算--------------------------------------if PSNRenable==1PSNR=0.0; %PSNR赋初值for j=1:Hfor i=1:WPSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i )-doubleimdst(j,i)));endendPSNR=PSNR/W/H;PSNR=10*log10(255*255/PSNR);%---------------------------PSNR计算完毕-----------------------------------end%-------------------------模糊系数KBlur计算--------------------------------if KBlurenable==1Sin=0.0; %Sin赋初值Sout=0.0;for i=2:W-1t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doub leimsrc(j+1,i+1);if t<0t=-t;endSin=Sin+t; %源图象邻域边缘能量计算t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doub leimdst(j+1,i+1);if t<0t=-t;endendendSout=Sout+t; %污染图象邻域边缘能量计算KBlur=Sout/Sin;end%-------------------------------KBlur计算完毕------------------------------%-------------------------------质量指数Q计算------------------------------if Qenable==1Q=0.0; %Q赋初值Qnum=0; %图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数for j=4:H-3for i=4:W-3midsrc=0.0;middst=0.0;varsrc=0.0;vardst=0.0; %源图象和污染图象块内的平均值和方差赋初值varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值for n=-3:3for m=-3:3midsrc=midsrc+doubleimsrc(j+n,i+m);middst=middst+doubleimdst(j+n,i+m);endendmidsrc=midsrc/49;middst=middst/49;%%源图象和污染图象块内的平均值计算----------------------------------for n=-3:3varsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-mid src);vardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-mid dst);varsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+ m)-middst);endendvarsrc=varsrc/48;vardst=vardst/48;varsrcdst=varsrcdst/48;if((varsrc+vardst)*(midsrc*midsrc+middst*middst))~=0%分母不为零的块才计算质量指数QQ=Q+4*varsrcdst*midsrc*middst/((varsrc+vardst)*(midsrc*midsrc+middst* middst));%%源图象和污染图象块内Q计算完毕------------------------------------Qnum=Qnum+1; %块计数加1endendendQ=Q/Qnum;endendQPSNRKBlur。