退化函数建模

  通过点扩散函数 PSF 进行图像复原的实验,添加适当的噪声。

  fspecial函数中,’motion’指的是运动模糊算子。

代码示例

% checkerboard产生测试板图像,第一个参数是每个正方形一边的像素数,第二个参数行数,第三为列数(缺省则等于行数)
f = checkerboard(8);                                     % 产生一个一面为8个正方形的测试板
PSF = fspecial('motion',7,45);                           % 运动模糊,PSF刚好为空间滤波器
gb = imfilter(f,PSF,'circular');                         % 减少边界效应
noise = imnoise(zeros(size(f)),'gaussian',0,0.001);      % 高斯噪声
g = gb + noise;                                          % 添加高斯噪声构造退化的图像模型subplot(2,2,1);imshow(pixeldup(f,8),[ ]);title('原图像'); % 大图像运算过慢,故选用小图像来节省时间,
subplot(2,2,2);imshow(gb);title('运动模糊图像');          % 以显示为目的,可通过像素赋值来放大图像。
subplot(2,2,3);imshow(noise,[ ]);title('高斯噪声图像');
subplot(2,2,4);imshow(g);title('运动模糊+高斯噪声');

运行结果


频域滤波降低周期噪声

  周期噪声本身表现为类似冲击的串,这种串在傅里叶频谱中通常是可见的。滤除这些成分的主要途径是通过陷波滤波。n阶巴特沃兹陷波滤波器的传递函数如下:


直接逆滤波


维纳滤波


代码示例

f = checkerboard(8);                                     % 产生一个一面为8个正方形的测试板
PSF = fspecial('motion',7,45);                           % 运动模糊,PSF刚好为空间滤波器
gb = imfilter(f,PSF,'circular');                         % 减少边界效应
noise = imnoise(zeros(size(f)),'gaussian',0,0.001);      % 高斯噪声
g = gb + noise;                                          % 添加高斯噪声构造退化的图像模型fr1 = deconvwnr(g,PSF);                                  % 直接逆滤波Sn = abs(fft(noise)).^2;                                 % 噪声功率谱
nA = sum(Sn(:))/prod(size(noise));                       % 平均噪声功率,prod计算数组元素的连乘积。
Sf = abs(fft2(f)).^2;                                    % 图像功率谱
fA = sum(Sf(:))/prod(size(f));                           % 平均图像功率
R = nA/fA;                                               % 噪信功率比
fr2 = deconvwnr(g,PSF,R);                                % 参数维纳滤波器NCORR = fftshift(real(ifft2(Sn)));                       % 自相关函数
ICORR = fftshift(real(ifft2(Sf)));
fr3 = deconvwnr(g,PSF,NCORR,ICORR);subplot(2,2,1);imshow(g,[]);title('噪声图像');
subplot(2,2,2);imshow(fr1);title('逆滤波结果');
subplot(2,2,3);imshow(fr2);title('使用常数比率的维纳滤波的结果');
subplot(2,2,4);imshow(fr3);title('使用自相关函数的维纳滤波的结果');

运行结果


正则滤波(约束的最小二乘方滤波)

算法另寻…

代码示例

f = checkerboard(8);                                     % 产生一个一面为8个正方形的测试板
PSF = fspecial('motion',7,45);                           % 运动模糊,PSF刚好为空间滤波器
gb = imfilter(f,PSF,'circular');                         % 减少边界效应
noise = imnoise(zeros(size(f)),'gaussian',0,0.001);      % 高斯噪声
g = gb + noise;                                          % 添加高斯噪声构造退化的图像模型fr1 = deconvreg(g,PSF,4);                                % 正则滤波器
fr2 = deconvreg(g,PSF,0.4,[1e-7 1e7]);subplot(1,3,1);imshow(g);title('运动模糊+高斯噪声(g)');
subplot(1,3,2);imshow(fr1);title('正则滤波器');
subplot(1,3,3);imshow(fr2);title('正则滤波器(缩小范围)');

运行结果


使用L-R算法的迭代非线性复原

  前面所讨论的图像复原方法都是线性的,而LR算法是非线性方法,又称Lucy-Richardson算法。

代码示例

f = checkerboard(8); % 产生64×64像素的方形图像PSF = fspecial('gaussian',7,10); % 产生一个大小为7×7且标准偏差为10的高斯PSFSD = 0.01; % 标准偏差g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2); % 添加均值为0、标准偏差为0.01的高斯噪声DAMPAR = 10*SD; % 结果图像与原图像的偏离阈值LIM = ceil(size(PSF,1)/2);WEIGHT = zeros(size(g)); % WEIGHT数组大小64×64WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1; % WEIGHT数组有值为0的4像素宽的边界,其余像素为1f1 = deconvlucy(g,PSF,5,DAMPAR,WEIGHT); % 迭代5次f2 = deconvlucy(g,PSF,10,DAMPAR,WEIGHT); % 迭代10次f3 = deconvlucy(g,PSF,20,DAMPAR,WEIGHT); % 迭代20次f4 = deconvlucy(g,PSF,100,DAMPAR,WEIGHT); % 迭代100次subplot(2,3,1);imshow(pixeldup(f,8));title('原图像');subplot(2,3,2);imshow(g);title('高斯噪声+运动模糊');subplot(2,3,3);imshow(f1);title('L-R算法迭代5次');subplot(2,3,4);imshow(f2);title('L-R算法迭代10次'); % 图像虽然改进,但依然模糊subplot(2,3,5);imshow(f3);title('L-R算法迭代20次'); % 迭代20次为合理复原subplot(2,3,6);imshow(f4);title('L-R算法迭代100次'); % 除了稍微清晰明亮,并无显著改进

运行结果


