一、图像退化

一般来说,图像的退化模型可以表示为

其中g(x,y) 表示退化后的图像,h(x,y)表示退化模型,f(x,y)表示原图像,n(x,y)表示噪声。
在频域上面可以表示为

下面介绍常见的两种退化模型:基于大气湍流物理特性的大气湍流模型和运动模糊模型。

1.大气湍流模型

退化模型:

伴随着k值的增大,得到的图像越来越模糊,一般情况下:k=0.0025剧烈湍流;k=0.001中等湍流;k=0.00025低湍流。
伪代码:
{
读取图片;
转成double型;
转换到频域空间;
频谱移到中心;

使用模型执行退化;
退化模型与原图像相乘求退化后图像;
进行傅里叶反变换即可。
}

代码如下:

%% 读取图像
image=imread('demo-1.jpg');
subplot(231);
imshow(image);
title('原图像');
f=im2double(image);%% 剧烈大气湍流退化模型
F=fft2(f);%换到频域,信号在低频,噪声在高频
F=fftshift(F);%频谱移到矩阵中心
%执行
[W,H]=size(F);
[u,v]=meshgrid(1:W,1:H);%生成矩阵
H_turbulence=exp(-0.0025* ( (u-W/2).^2+(v-H/2).^2).^(5/6) );
F=F.*H_turbulence;
%傅里叶反变换
X=ifftshift(F);
turimg=ifft2(X);
turimg=uint8(abs(turimg)*256);
subplot(232);
imshow(turimg);
title('退化图像');

2.运动模糊模型

退化模型:

其中T=1, a=0.1, b=0.1。

加性噪声——高斯噪声:

noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
noise_mean=0,noise_var=0.01
代码如下:
pic=imread('demo-1.jpg');
figure('name','demo2');
subplot(231);imshow(pic);title('原图像');
pic=im2double(pic);
[width,height]=size(pic);
%% 运动模糊(+噪声
H_motion = fspecial('motion', 28, 90);%运动长度为28,逆时针运动角度为90°
motion_blur = imfilter(pic, H_motion, 'conv', 'circular');%卷积滤波
noise_mean=0;  %添加均值为0
noise_var=0.001; %方差为0.001的高斯噪声
motion_blur_noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
subplot(232);imshow(motion_blur,[]);title('运动模糊');
subplot(233);imshow(motion_blur_noise,[]);title('运动模糊加噪声');

二、图像复原

1.逆滤波

使用退化函数处理图像,然后加上适当的可加性噪声即可逆滤波实验。已获得退化函数后,用退化函数除退化图像的傅里叶变换计算原始图像傅里叶变换的估计:

即使知道退化函数,也不能准确的复原未退化的图像;如果退化函数是0或者是很小的值,噪声容
易被放大。
实现思路:
由于H(0,0)在频率域中通常是H(u, v)的最高值。因此,通过将频率限制在原点附近分析,就减少了遇
到零值的概率。
伪代码:
{
将信号频谱集中于低频区域,噪声集中于高频区域;
频谱移到矩阵中心;
以频谱中心为圆心,内部直接逆滤波,外部赋值为0
}
代码如下:

%% 逆滤波复原
fourier_H=fft2(H_motion,width,height);  %统一大小
fourier_degrade_img1=fft2(motion_blur);    %G(u,v)=H(u,v)F(u,v),已知G(u,v),H(u,v),求F(u,v)
restore_one=ifft2(fourier_degrade_img1./fourier_H); h=fspecial('gaussian',width,5);
restore_three=imfilter(restore_one,h,'conv','circular');
subplot(234);imshow(im2uint8(restore_three),[]);title('逆滤波+运动模糊');fourier_degrade_img2=fft2(motion_blur_noise); %G(u,v)=H(u,v)F(u,v)+N(u,v)
restore_two=ifft2(fourier_degrade_img2./fourier_H);
restore_four=imfilter(restore_two,h,'conv','circular');
subplot(235);imshow(im2uint8(restore_four),[]);title('逆滤波+运动模糊加噪声');

2.维纳滤波


重点在于寻找信噪比。

代码如下:

%% 维纳滤波
fourier_H_motion=fft2(H_motion,width,height);  %H(u,v)
pow_H_motion=abs(fourier_H_motion).^2;   %|H(u,v)|^2
noise=motion_blur_noise-motion_blur;    %提取噪声分量
fourier_noise=fft2(noise);    % N(u,v)  噪声傅里叶变换
fourier_double_gray_pic=fft2(pic);  %F(u,v)为未经过退化的图片
nsr=abs(fourier_noise).^2./abs(fourier_double_gray_pic).^2;   %噪信比=|N(u,v)|^2/|F(u,v)|^2
H_w=1./fourier_H_motion.*pow_H_motion./(pow_H_motion+nsr); %H_w(u,v)=1/H(u,v)*|H(u,v)|^2/[|H(u,v)|^2+NSR]
fourier_motion_blur_noise=fft2(motion_blur_noise);  %G(u,v)
restore_with_noise=ifft2(fourier_motion_blur_noise.*H_w);  %输出频域=G(u,v)H_w(u,v),时域为频域傅里叶逆变换
subplot(236);imshow(restore_with_noise,[]);title('维纳滤波')

三、实现结果




四、附录

1.图片
demo-1.jpg

demo-2.jpg

myMatlab.m

clc;
clear;
close all;
%% 官方运动模糊+维纳滤波
I = im2double(imread('demo-1.jpg'));
figure,subplot(2,3,1),imshow(I);
title('原图');%运动模糊
LEN = 28;
THETA = 90;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
subplot(2,3,2),imshow(blurred);
title('运动模糊退化');wnr1 = deconvwnr(blurred, PSF, 0);
subplot(2,3,3),imshow(wnr1);
title('运动模糊复原');%运动模糊+噪声
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...noise_mean, noise_var);
subplot(2,3,4),imshow(blurred_noisy)
title('运动模糊+噪声')wnr2 = deconvwnr(blurred_noisy, PSF, 0);
subplot(2,3,5),imshow(wnr2)
title('模糊+噪声 逆滤波');
signal_var = var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, noise_var / signal_var);
subplot(2,3,6),imshow(wnr3)
title('模糊+噪声 维纳滤波');

