非下采样Contourlet变换(Nonsubsampled contourlet transform,NSCT)

类似小波变换,都是将源图像变换后对系数进行一些处理,再逆变换回目标图像。

NSCT是一种新型平移不变,多尺度,多方向性的快速变换。

NSCT是基于Nonsubsampled金字塔(NSP)和Nonsubsampled方向滤波器(NSDFB)的一种变换。首先由NSP对输入图像进行塔形分解,分解为高通和低通两个部分,然后由NSDFB将高频子带分解为多个方向子带,低频部分继续进行如上分解。

  • Nonsubsampled Pyramid(NSP):

Nonsubsampled Pyramid(NSP)和Contourlet的Laplacian Pyramid(LP)多尺度分析特性不同。图像通过Nonsubsampled Pyramid(NSP)进行多尺度分解,NSP去除了上采样和下采样,减少了采样在滤波器中的失真,获得了平移不变性。NSP为具有平移不变性滤波结构的NSCT多尺度分析,可以得到与LP分解一样的多尺度分析特性。图2.4(a)处分为3个尺度。

  • Nonsubsampled方向滤波器(NSDFB)

Nonsubsampled方向滤波器(NSDFB)是一个双通道的滤波器,将分布在同方向的奇异点合成NSCT的系数。方向滤波器(DFB)是Bamberger and Smith提出的。其通过一个l层的树状结构的分解,有效的将信号分成了 个子带,其频带分割成为锲形。Nonsubsampled DFB(NSDFB)为非采样,减少了采样在滤波器中的失真,获得了平移不变性。并且每个尺度下的方向子图的的大小都和原图同样大小,Contourlet变换为所有子带之和等于原图。NSCT有更多的细节得以保留,变换系数是冗余的。下为三个尺度下对图像频域的分割图,其中每个尺度的方向子带数目以2倍递增,以在1,2,3尺度下的方向子带数目分别为2,4,8个。
paper 125:NSCT——Nonsubsampled contourlet 变换程序(尺度不变性问题研究) - Jason.Hevey - 博客园 https://www.cnblogs.com/molakejin/p/5918976.html

【CV】NSCT:Nonsubsampled Contourlet变换算法以及matlab实现_计算机视觉CV,图像处理,图像融合_SoaringLee_fighting的技术专栏-CSDN博客 https://blog.csdn.net/soaringlee_fighting/article/details/80150711

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab

非下采样Contourlet变换(Nonsubsampled contourlet transform,NSCT)采用非抽样金字塔结构和非抽样方向滤波器组构成,具有Contourlet变换所不具备的平移不变性、较高冗余度等优良特性,而且能够克服伪吉布斯现象。图像经过非下采样Contourlet变换后分解成多尺度、多方向的细节信息,这些细节信息代表了图像不同频带不同方向的特征,这就简化了系数之间的关系。

学习论文1:

结合NSCT与插值的图像超分辨率重建 - 道客巴巴 http://www.doc88.com/p-5496418928888.html

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_02【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_图像处理_03

 

 

 

学习论文2:

基于学习的NSCT 的指纹图像超分辨率重建.

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_图像处理_04

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_05【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_06

 

 【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_07【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_图像处理_08

 

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_09【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_10

 

 学习论文3:

一种新的NSCT超分辨率图像复原技术.pdf https://max.book118.com/html/2015/0909/25034669.shtm

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_11

 

 【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_12

学习论文4:

结合多特征的单幅图像超分辨率重建算法 - 哈尔滨工业大学科研学术 - Free考研 http://school.freekaoyan.com/heilongjiang/hit/keyan/2019/10-24/157190709570584.shtml

为提高直接捕获的图像质量,针对梯度特征只能提取水平、垂直方向信息及非下采样轮廓波变换(NSCT)提取细节信息不足的缺陷,提出一种结合Gabor变换及NSCT的超分辨率重建算法.该算法充分利用Gabor变换和NSCT的互补性,针对输入图像块的特点,采用Gabor变换来提取纹理特征,NSCT来提取轮廓特征,然后分别利用稀疏模型进行重建,最后合并成一幅高分辨率图像.由于输入图像或多或少存在模糊,在重建过程中,加入了去模糊的正则项,以消除输入模糊的影响.实验结果表明,结合两种特征的超分辨率效果与单一特征相比,能够恢复更多的细节信息,去模糊正则项也有一定的作用.本文方法与Kim提出的核岭回归及Yang提出的稀疏表示算法(SCSR)相比,主观上视觉效果更加清晰,客观上PSNR值平均提高了近2dB,说明了该算法能够有效地提高图像的质量。

方差分类:对于平坦块,重点复原纹理信息,利用Gabor滤波器提取小块的纹理特征;而对于非平坦块,重点恢复其轮廓信息,利用NSCT提取小块的轮廓特征。

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_13

 

 

NSCT不仅具有良好的多方向性和多尺度性,还具有平移不变性,能够有效地提取图像的轮廓特征. NSCT由非下采样金字塔(NSP)分解和非下采样方向滤波器组(NSDFB)分解组成。

