图像处理02 matlab中NSCT的使用

06 matlab中NSCT的使用

最近在学习NSCT相关内容,奈何网上资源太少,简单看了些论文找了一些帖子才懂了一点点,在此分享给大家,希望有所帮助。

一.NSCT流程

首先我们先梳理一下NSCT变换的流程,只有清楚流程才更好的理清NSCT工具箱里的代码,才能够根据自己的需要进行灵活使用。

①NSPFB进行非下采样金子塔分解将图像分解为低频和高频分量,比如下图所示,进行三层分解就可以得到三个高频分量和一个低频分量。

image

②NSDFB对NSP分解后的高频分量进行方向分解,在不同方向上进行分解,分解成为不同方向上的细节信息。

image

③经过上面两个步骤,我们其实就已经实现了NSCT分解的全部过程,如下图所示。

image

④那么如何进行图像的重构呢,这是针对我目前应用到的图像融合进行分析的,我们利用制定好的图像融合的规则,分别将低频分量,和各个方向上的信息进行融合,最终得到的是将两个上图所示的结构又变成了一个这样结构。

⑤将各个方向的频率信息合在一起得到每一层总的高频信息,3-1的结构又变回了金字塔结构,之后我们只要进行金字塔重构即可,从底层到顶层这样一个过程。
至此虽然忽略掉了一些细节(虽然我也不太懂),我们大概理清了NSCT分解和图像重构的这样一个流程,搞懂这个流程再去看代码自然就事半功倍了。

二. matlab关键代码解析

1.小试牛刀(搞懂一个函数快速上手使用)

关键函数:NSCT再matlab NSCT 工具箱中仅仅下面一个函数即可实现。

y = nsctdec(x, levels, [dfilt, pfilt] )
  • x:图像的输入矩阵,双精度数据类型
  • levels:方向滤波器组分解层数向量,注意是一组向量值,比如[1 2 3],就是说明对第一层高频分量进行2个方向分解,第二层4方向分解,第三层8方向分解。
  • dfilt:方向滤波器组
  • pfilt:塔式分解的滤波器组
  • out:输出的结果是一组向量集合,集合第一个向量是低频分量的二维数组,接下来是从小到大排列高频子带。

经过三次分解后,我们输出一下每层的信息(注意inshow中我引用的格式,关注一些cell里面输出内容,就可以上手使用了)


subplot(2,2,2);
imshow(Insp{1,1},[]);title('低频分量');
subplot(2,2,3);
imshow(Insp{1,2}{1,1},[]);title('高频1');
subplot(2,2,4);
imshow(Insp{1,2}{1,2},[]);title('高频1');

image

2.登堂入室(看看这个函数背后的细节)

这个函数所实现的无外乎就是在上文中所讲诉的流程,想了想没必要仔细去讲,下面是完整注释版代码,大家对着注释好好看一下就好。