mymotion.m

clc;
clear;
close all;
pic=imread('demo-1.jpg');
figure('name','demo2');
subplot(231);imshow(pic);title('原图像');
pic=im2double(pic);
[width,height]=size(pic);%% 运动模糊(+噪声
H_motion = fspecial('motion', 28, 90);%运动长度为28,逆时针运动角度为90°
motion_blur = imfilter(pic, H_motion, 'conv', 'circular');%卷积滤波
noise_mean=0;  %添加均值为0
noise_var=0.001; %方差为0.001的高斯噪声
motion_blur_noise=imnoise(motion_blur,'gaussian',noise_mean,noise_var);
subplot(232);imshow(motion_blur,[]);title('运动模糊');
subplot(233);imshow(motion_blur_noise,[]);title('运动模糊加噪声');%% 逆滤波复原
fourier_H=fft2(H_motion,width,height);  %变大小
fourier_degrade_img1=fft2(motion_blur);    % G(u,v)=H(u,v)F(u,v),已知G(u,v),H(u,v),求F(u,v)
restore_1=ifft2(fourier_degrade_img1./fourier_H);  %
h=fspecial('gaussian',width,5);
restore_2=imfilter(restore_1,h,'conv','circular');
subplot(234);imshow(im2uint8(restore_2),[]);title('逆滤波+运动模糊');fourier_degrade_img2=fft2(motion_blur_noise); %G(u,v)=H(u,v)F(u,v)+N(u,v)
restore_3=ifft2(fourier_degrade_img2./fourier_H);
restore_4=imfilter(restore_3,h,'conv','circular');
subplot(235);imshow(im2uint8(restore_4),[]);title('逆滤波+运动模糊加噪声');%% 维纳滤波
fourier_H_motion=fft2(H_motion,width,height);  %H(u,v)
pow_H_motion=abs(fourier_H_motion).^2;   %|H(u,v)|^2
noise=motion_blur_noise-motion_blur;    %提取噪声分量
fourier_noise=fft2(noise);    % N(u,v)  噪声傅里叶变换
fourier_double_gray_pic=fft2(pic);  %F(u,v)为未经过退化的图片
nsr=abs(fourier_noise).^2./abs(fourier_double_gray_pic).^2;   %噪信比=|N(u,v)|^2/|F(u,v)|^2
H_w=1./fourier_H_motion.*pow_H_motion./(pow_H_motion+nsr); %H_w(u,v)=1/H(u,v)*|H(u,v)|^2/[|H(u,v)|^2+NSR]
fourier_motion_blur_noise=fft2(motion_blur_noise);  %G(u,v)
restore_with_noise=ifft2(fourier_motion_blur_noise.*H_w);  %输出频域=G(u,v)H_w(u,v),时域为频域傅里叶逆变换
subplot(236);imshow(restore_with_noise,[]);title('维纳滤波')

myturbulence.m

clc;
clear;
close all;
%% 读取图像
image=imread('demo-2.jpg');
subplot(231);
imshow(image);
title('原图像');
f=im2double(image);%% 剧烈大气湍流退化模型
F=fft2(f);%换到频域,信号在低频,噪声在高频
F=fftshift(F);%频谱移到矩阵中心
%执行
[W,H]=size(F);
[u,v]=meshgrid(1:W,1:H);%生成矩阵
H_turbulence=exp(-0.0025* ( (u-W/2).^2+(v-H/2).^2).^(5/6) );
F=F.*H_turbulence;
%傅里叶反变换
X=ifftshift(F);
turimg=ifft2(X);
turimg=uint8(abs(turimg)*256);
subplot(232);
imshow(turimg);
title('大气湍流退化');%% 直接逆滤波
FDeblurred=F./H;
IDeblurred=real(ifft2(ifftshift(FDeblurred)));
subplot(233), imshow(uint8(255.*mat2gray(IDeblurred)));
title('直接逆滤波');

数字图像处理——图像退化(大气湍流模型与运动模糊模型)与图像复原(逆滤波与维纳滤波)相关推荐

  1. 图像处理之仿真运动模糊复原【使用逆滤波、维纳滤波】

    目录 一.基础知识 二.问题分析 三.效果图 四.代码 一.基础知识 图像去模糊是一个经典的图像复原任务.造成图像模糊的原因有很多,可以主要分为三大类 离焦模糊:场景中的物体处于成像景深范围之外而变得 ...

  2. 数字图像处理——图像退化与复原

    图像退化与复原 内容简介 1.图像退化与复原的原理 1.1 图像退化的数学模型 1.2 图像退化的原理 1.3 图像复原的原理 2. 图像去噪 2.1 噪声模型 2.2 噪声参数的估计 2.3 针对噪 ...

  3. 数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验仪器 三.实验原理 四.实验内容 1.逆滤波:选择MATLAB文件夹中的foggy图像作为实验图像. (1)生成退化函数: (2)复原 (a)直接逆滤波 (b)修正函数 ...

  4. 计算机图像进行滤波的函数,数字图像处理图像滤波.ppt

    数字图像处理图像滤波 图像滤波 图像处理中所用到的图像往往含有噪声,需要用图像滤波的方法去除噪声. 内容框架 像素基础知识介绍 算术和逻辑运算 直方图 直方图均衡算法,用于图像锐化. 图像增强基本方法 ...

  5. 数字图像处理图像反转的实现_使用8086微处理器反转16位数字

    数字图像处理图像反转的实现 Problem statement: 问题陈述: Write an assembly language program in 8086 microprocessor to ...

  6. 数字图像处理图像反转的实现_反转8位数字| 8085微处理器

    数字图像处理图像反转的实现 Problem statement: 问题陈述: To reverse 8 bits number using 8085 microprocessors. 使用8085微处 ...

  7. 数字图像处理课设图像的锐化_数字图像处理图像锐化处理.ppt

    数字图像处理图像锐化处理 4.7.2 灰度级到彩色转换 灰度级到彩色转换(例) 在HSI彩色空间的直方图均衡强度均衡处理没有改变图像的色调和饱和度值,但它的确影响了整体图像的彩色感观. 向量分量可以用 ...

  8. matlab 求其骨架,数字图像处理图像的骨架生成和提取(Matlab)三种方法

    [实例简介] 数字图像处理图像的骨架生成和提取(Matlab),有三种方法,推荐给大家! [实例截图] [核心代码] Programe ├── Programe1 │   ├── 00.JPG │   ...

  9. Matlab数字图像处理——图像的空间变换

    Matlab空间变换函数 imtransform Matlab空间变换函数 imtransform 可以实现图像仿射变换(如 平移.旋转.剪切.缩放).投影变换, 该函数可与 maketform 配合 ...

最新文章

  1. numpy 数组 维度 大小 形状
  2. java守护线程的特性
  3. 线性代数中的矩阵消元法,求逆
  4. Lucene.Net学习
  5. IOS15给UICollection添加测试数字
  6. 【题解】Luogu P5360 [SDOI2019]世界地图
  7. 判断语句_如何学好C语言判断语句?攻略if语句是第一步
  8. 设置bootstrap modal模态框的宽度和宽度
  9. 求一个有序整数数组中和为K的数的对数
  10. imu相机标定_解放双手——相机与IMU外参的在线标定
  11. 小个子怎么能穿得优雅大方呢?
  12. java ant 详解
  13. 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
  14. nginx 优化配置
  15. lpush rpush 区别_lpush(lpush和rpush)
  16. 第七十五章 SQL命令 START TRANSACTION
  17. java聊天程序_java基于C/S模式实现聊天程序(客户端)
  18. 应届生如何轻松通过Java面试
  19. 如何进入华为P40 debug 模式/开发者选项模式
  20. 智能未来:聚焦2018世界人工智能大会

热门文章

  1. html------个人简历表
  2. Jerry Ma:为什么我更喜欢做空?
  3. 放下手机,我得到了什么?
  4. 计算机专业省赛一等奖有什么好处,竞赛省一等奖有什么用
  5. 积性函数欧拉函数莫比乌斯函数
  6. LaTeX中定义新命令和环境
  7. 度数换算_度数的换算
  8. Firefly 常用命令
  9. css 高度塌陷_CSS高度塌陷问题解决方案
  10. 泰拉瑞亚pc版最新服务器,服务端工具 - Terraria1.4.0.5-RPG开服端v0.2 | Terraria(泰拉瑞亚)中文论坛...