以两层NSP分解和两层NSDFB分解为例,阐述图像分解过程.图像首先经NSP分解得到一个高频子带和一个低频子带,然后采用NSDFB对高频子带进行方向分解,若方向分解系数为m,则得到2m个高频子带.而下一次NSP分解再对上一层NSP分解得到的低频图像进行分解,因此经过两层NSP分解和两层NSDFB分解,可以得到1个低频子带和8个高频子带.相比较梯度特征,NSCT可以得到更多尺度与方向的信息,对图像的描述能力更强。

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_图像处理_14

%NSCT_imagefusion%
%实现红外与可见光图像融合;

%初始化%
clear all;
close all;
clc;
%初始化结束%

%计时开始%
tic;  
path(path,'nsct_toolbox');
path(path,'ziji');
kk=1.5;
%%%%%%%%%%
%输入图像%
%%%%%%%%%%
[input_image_TV_int_RGB, input_image_TV_int_MAP] = imread('红外.jpg');                    %输入gif格式的可见光图像%
% input_image_TV_int_RGB = uint8(256*ind2rgb(input_image_TV_int_GIF, input_image_TV_int_MAP));     %将gif格式数据转换为RGB格式数据%

[input_image_IR_int_RGB, input_image_IR_int_MAP] =  imread('可见光.jpg');                    %输入gif格式的红外图像%
% input_image_IR_int_RGB = uint8(256*ind2rgb(input_image_IR_int_GIF, input_image_IR_int_MAP));     %将gif格式数据转换为RGB格式数据%
%%%%%%%%%%%%%
%输入图像结束%
%%%%%%%%%%%%%
[Ny,Nx] = size(input_image_TV_int_RGB);  
%%%%%%%%%%%
%图像预处理%
%%%%%%%%%%%

%将可见光图像的格式转换为IHS格式%
input_image_TV_int_IHS = rgb2ihs( input_image_TV_int_RGB );
input_image_TV_IHS = double(input_image_TV_int_IHS);                    %将输入图像的数据类型转换为双精度数据类型%
input_image_TV_I =  256*input_image_TV_IHS(:,:,3);                            %将输入图像的I分量提取出来以进行NSCT分解%


%将红外图像的格式转换为gray格式%
input_image_IR_int = rgb2gray( input_image_IR_int_RGB );
input_image_IR= double(input_image_IR_int);                  %将输入图像的数据类型转换为双精度数据类型%

input_image_TV_S =  input_image_TV_IHS(:,:,2);
input_image_TV_H =  input_image_TV_IHS(:,:,1);

figure;
subplot(1,2,1);
imshow(uint8(input_image_TV_I));title('Original TV image I')       %显示输入可见光图像的I分量%
subplot(1,2,2);
imshow(uint8(input_image_IR));title('Original IR image Gray')   %显示输入红外图像的灰度图像%
%%%%%%%%%%%%%%%
%图像预处理结束%
%%%%%%%%%%%%%%%

%金字塔表示参数%
Nsc = ceil(log2(min(Ny,Nx)) - 7);    %分解尺度的数量 (自适应于图像尺寸)%
Nor = 8;				             %每级分解的方向数%
%%%%%%%%%%%%%%%
%初始化参数结束%
%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%
%NSCT子带分解%
%%%%%%%%%%%%%%
%初始化NSCT子带分解参数%
pfilter = 'maxflat' ;                               %金字塔滤波器%
dfilter = 'dmaxflat7' ;                             %方向滤波器%

nlevels=zeros(1,Nsc+1);
for i=1:Nsc+1
    nlevels(i)=log2(Nor);                           %初始化分解尺度%
end
%初始化NSCT子带分解参数结束%

%NSCT分解%
coeffs_TV_int = nsctdec( input_image_TV_I, nlevels, dfilter, pfilter );                %分解可见光图像%
coeffs_IR_int = nsctdec( input_image_IR, nlevels, dfilter, pfilter );             %分解红外图像%
%NSCT分解结束%

%%%%%%%%%%%%%%%%%
%NSCT子带分解结束%
%%%%%%%%%%%%%%%%%
% imwrite(uint8(coeffs_IR_int{1}),'lowfrequent.bmp','bmp');
%%%%%%%%%%
%图像融合%
%%%%%%%%%%


%%%%%%%%%%%%%
%图像融合结束%
%%%%%%%%%%%%%

%%%%%%%%%%%%%%
%NSCT子带重构%
%%%%%%%%%%%%%%
out_image_end_I = nsctrec( coeffs_rec, dfilter, pfilter ) ;    %重构灰度图像%  
figure;
imshow(uint8(out_image_end_I));title('融合图像I');
out_image_end=zeros(Ny,Nx,3);                            %初始化彩色图像输出矩阵%
out_image_end=cat(3,input_image_TV_H,input_image_TV_S,out_image_end_I/256);                      
out_image_end_RGB=256*ihs2rgb(double(out_image_end));           %将输出彩色图像转换为RGB格式%              

figure;
imshow(uint8(out_image_end_RGB));                        %显示融合后彩色图像%
imwrite(uint8(out_image_end_RGB),'SWT22.bmp','bmp');

toc;  

【图像融合】基于非下采样Contourlet变换nsct算法实现红外图像和可见光图像的融合matlab源码_matlab_15