function [Insp,Insct]= myNSCTd(I,levels,pfiltername,dfiltername,type)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%函数功能:完成图像的level级NSCT分解
%%函数输入:I	——输入源图像
%          levels	——分解级别的数组,例如[1,2,3],分解的方向数分别为[2,4,8].
%          pfiltername	——塔式分解滤波器名称
%          dfiltername  ——方向分解滤波器名称
%%函数输出:Insct    ——输出为cell类型,包括低通以及各级别各方向的分量
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                      %%%%%%%%生成非下采样金字塔滤波器组%%%%%%%%%%%%%
%该函数为copy的,可选参数如下:
%'9-7'、'maxflat'、'pyr'、'pyrexc'
%输出的h0,h1是金字塔分解滤波器
%输出的g0,g1是金字塔重构滤波器
[ph0, ph1, pg0, pg1] = atrousfilters(pfiltername);%无法改进%%%%%%%%%生成非下采样方向滤波器组%%%%%%%%%%%%%
%建立一个4*4的空矩阵,存放滤波器组
filtersd = cell(4) ;%function [h0, h1] = dfilters(fname, type)
%copy的函数,作用是根据名字生成方向滤波器
%fname的可选参数有:'haar'、'vk'、'ko'、'kos'、
%'lax'、'sk'、'cd'、'pkva'、'oqf_362'、'sinc'
%其中测验结果看的比较舒服的有'lax'、'sk'、'cd'
%最理想的是'pkva',copy函数中的ldfilter.m、
%ld2quin.m和qupz.m都是用语生成该滤波器
%type的可选参数有:'d'、'r',分别表示生成分解
%滤波器和重构滤波器。
%输出的h0为小波函数(高频),h1为尺度函数(低频)
[dh1, dh2] = dfilters(dfiltername, 'd'); %无法改进
dh1 = dh1./sqrt(2) ;
dh2 = dh2./sqrt(2) ;%function y = modulate2(f, type, center)
%copy的函数,作用是将输入的方向滤波器f依据type类型增加方向性
%type可选参数有:'r'生成横向梳状滤波器、'c'生成纵向梳状滤%波器、
%'d'生成网格型滤波器(综合横纵梳状滤波器的特点)
%center参数,对输入滤波器的初始中心作确定,通常默认为[0 0]。
filtersd{1} = modulate2(dh1, 'c');%无法改进
filtersd{2} = modulate2(dh2, 'c');%无法改进%function [y1, y2] = parafilters( f1, f2 )
%copy的函数,输入是两个滤波器,输出是两个滤波器组
%作用是将输入的两个滤波器分别增加行列方向性之后
%再分别转置,生成四个不同的滤波器
%随后循环调用function y = resampz(x, type, shift)
%copy的函数,输入是单个滤波器x,type是上面生成的四个滤波器
%中的第几个,shift通常不输入,为默认值1.
%对每个滤波器作旋转,即生成四个旋转后的方向滤波器。
%综合结果:
%对输入的两个滤波器,输出两组旋转后的滤波器,每组四个
[filtersd{3}, filtersd{4}] = parafilters( dh1, dh2 ) ;%无法改进%判断分解层数
clevels = length( levels );
%初始化输出缓存
nIndex = clevels + 1 ;
y = cell(1, nIndex) ;
Insp=cell(1,clevels);%NSCT分解
for i= 1 : clevels   %对图像进行金字塔分解,xlo为低通输出,xhi为高通输出switch typecase 'NSCT'[Ilow, Ihigh] = NSPd(I, ph0, ph1, i-1) ;%无法改进%NSPlow{i}=Ihigh;case 'NewPM'[Ilow,Ihigh]=Newmcd(I);end%如果方向分解级别不为0,进行方向分解,并将结果存入y的对应部分if levels(nIndex-1) > 0 % function nsdfbdec中,在level高于3的时候,采样矩阵M的设定不懂,% 所以只能copy过来。Ihigh_dir = nsdfbdec(Ihigh, filtersd, levels(nIndex-1));      y{nIndex}=Ihigh_dir ;%若方向分解级别为0,直接复制else y{nIndex}=xhigh ;end%更新输出缓存指针nIndex = nIndex - 1 ;%更新图像为分解的低通部分,进行下一次迭代I = Ilow ;Insp{i}=I;
end% 输出的第一副图为最后的低通结果。
y{1}=I;
Insct=y;end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第23期day57|739. 每日温度、496.下一个更大元素

一、739. 每日温度 力扣题目链接​​​​​​ 1. 什么时候用单调栈? 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时就要想到可以用单调栈。 单调栈的本质是空间换时间,更直白来说,就是用一个栈来…

Python不会调试不够丝滑?那事你不会logging---剖析!

前言: 一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题! 基本概念: Logger - 日志记录接口 Handler - 确定日志记录发送到不同的地方(文件、控制台等) Level - 定义了日…

git 构建报错

钉钉插件]当前任务未配置机器人,已跳过 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 4: Tool type “maven” does not have an install of “maven-3.8.8” configured - did you mean “Maven-3.8.8”? …

高斯DWS数据库分页查询优化思路

除了高斯其它关系型数据可也一样可以使用 官方链接:EXPLAIN_数据仓库服务 GaussDB(DWS)_8.2.0_DML语法_华为云 参考链接:MySQL大数据量分页查询方法及其优化_mysql大数据量分页查询优化-CSDN博客 数据量过大,分页查询优化 背景:…

数据治理平台之数据采集细节

计算HDFS系统中分区文件的大小 利用递归对树形结构遍历 准备阶段 递归起点访问工具收集数据的容器 遍历阶段 中间节点:根据需要处理计算,收集数据,继续递归叶子节点:收集数据 写代码注意事项 不要反复连接数据库,…

类方法,静态方法和实例方法的区别及应用场景

在 Python 中,有三种不同类型的方法:实例方法、类方法和静态方法。它们各自有不同的特点和应用场景: 实例方法(Instance Method): 实例方法是最常见的方法类型,在方法定义中第一个参数通常被命…

Linux 串口应用编程

1 串口 API Linux串口通信: 在 Linux 系统中,操作设备的统一接口就是: open/ioctl/read/write 。 对于 UART ,又在 ioctl 之上封装了很多函数,主要是用来设置行规程。所以对于 UART ,编程的套路就是…

