【代码备份】原图降采样后进行NLM滤波

文件路径:

滤波算法main.m:

%% 测试函数
%NLM滤波及滤波与
clc,clear all,close all;
ima_ori=double(imread(‘F:\Users\****n\Documents\MATLAB\TestImages\标准图像\lenna.bmp‘));%原图

ima=imresize(ima_ori,0.5,‘nearest‘);
[wid,len,channels]=size(ima);
search=1;%搜索窗半径大小=4
patch=1;%匹配窗半径大小
sigma=5;
rima=imresize(ima,2,‘bicubic‘);%原图降采样后的双三次插值放大
% denoise
fima=rima;
if channels>2
    for i=1:channels
       fima(:,:,i)=NLmeansfilter(rima(:,:,i),search,patch,sigma);
    end
end

% show results
%subplot(1,3,1),imshow(uint8(ima)),title(‘original‘);
subplot(1,3,2),imshow(uint8(rima)),title(‘ori-bicubic‘);
subplot(1,3,3),imshow(uint8(fima)),title(‘filtered‘);%NLM滤波后图像
[PSNR_ori, MSE_ori] = psnr(rima, ima_ori);
[PSNR_nlm, MSE_nlm] = psnr(fima, ima_ori);%将双三次插值的结果



记录:有些忘了,貌似是想对比滤波+插值插值+滤波?

[PSNR_ori, MSE_ori] = psnr(rima, ima_ori);
[PSNR_nlm, MSE_nlm] = psnr(fima, ima_ori);

分别计算的是单纯降采样后又插值的psnr,以及,插值后又进行了滤波的psnr。

可以发现,多了nlm滤波步骤后,psnr由29.1026->29.2503,提高了0.1477。

原文地址:https://www.cnblogs.com/wxl845235800/p/10150578.html

时间: 2024-08-11 13:34:21

【代码备份】原图降采样后进行NLM滤波的相关文章

图像的降采样与升采样(二维插值)----转自LOFTER-gengjiwen

图像的降采样与升采样(二维插值) 1.先说说这两个词的概念: 降采样,即是采样点数减少.对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中 每行每列每隔k个点取一个点组成一幅图像.降采样很容易实现. 升采样,也即插值.对于图像来说即是二维插值.如果升采样系数为k,即在原图n与n+1两点之间插入k-1个点,使其构成k分.二维插值即在每行插完之后对于每列也进行插值. 插值的方法分为很多种,一般主要从时域和频域两个角度考虑.对于时域插值,最为简单的是线性插值.除此之外,Hermite插值,样

[python]南邮OJ代码备份爬虫

之前看过Python学习的经验,说以工程为导向学习. 自己分析了一下,一般接触Python的都有一定的其他语言基础,对于程序设计的基本逻辑,语法都有一个大概的了解.而Python这种脚本语言,没有过于独特的语法,在一定的其他语言的基础上,更是可以直接上手的. 之前看Python简明教程,半天没有进度.正好遇上Python爬虫项目,直接上手,方便快捷. 网站:http://acm.njupt.edu.cn/welcome.do?method=index,正值系统更新,于是写一个备份代码的爬虫. 使

visual studio代码备份精减

当我们想备份自己的解决方案代码时,发现本来只有kB级的代码文件,visual studio编译后竟达到了几十甚至几百MB的量级.此时为了节省硬盘空间,我们需要把一些代码无关的东西精减掉,这些东西包括: Debug文件夹.x64文件夹.ipch文件夹..sdf文件..VC.db文件 以上文件夹和文件都会在编译时产生,对于我们代码备份无关紧要,所以都可以删除.另外,不同visual studio版本,可能产生的文件夹或文件不尽相同,但基本差不多,只要看到上面那些文件,尽可删除就是.如此精减后,解决方

代码备份机

案例: 代码备份机 1.打包备份 2. 自动命名 3.大抱歉进行文件筛选,值备份特定文件 4. 定时备份 编程思路: 1.项目:拆解 2.单功能:写函数 3. 多功能:合并类 4 写代码:先写框架,后完善 5.要点: 完成比完美更重要 # 第一步:根据功能设计函数 # 1.打包 def zip_all(): '''打包''' pass def auto_name(): '''自动命名''' pass def zip_all_by_name(): '''筛选文件''' pass # 第二步:完善函

JSONP平台对接代码备份

<script type="text/javascript">$(function(){  $.ajax({   url:"http://192.168.11.97:8025/battle_summary?player_guid=1000000",   async: false,   dataType:"jsonp",   jsonpCallback:"summary",   success:function(su

记一次备份发起时间延后问题

下午接到某业务DBA电话,某某业务资源比较繁忙,说备份发起时间由原来的12点延迟到13点半了. 经过查询确实备份时间一般在中午12点就发起,结果今天在1点半发起,1点半为上班时间再加上备份资源占用肯定高.经过业务组同意暂时先停掉该业务的job和策略.后接到反馈资源使用下来了. 问题暂时解决但需要查明原因为啥备份发起时间延后1.5小时. 查询备份发起时间结束时间等相关信息: COL STATUS FORMAT a9 COL hours FORMAT 999.999 COL START_TIME f

[RK_2014_0911]串口代码备份,SerialPortOpen(),SerialPortRead(),SerialPortWrite()

[代码备份01] uart.c /******************************************************************************* Copyright (C), *** Tech. Co., Ltd. FileName: uart.c Author: Version : Date: 2008-1-11 Description: 串口的通用操作文件 other: Function List: History: // 历史修改记录 1.

使用windows系统编写shell代码,在linux执行后的报错

使用windows系统编写shell代码,在linux执行后,产生如下的错误 [[email protected] vagrant]# bash /var/www/borg/fuel/app/tasks/monitor_sync.sh /var/www/borg/fuel/app/tasks/monitor_sync.sh: line 11: $'\r': command not found /var/www/borg/fuel/app/tasks/monitor_sync.sh: line 1

把需求变化带来的代码修改成本降至最低的一种方法

为解决工作中一些繁琐的问题, 写了一个GUI程序, 操作界面是这个样子的 这个程序的实现起来并不是非常的繁琐, 但在界面的交互操作上, 也不仅仅只是展示数据. 如上面图片所见,列表中的每一条记录每一个数据项都需要可以填写和选择: 需要添加和删除记录:还需要调整记录的位置:向上移动.向下移动:要实现这些操作, 控制UI的程序其实挺复杂的. 我哼哧哼哧的把这个程序写完, 拿去给同事们演示使用方法, 同事们给我提出了不少的建议. 其中的一条是:把界面分割成上下两部份的方式替代列表中类型字段的选择, 以