前言:本篇博客先介绍滤波器滤除噪声,再介绍滤波器复原,侧重于程序的实现。

一:三种常见的噪声

二:空间域滤波

空间域滤波复原是在已知噪声模型的基础上,对噪声的空间域进行滤波。
空间域滤波复原方法主要包括:

  均值滤波器

    算术均值滤波器

    几何均值滤波器
    谐波均值滤波器
    逆谐波均值滤波器
  顺序统计滤波器
    中值滤波器
    最大值/最小值滤波器

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实现的更多相关文章

  1. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  2. 图像质量评价指标之Matlab实现

    在图像处理算法研究中,很多时候需要有客观评价指标来对算法的性能进行评价. 比如,在图像复原.图像滤波算法研究中,需要采用客观评价指标来定量的来测试算法恢复出的图像相对于参考图像的好坏程度. 本文介绍文 ...

  3. [家里蹲大学数学杂志]第057期图像复原中的改进 TV 模型

    $\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 6.2 节的详细论述. $\bf 关键词$: 图像复原; TV 模型; matlab 编程 1. 前言 图像在形 ...

  4. Matlab图像处理教程

    虽然典型算法的开发是基于理论支持的,但这些算法的实现几乎总是要求参数估计,并常常进行算法修正与候选求解方案的比较. MATLAB由LINPACK和EISPACK项目开发,最初用于矩阵处理.今天,MAT ...

  5. 数字图像处理实验(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 ...

  6. 数字图像处理学习笔记之一 DIP绪论与MATLAB基础

    写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...

  7. 数字图像处理原理与实践(MATLAB版)勘误表

    本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...

  8. [00]数字图像处理-matlab速成

    原本听的是mooc武汉大学的数字图像处理课程,但是无奈老师读ppt的能力太强,不太适应,后面的课程对于实验方面的要求甚低,无奈之下到处找课程,终于找到了一个适合自己的教程<王伟强-数字图像处理& ...

  9. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

随机推荐

  1. 一图读懂POLARDB Box数据库一体机的云原生力量!

    2019杭州云栖大会上,阿里云宣布正式推出高性能数据库一体机——POLARDB Box,用户部署在自有数据中心即可享受云数据库的便捷体验,同时还为Oracle等传统数据库用户提供一键迁移功能,最多节省 ...

  2. 共享商业&技术红利,阿里云SaaS加速器让天下没有难做的SaaS

    9月26日,阿里云在2019杭州云栖大会上发布了SaaS加速器3.0版“一云多端”多个应用平台,展示了阿里云给伙伴带来的多种商业和技术红利.阿里云SaaS加速器将帮助伙伴做好SaaS,卖好SaaS:帮 ...

  3. day24 模块

     Python之路,Day12 = Python基础12 模块 本质为py程序 分类: 内置模块 time time.time() ---> 当前时间的时间戳:浮点型 time.localtim ...

  4. thinkphp present标签

    present标签用于判断某个变量是否已经定义,用法: 大理石平台精度等级 <present name="name"> name已经赋值 </present> ...

  5. 动态调整Log4j日志级别

    log4j2.xml配置文件中支持配置monitorInterval参数,检测到配置改变后重新加载,达到动态调整日志级别的效果. 故调整日志级别无须手动重启服务. log4j2.xml配置文件示意: ...

  6. [Neo4j] 添加算法插件包

    下载graph-algorithms-algo-xxx.jar包,我下的是3.5.3.1,放到neo4j目录的plugins文件夹下 修改 conf目录下的配置文件 neo4j.conf ,加一行: ...

  7. Clover config.plist Boot部分

    <key>Boot</key> <dict> <key>Arguments</key> < nv_disable= kext-dev- ...

  8. UVA - 374

    https://vjudge.net/problem/19685/origin 费马小定理优化快速幂 因为加了费马小定理优化,小心2 2 2这种情况,会出现0 0 2,也就是0的0次方,实际答案为0 ...

  9. leetcode-154-寻找旋转排序数组中的最小值

    题目描述: 方法一: class Solution: def findMin(self, nums: List[int]) -> int: left, right = 0, len(nums) ...

  10. [JZOJ5232] 【NOIP2017模拟A组模拟8.5】带权排序

    题目 题目大意 有一个数列AAA,数列上的每个数都是在[li,ri][l_i,r_i][li​,ri​]范围内随机的数. 将这个数列进行稳定排序,得到每个位置在排序后的排名pip_ipi​. f(A) ...