前言

去年图像处理的DLL,有学弟问我做的思路,便放到博客里

github地址,欢迎star

图像增强处理:设计一套空间域与频率域结合的图像增强算法,处理以下任一组图片中的带噪声图像,去除噪声,提高图像质量。

(1)已知:噪声为随机噪声和周期噪声混合噪声;

(2)要求:

a)去噪处理后,计算均方误差评估去噪处理后图像的去噪效果

b)撰写完整的科技报告(形式类似科技论文)表述自己的算法设计,算法实现与算法评估过程。

对 swanNoise 图像去噪

空域去噪

根据老师讲解,swanNoise.bmp 所包含的噪声为椒盐噪声与周期噪声的混合。

对于传统图像中的椒盐噪声,适合使用 k 近邻滤波、中值滤波(二维统计滤波)、自适应中值滤波来去除噪声。k 近邻滤波能保留图像细节,使图像保持一定的清晰度,但椒盐噪声仍有少许干扰。中值滤波能完全去除椒盐噪声,但图像细节信息也损失了许多。

对于本图像,选取默认的参数调用三个滤波器去噪:

结果发现 k 近邻滤波图像细节损失不少。

再将二维统计滤波结果与自适应中值滤波结果比较:

结果发现适应中值滤波去噪效果最好。

频域去噪

将空域去噪的结果频谱图进行对比:

结果发现周期噪声突出的频率在每个区域均匀分布在各个点中。打开 photoshop 确认各点坐标。

对于频域滤波来说,可以采用高通滤波器、带阻滤波器、陷波滤波器、小波滤波器。下面对这几种滤波器进行比较:

高通滤波器对于周期噪声的滤波效果并不好

带阻滤波器对噪声以外的成分也有衰减

陷波滤波器对某个点进行衰减,对其余的成分不造成损失

小波滤波器对不同的频率成分分解到互不重叠的频带,对其余成分不造成损失

*由于试用版 matlab 无法安装 wavetoolbox ,在机房中实验的小波滤波器对本图去噪效果并不好,故采用陷波滤波器。

陷波滤波器结果如下:

小结

经过实验,发现先对频域去噪再对空域去噪效果最好,在这种情况下,自适应中值滤波比之原图的均方误差最小,结果如下:

二维统计滤波:

function y = TwostaticFilter(imageWithNoise,k,boxSize)

% iamgeWithNoise:噪声图像

% k:k值

% boxSize:模板尺寸

% 二维统计滤波

y = imageWithNoise;

[rows,cols]=size(y);

template = zeros(boxSize);

for i = 1:rows-boxSize+1

for j = 1:cols-boxSize+1

% 取模板内元素

template = imageWithNoise(i:i+(boxSize-1),j:j+(boxSize-1));

% 用排序后第k个值替换模板中心点像素值

v = sort(template(:));

y(i+(boxSize-1)/2,j+(boxSize-1)/2) = v(k);

end

end

非局部均值滤波:

function DenoisedImg=NLmeans(I,ds,Ds,h)

[m,n]=size(I);

DenoisedImg=zeros(m,n);

% 扩展图像边界

PaddedImg = padarray(I,[ds,ds],'symmetric','both');

% 定义d值

kernel=ones(2*ds+1,2*ds+1);

kernel=kernel./((2*ds+1)*(2*ds+1));

% 定义噪声功率

h2=h*h;

for i=1:m

for j=1:n

% 原图像对应扩展图像的偏移量

i1=i+ds;

j1=j+ds;

% 在扩展图像中以(i1,j1)为中心的邻域窗口1

W1=PaddedImg(i1-ds:i1+ds,j1-ds:j1+ds);

average=0; % 加权和

sweight=0; % 归一化系数

% 搜索窗口

rmin = max(i1-Ds,ds+1); % 搜索窗口上边界最低限制到原图像上边界

rmax = min(i1+Ds,m+ds); % 搜索窗口下边界最高限制到原图像下边界

smin = max(j1-Ds,ds+1); % 搜索窗口左边界最低限制到原图像左边界

