图像复原MATLAB实现
前言:本篇博客先介绍滤波器滤除噪声,再介绍滤波器复原,侧重于程序的实现。
一:三种常见的噪声



二:空间域滤波
空间域滤波复原是在已知噪声模型的基础上,对噪声的空间域进行滤波。
空间域滤波复原方法主要包括:
均值滤波器
算术均值滤波器
几何均值滤波器
谐波均值滤波器
逆谐波均值滤波器
顺序统计滤波器
中值滤波器
最大值/最小值滤波器
2.1算数均值滤波器

img=imread('D:/picture/ZiXia.jpg');
img=rgb2gray(img);
figure,imshow(img);//原图
img_noise=double(imnoise(img,'gaussian',0.06));
figure,imshow(img_noise,[]);//含有高斯噪声的图
img_mean=imfilter(img_noise,fspecial('average',));//滤波后的图
figure;imshow(img_mean,[]);

2.2几何均值滤波器

img=imread('cameraman.tif');
img=rgb2gray(img);
figure,imshow(img);
img_noise=double(imnoise(img,'gaussian',0.06));
figure,imshow(img_noise,[]);
img_mean=exp(imfilter(log(img_noise+),fspecial('average',)));
figure;imshow(img_mean,[]);

2.3谐波均值滤波器

2.4逆谐波均值滤波器


采用逆谐波均值滤波器对附加胡椒噪声图像进行滤波的matlab程序如下:
img=imread('cameraman.tif'); figure,imshow(img);
[M,N]=size(img);R=imnoise2('salt & pepper',M,N,0.1,);
img_noise=img;img_noise(R==)=;
img_noise=double(img_noise); figure,imshow(img_noise,[]);
Q=1.5;
img_mean=imfilter(img_noise.^(Q+),fspecial('average',))./imfilter(img_noise.^Q,fspecial('average',));
figure;imshow(img_mean,[]);

采用逆谐波均值滤波器对附加盐噪声图像进行滤波的matlab程序如下:
img=imread('csboard.tif');figure,imshow(img);
[M,N]=size(img);R=imnoise2('salt & pepper',M,N,,0.1);
img_noise=img;img_noise(R==)=;
img_noise=double(img_noise); figure,imshow(img_noise,[]);
Q=-1.5;
img_mean=imfilter(img_noise.^(Q+),fspecial('average',))./imfilter(img_noise.^Q,fspecial('average',));
figure;imshow(img_mean,[]);

2.5中值滤波器



img=imread('cameraman.tif');
img_noise=double(imnoise(img,'salt & pepper',0.06));
img_mean=imfilter(img_noise,fspecial('average',));
img_median=medfilt2(img_noise);%一次中值滤波
img_median2=medfilt2(img_median);%二次中值滤波

2.6最大值,最小值滤波器



利用最大值滤波器消除胡椒噪声污染图像的matlab程序如下。
img=imread('csboard.tif');
[M,N]=size(img);
R=imnoise2('salt & pepper',M,N,0.1,);
img_noise=img;
img_noise(R==)=;
img_noise=double(img_noise);
imwrite(uint8(img_noise),'csbord_pepper.jpg');
img_max=imdilate(img_noise,ones(,));
imwrite(uint8(img_max),'cameraman_saltpepper_max.jpg');

利用最小值滤波器消除盐噪声污染图像的matlab程序如下。
img=imread('csboard.tif');
[M,N]=size(img);
R=imnoise2('salt & pepper',M,N,,0.1);
img_noise=img;
img_noise(R==)=;
img_noise=double(img_noise);
imwrite(uint8(img_noise),'csbord_salt.jpg');
img_min=imerode(img_noise,ones(,));
imwrite(uint8(img_min),'cameraman_saltpepper_min.jpg');

2.7带阻滤波器




I=imread('pout.tif');
[m,n]=size(I);
J=I;
for i=:m
for j=:n
J(i,j)=I(i,j)+*sin(*i)+*sin(*j);%增加周期性噪声
end
end
IF=fftshift(fft2(I));
JF=fftshift(fft2(J));
IF=log(+abs(IF));
JF=log(+abs(JF));
subplot()%显示频谱
imshow(IF,[])
subplot()
imshow(JF,[])
%高斯带阻滤波器构造
fbrf=ones(m,n);
for i=:m
for j=:n
fbrf(i,j)=-exp(-0.5*(((i-m/)^+(j-n/)^-^)/(sqrt(i.^+j.^)*))^);%20为带阻中心,5为带宽
end
end
H=fbrf;
%频率域滤波
f=fftshift(fft2(J));
out=f.*H;%频率域滤波
out=ifft2(ifftshift(out));
out=abs(out);
out=out/max(out(:));%归一化【,】
subplot()
imshow(out,[]);
subplot()
imshow(J,[])


2.8带通滤波器

2.9陷波滤波器





clear;
close all;
src = im2double(imread('D:/picture/ZiXia.jpg'));
src = rgb2gray(src);
subplot()
imshow(src);
title('原始图像');
[w h] = size(src);
srcf = fft2(src);
srcf = fftshift(srcf);
subplot()
imshow(srcf);
% 低通滤波
% flt = zeros(size(src));
% rx1 = w/;
% ry1 = h/;
% r = min(w,h)/;
% for i = :w
% for j = :h
% if(rx1-i)^ +(ry1 - j)^ <= r*r
% flt(i,j) = ;
% end
% end
% end
% 陷波滤波
flt = ones(size(src));
r = min(w,h)/;
rx1 = r
ry1 =h/
for i = :w
for j = :h
if(rx1-i)^ +(ry1 - j)^ <= r*r
flt(i,j) = ;
end
if(w-rx1-i)^ +(h-ry1 - j)^ <= r*r
flt(i,j) = ;
end
end
end
subplot()
imshow(flt);
title('滤波器图像');
dfimg = srcf.*flt;
dfimg = ifftshift(dfimg);
dimg = ifft2(dfimg,'symmetric');
subplot()
imshow(dimg):title('滤波后');