盲去卷积

  不以PSF知识为基础的图像复原方法统称为盲去卷积算法。

代码示例

PSF = fspecial('gaussian',7,10);SD = 0.01;g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2);INITPSF = ones(size(PSF)); % 点扩散函数的初始估计DAMPAR = 10*SD; % 结果图像与原图像的偏离阈值LIM = ceil(size(PSF,1)/2);WEIGHT = zeros(size(g)); % WEIGHT数组大小64×64WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1; % WEIGHT数组有值为0的4像素宽的边界,其余像素为1[fr1,PSFe1] = deconvblind(g,INITPSF,5,DAMPAR,WEIGHT); % 盲去卷积迭代5次[fr2,PSFe2] = deconvblind(g,INITPSF,10,DAMPAR,WEIGHT); % 盲去卷积迭代10次[fr3,PSFe3] = deconvblind(g,INITPSF,20,DAMPAR,WEIGHT); % 盲去卷积迭代20次subplot(2,2,1);imshow(pixeldup(PSF,73),[ ]);title('退化函数的PSF');subplot(2,2,2);imshow(pixeldup(PSFe1,73),[ ]);title('盲去卷积迭代5次');subplot(2,2,3);imshow(pixeldup(PSFe2,73),[ ]);title('盲去卷积迭代10次');subplot(2,2,4);imshow(pixeldup(PSFe3,73),[ ]);title('盲去卷积迭代20次'); % 最接近真正PSF

运行结果

退化函数及多种复原方法【Matlab】相关推荐

  1. 【图像处理】MATLAB:退化函数及多种复原方法

    退化函数建模   通过点扩散函数 PSF 进行图像复原的实验,添加适当的噪声.   fspecial函数中,'motion'指的是运动模糊算子. 代码示例 % checkerboard产生测试板图像, ...

  2. matlab分段函数的表达_【MATLAB】06_分段函数的多种表示方法

    目录 方法一:(一般方法) 方法二:(find) 方法三:(关系运算) 方法一:(一般方法) 按照正常的思路,表示分段函数是在脚本文件里用 if ..else..语句来完成,例如下列代码: funct ...

  3. 数字图像学笔记——13. 图像退化与复原(退化函数的评估方法:观察法、实验法、数学建模法与湍流导致的退化)

    在对受到多种原因影响的图像进行复原时,我们经常需要先行评估对图像质量产生影响的退化函数,有时甚至需要尝试建模.通过这些手段,能够最大程度上恢复图像上的噪音,并重建高清的图像细节. 文章目录 线性位置不 ...

  4. matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法

    基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法 [专利摘要]本发明提供了一种基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法,主要涉及双面打印文件的拼接及复原问题,通常由于图片较多,信息量较大,故通常为 ...

  5. 多通道LMMSE图像超分辨复原方法研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.多通道LMMSE复原算法 ✳️ 三.实验验证 ✳️ 四.参考文献 ✳️ 五.Matlab程序获取与验证 ✳️ 一.引言 数字图像处理又称为计算机图像处理, ...

  6. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...

    [分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB) 无约束非线性规划函数\fminunc函数使用方法(MATLAB) %用于求解无约束非线性规划的函数有:fminsearch和f ...

  7. Matlab自定义函数的几种方法

    Matlab自定义函数的几种方法_czw-CSDN博客_matlab自定义函数 Matlab 定义函数的几种方法_海底小星星的博客-CSDN博客_matlab定义函数

  8. matlab中fprintf函数的具体使用方法

    matlab中fprintf函数的具体使用方法实例如下: fprintf函数可以将数据按指定格式写入到文本文件中.其调用格式为: 数据的格式化输出:fprintf(fid, format, varia ...

  9. matlab roundn函数_columns函数的使用方法 matlab中round函数具体用法

    Excel中column函数的使用方法是什么?其实小编会说分手是想被挽留,你却顺口祝小编自由. 只读属性,返回 TextStream 文件中当前字符位置的列号. 语法: =Column(referen ...

最新文章

  1. PingCode 全年上线功能盘点
  2. RUP大讲堂(第一讲):RUP简介及软件过程改进
  3. myeclipse 修改模板
  4. 老子《道德经》第四十一章
  5. vuejs和webpack项目(VueComponent)初尝试——瀑布流组件
  6. Spring Boot 2应用程序和OAuth 2 –传统方法
  7. Solr入门——安装
  8. php+错误+处理,PHP 错误处理手记!!!!!
  9. 数字与中文信息的结合记忆(下)
  10. siamese改进_[CVPR2019]我对Siamese网络的一点思考(SiamMask)
  11. 【转】用VC2008编译最新SVN版本OpenCV源代码
  12. 基于qt开发的一款聊天气泡框
  13. 转移操作和占用操作主机
  14. 《Python编程从入门到实践》(第2版)第二章 习题答案
  15. 牛客笔试OJ-在线编辑器输入输出总结
  16. 项目管理办公室——PMO
  17. CIO挂帅绩效考核 初战告捷秘诀何在?
  18. 文化部查处第九批违法游戏及经营活动的通知
  19. Android分应用层、应用框架层、系统应用层、核心层
  20. P4287 [SHOI2011]双倍回文

热门文章

  1. 集线器级联增加了网络数量,效率降低了,形成了大的冲突域,怎么解决?
  2. 3-6:常见任务和主要工具之正则表达式
  3. visual studio运行时库MT、MTd、MD、MDd 的区别
  4. QT5_数据类型转化
  5. dva源码解析(一)
  6. python实现斐波那契数列
  7. Android studio 配置使用maven
  8. 《专门替中国人写的英语语法》(四)
  9. Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】
  10. Linux Shell 之 我的第一个Shell程序