smax = min(j1+Ds,n+ds); % 搜索窗口右边界最高限制到原图像右边界

% r与s为搜索窗口内像素点的坐标,对搜索窗口内的每个像素点求相似度

for r=rmin:rmax

for s=smin:smax

% 不能与自己比较相似度

if(r==i1&&s==j1)

continue;

end

% 以搜索窗口内的像素点为中心的邻域窗口2

W2=PaddedImg(r-ds:r+ds,s-ds:s+ds);

% 计算邻域间距离

Dist2=sum(sum(kernel.*(W1-W2).*(W1-W2)));

% 计算权值w(x,y)

w=exp(-Dist2/h2);

sweight=sweight+w;

average=average+w*PaddedImg(r,s);

end

end

% 将加权和归一化并替换原像素点

DenoisedImg(i,j)=average/sweight;

end

end

三维块匹配滤波:

function [y_est] = BM3D(y, z, sigma)

elseif strcmp(transform_type, 'dct') == 1,

Tforward = dct(eye(N));

elseif strcmp(transform_type, 'dst') == 1,

Tforward = dst(eye(N));

elseif strcmp(transform_type, 'DCrand') == 1,

x = randn(N); x(1:end,1) = 1; [Q,R] = qr(x);

if (Q(1) < 0),

Q = -Q;

end;

Tforward = Q';

else

dwtmode('per','nodisp');

Tforward = zeros(N,N);

for i = 1:N

Tforward(:,i)=wavedec(circshift([1 zeros(1,N-1)],[dec_levels i-1]), log2(N), transform_type); %% construct transform matrix

end

end

Tforward = (Tforward' * diag(sqrt(1./sum(Tforward.^2,2))))';

Tinverse = inv(Tforward);

return;

陷波滤波:

function [im,fftim] = swannotchfilter(Image,D)

f = Image;

f = mat2gray(f,[0 255]);

[M,N] = size(f);

P = 2*M;

Q = 2*N;

fc = zeros(M,N);

for x = 1:1:M

for y = 1:1:N

fc(x,y) = f(x,y) * (-1)^(x+y);

end

end

F = fft2(fc,P,Q);

H_NF = ones(P,Q);

for x = (-P/2):1:(P/2)-1

for y = (-Q/2):1:(Q/2)-1

v_k = 200; u_k = 145;

D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);

H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);

end

end

G_1 = H_NF .* F;

g_1 = real(ifft2(G_1));

g_1 = g_1(1:1:M,1:1:N);

for x = 1:1:M

for y = 1:1:N

g_1(x,y) = g_1(x,y) * (-1)^(x+y);

end

end

im=g_1;

fftim=G_1;

对 dogDistorted 图像去噪

空域去噪

根据老师讲解,dogDistorted.bmp 所包含的噪声为高斯噪声与周期噪声的混合。

对于传统图像中的高斯噪声,适合使用非局部均值滤波、中值滤波(二维统计滤波)、三维块匹配滤波

非局部均值滤波均方误差更小,但三维块匹配滤波对于细节的保留程度更高。

频域去噪

同样的,采用陷波滤波器去噪,查看噪声图像频谱图:

采用一样的方法陷波滤波:

小结:

matlab去除周期噪声,matlab在空域与频域中去除周期噪声、椒盐噪声的简单应用相关推荐

  1. 图像处理实验,中值滤波处理椒盐噪声

    一.实验目的 图像变换是数字图像处理中的一种综合变换,如直方图变换.几何变换等.通过本实验,掌握中值滤波处理. 二.实验任务 设计程序,用中值滤波法(模板的大小为3×3).进行去噪处理. 得出实验结果 ...

  2. 去除html重复的元素 js,js数组中去除重复值的几种方法

    在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来 去除数组重复值方法: 1,利用indexOf()方法去除 思路:创建一个新数组,然后循环要去重的 ...

  3. html怎么去除左边的圆点,在Html的CSS中去除标签前面小黑点以及ul、LI部分属性方法...

    div是很多人做网站都会用到的,但在显示默认效果时前面总是会有一个小黑点,这个效果很多人不想要,但又不知到如何去除,现在我们可以用以下方法来清除默认黑点. 1.在CSS中写入代码.找到相关性的CSS, ...

  4. html5li怎么去除前面的圆点,在Html的CSS中去除li标签前面小黑点以及ul、LI部分属性方法...

    讲过一围多元示一能近讲提下了多素效个外近    div是很多人做网站都会用到的,但在显示默认效果时前面总是会有一个小黑点,这个效果很多人不想要,但又不知到如何去除,现在我们可以用以下方法来清除默认黑点 ...

  5. 24.双边滤波和中值滤波器(自定义中值滤波器去除椒盐噪声、exp含义)-- OpenCV从零开始到图像(人脸 + 物体)识别系列

    本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 简书链接:https://www.jianshu.com/u/45da1fbce7d0 上篇写道模拟噪声,这篇打算利用中值 ...

  6. 信号处理中去除基线(baseline)干扰的几种方法器

    某些数字信号中会含有基线干扰信号(低频噪音),会对信号分析产生不利影响,如图1所示.需要通过预处理消除信号基线. 图1 含有基线干扰的信号 我总结了有以下几种利用matlab消除基线漂移的方法. de ...

  7. 给图像添加噪声(椒盐噪声,高斯噪声)

    1.椒盐噪声是比较常见的噪声(salt and pepper noise),为什么叫椒盐噪声?因为图像的像素点由于噪声影响随机变成了黑点(dark spot)或白点(white spot).这里的&q ...

  8. matlab对有周期性噪声的图像去噪,数字图像中去除周期性噪声研究.doc

    摘要:图像增强是数字图像处理相对简单却最具艺术性的领域之一,其目的是消除噪声,显现被模糊的细节或突出感兴趣区域.经常采用的手段分空域和频域两类,其中频域更是给我们提供了不同的视角,简化了许多复杂的算法 ...

  9. 去除噪声 matlab 论文,基于MATLAB的语音去噪开题报告

    基于MATLAB的语音去噪开题报告 毕业设计(论文)开题报告 基于MATLAB的语音去噪 综述国内外对本课题的研究动态,说明选题的依据和意义 20世纪60年代中期形成的一系列数字信号处理的理论和算法, ...

最新文章

  1. WPF中的容器控件——Grid
  2. linux centos7 root密码重置方法
  3. 洛谷 P3381 【模板】最小费用最大流
  4. linux 用户空间 和 内核空间 延时函数
  5. MFC中的CString类使用方法指南
  6. android编程文献,郭宏志. Android应用开发详解[M]. 2011.
  7. 利用CNN和迁移学习方法识别植物叶片疾病
  8. web之Attribute
  9. Soft Value function基础和Soft Q Learning中Policy Improvement 证明
  10. 程序员玩连连看的正确姿势
  11. 为什么软件需要数字签名?代码签名证书的作用
  12. 雷石柏云服务器指令,雷石KTV人工智能,让歌唱更自由
  13. MyBatis官方文档
  14. Flutter第一天
  15. 使用云服务器上线网站流程
  16. 用pandas分析百万电影数据
  17. 【可达性分析中的增量更新和原始快照】
  18. 怎么用c语言编辑酷q,GitHub - traceless0929/Native.Cqp.Csharp: 完全由 C# 语言编写的 酷Q 插件SDK...
  19. java 克隆有什么用_java中的克隆技术具体有什么应用?
  20. 快来试试Python写的游戏《我的世界》

热门文章

  1. java链式编程_Java 链式编程 和 lombok 实现链式编程
  2. php数据库滚动文字_PHP 里用的文字左右滚动?
  3. excel 科学计数法转换成文本完整显示_避免万次暴击,巧办法解决数字和文本之间的快速转化...
  4. NoSQL生态系统——一致性RWN协议,向量时钟,gossip协议监测故障
  5. mysql 按条件更新
  6. 变量在原型链中的查找顺序
  7. Vue.js 是什么
  8. 数据结构 树的遍历(递归遍历)
  9. 大整数乘法(POJ2389)
  10. Java系列:关于Java中的桥接方法