2.9逆滤波

image_o=imread('D:/picture/lenagray.jpg');
subplot(,,);
imshow(image_o);
title('原图像');
%频率域退化图像,退化函数H(u,v)=exp(-0.0025*( (u-M/).^+(v-N/).^).^(/) )
%傅里叶变换
f=im2double(image_o);
F=fft2(f);
F=fftshift(F);
%执行退化
[M,N]=size(F);
[u,v]=meshgrid(:M,:N);%生成二维坐标系
H=exp(-0.0025* ( (u-M/).^+(v-N/).^).^(/) );
F=F.*H;
%傅里叶反变换
X=ifftshift(F);
x=ifft2(X);
x=uint8(abs(x)*);
subplot(,,);
imshow(x);
%
title('退化图像');
image_d=x;
%直接逆滤波图像复原
ff=im2double(image_d);%将图像灰度值归一化到0-1之间
% 傅里叶变换
f_Id=fft2(ff);
f_Id=fftshift(f_Id);
fH_Id=f_Id;
[M,N]=size(fH_Id);
% 逆滤波
threshold=;
if threshold>M/
%全滤波
fH_Id=fH_Id./(H+eps);
else
%对一定半径范围内进行滤波
for i=:M
for j=:N
if sqrt((i-M/).^+(j-N/).^)<threshold
fH_Id(i,j)=fH_Id(i,j)./(H(i,j)+eps);
end
end
end
end
% 执行傅立叶逆变换
fH_Id1=ifftshift(fH_Id);
f_new=ifft2(fH_Id1);
f_new=uint8(abs(f_new)*);
subplot(,,);
imshow(f_new);
title('滤波半径=78的逆滤波复原图像');

2.10维纳滤波




直接截图了,没敲


图像复原MATLAB实现的更多相关文章
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- 图像质量评价指标之Matlab实现
在图像处理算法研究中,很多时候需要有客观评价指标来对算法的性能进行评价. 比如,在图像复原.图像滤波算法研究中,需要采用客观评价指标来定量的来测试算法恢复出的图像相对于参考图像的好坏程度. 本文介绍文 ...
- [家里蹲大学数学杂志]第057期图像复原中的改进 TV 模型
$\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 6.2 节的详细论述. $\bf 关键词$: 图像复原; TV 模型; matlab 编程 1. 前言 图像在形 ...
- Matlab图像处理教程
虽然典型算法的开发是基于理论支持的,但这些算法的实现几乎总是要求参数估计,并常常进行算法修正与候选求解方案的比较. MATLAB由LINPACK和EISPACK项目开发,最初用于矩阵处理.今天,MAT ...
- 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter 标签: 图像处理MATLAB 2017-05-27 10:59
实验要求: Objective: To understand the high performance of the parametric Wiener Filter in image restora ...
- 数字图像处理学习笔记之一 DIP绪论与MATLAB基础
写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...
- 数字图像处理原理与实践(MATLAB版)勘误表
本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...
- [00]数字图像处理-matlab速成
原本听的是mooc武汉大学的数字图像处理课程,但是无奈老师读ppt的能力太强,不太适应,后面的课程对于实验方面的要求甚低,无奈之下到处找课程,终于找到了一个适合自己的教程<王伟强-数字图像处理& ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
随机推荐
- 大数据之hadoop小文件存档
hadoop小文件存档1.HDFS存档小文件弊端 每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效.因为大量的小文件会耗尽NameNode中的大部分内 ...
- 14 win7 sp1下安装vs2015
0 引言 在win7下安装vs2015的时候遇到了很多问题,看了很多帖子,尝试了很多次,终于成功了.网上也有大量关于win7 sp1下安装vs2015的帖子,我在安装的时候也参考了很多相关经验,这次写 ...
- SpringCloud及其五大常用组件之Eureka和Zuul
1.springcloud简介 SpringCloud是Spring旗下的项目之一,它是微服务架构的一种实现方式. 官网地址:http://projects.spring.io/spring-clou ...
- 使用Windbg调试系统弹出的内存不可读错误
步骤: 1. 使用Windbg挂钩到崩溃的进程上面 2. 使用~*k列出所有线程 3. 搜索UnhandledExceptionFilter所在的线程 4. 使用~ns切换到上面崩溃所在的线程,n为线 ...
- 云-腾讯云-云直播:云直播(LVB)
ylbtech-云-腾讯云-云直播:云直播(LVB) 云直播(Live Video Broadcasting,LVB)依托腾讯多年的音视频技术平台,以及全球海量加速节点和领先的音视频 AI 技术,为开 ...
- Keras+Yolo 目标检测
参考:https://www.cnblogs.com/tensorflownews/p/8922359.html Github:https://github.com/qqwweee/keras-yol ...
- SpringBoot--Thymeleaf入门使用
一.概述 今天学习到了SpringBoot中的WEB开发,SpringBoot提供了spring-boot-stater-web为web开发给予支持,它里面内嵌了以下依赖: <dependenc ...
- PHP面向对象魔术方法之__toString函数
l 基本介绍: 当我们希望将一个对象当做字符串来输出时,就会触发__toString魔术方法. <?php header('content-type:text/html;charset=utf- ...
- import time 进度条动态输出26个字母
# 2018-08-06 19:42:51 import time # 调用时间模块 num = 97 # 字母a while num <= 115: # print(chr(num), end ...
- Spring 基于xml配置方式的AOP(8)
1.ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculator { 4 int ad ...