flutter vscode gradle 配置

我这边主要改了如图两个文件,然后把Gradle的问题解决了 参考文章: flutter运行Runt imeException: Timeout of 120000问题-CSDN博客 flutter配置gradle(个人笔记,非教程)_flutter gradle_追寻着星星的方向的博客-CSD…

ATTCK实战系列——红队实战(一)

文章目录 网络拓扑环境搭建外网渗透信息收集端口扫描目录扫描 漏洞利用phpmyadmin拿shellgeneral_log_file写一句话蚁剑连接 网站后台拿shell关闭防火墙新建用户,开启3389 内网渗透(一)CSCS木马上线信息收集hashdumpMimikatz抓取明文密码 权限…

姓氏情侣家庭亲子谐音顽梗头像分销流量主微信抖音小程序开发

姓氏情侣家庭亲子谐音顽梗头像分销流量主微信抖音小程序开发 姓氏情侣头像:提供各种姓氏的情侣头像模板,用户可根据自己的姓氏选择合适的头像进行定制。 家庭头像:为家庭成员提供多种形式的头像模板,让用户可以选择合适的家庭头像…

趣学python编程(七、实现个小网站如此简单 web.py使用介绍)

这里先拿一个小网站的例子来举例,保持好奇心就可以了。因为兴趣才是最好的老师,它能激发人内在的行动力。这里介绍个使用web.py轻量级框架实现的一个小网站,可以看到实现个小网站并不难。python都能用来干什么?那么网站就是它众多…

2024年欺骗技术的十大趋势

一、安全数据湖部署:企业正在实施来自各大科技厂商和云服务商的海量安全数据湖方案。欺骗技术将不断分析这些海量数据,以更好地了解正常和异常行为,作为欺骗模型的基线。 二、云计算:应用于欺骗技术的大语言模型需要大量资源来处理…

56、修改Integer缓存上限

参考视频: https://www.bilibili.com/video/BV13u4y1w7tb/?spm_id_from333.999.0.0&vd_sourcebbef52ca6b7ac46d36af19295c565917 第一步: 第二步: 第三步:修改Integer缓存上限 运行代码 Testpublic void integerTest(…

【高级网络程序设计】Week2-3 HTML

一、The Basics 1. HTML&HTML file HTMLMarkup languageHyper Text Markup LanguageHTML fileText file with markup tags.htm/.html extension Create an html file Open an editor Type: <html><head><titile><body> Save it as .html Open i…

C++二分查找算法:132 模式解法三枚举1

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码最简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三…

关于 Git 你了解多少?

1. 什么是Git? Git 是一个版本控制系统&#xff0c;由林纳斯托瓦兹创建。它旨在管理项目代码的更改&#xff0c;以便团队成员可以协作开发和维护代码库。Git 可以让用户跟踪代码的更改、回滚错误的更改、合并代码等。Git 还具有分支和标签的功能&#xff0c;使得团队成员可以在…

人工智能时代:深入了解与学以致用的智能科技

目录 前言人工智能的领域1. 医疗健康2. 交通与智能驾驶3. 教育领域4. 金融与人工智能5. 制造业与自动化 人工智能的应用1. 智能手机与语音助手2. 智能家居系统3. 自动驾驶汽车4. 医疗诊断与治疗5. 金融风控与预测分析 对人工智能的看法1. 科技的利弊2. 伦理和隐私问题3. 人工智…

static静态【C#】

1static静态&#xff1a; 这个静态不是太好讲解。 我举几个例子&#xff1a; 在C语言里&#xff0c;static修饰的局部变量&#xff0c;在跳出再进来后还能保持上次离开设置的值。 在C#里&#xff0c;对象都是派生的。每个对象都是独立的。方法也是独立的。 现在&#xff0c…

python f-字符串的句法形式化

PEP 701 取消了对 f-字符串 使用的一些限制。 f-字符串内部的表达式部分现在可以是任何有效的 Python 表达式&#xff0c;包括重用了与标记 f-字符串本身相同的引号的字符串、多行表达式、注释、反斜杠以及 unicode 转义序列。 让我们详细介绍一下&#xff1a; 引号重用&#x…

Hadoop性能调优建议

一、服务器配置 1. BIOS配置&#xff1a; 关闭smmu/关闭cpu预取/performance策略 2. 硬盘优化 raid0 打卡cache /jbod scheduler/sector_size/read_ahead_kb 3. 网卡优化 rx_buff/ring_buffer/lro/中断绑核/驱动升级 4. 内存插法&#xff1a;要用均衡插法…