Date: 2025.4.15
前言
在大学毕业设计的时候,实现了基于NSCT和改进Canny的图像边缘检测算法,采用Matlab语言实现,边缘提取效果不错,与经典的Canny和Sobel算子相比,可以在抑制噪声的同时提取有效边缘分量。
需要相关代码可以在关注博主和订阅本专栏后加文章最后的QQ名片咨询博主。
1、参考
2、算法原理
(1)将原始图像进行NSCT变换,获得低频和高频分量信息;
(2)使用改进的Canny算子对低频子带信息进行提取低频轮廓边缘信息E1;
(3)使用sobel算子对高频子带信息中各尺度各方向上的系数进行调整,实现边缘增强和噪声抑制,得到高频轮廓边缘信息E2;
(4)最后 ,对E1和E2进行相加融合,得到完整的边缘图像E。
3、实现效果图
3.1、低频分量和canny边缘图
3.2、高频分量和边缘图
3.3、融合后的边缘图像
3.4、经过canny处理后的融合边缘图像
4、部分Matlab代码
%% 基于NSCT的边缘检测算法matlab实现
% created at 2022.5.13
%% 1.读取原始图像
srcImg = imread ('lena.bmp');
figure,
imshow(srcImg, []);title('原始图像');
[Ny,Nx] = size(srcImg);%求取输入图像的宽和高
%% 2.采用NSCT变换将原始图像分解为低频分量和高频分量
path(path,'nsct_toolbox'); % 加载matlab自带的nsct工具箱
Nsc = 3; %ceil(log2(min(Ny,Nx)) - 7); % 分解尺度的数量 (自适应于图像尺寸)
Nor = 8; % 每级分解的方向数
%nlevels = [3, 3, 3] ; % Decomposition level
nlevels=zeros(1,Nsc+1);
for i=1:Nsc+1
nlevels(i)=log2(Nor); %初始化分解尺度
end
%初始化NSCT子带分解参数
pfilter = 'maxflat' ; %金字塔滤波器
dfilter = 'dmaxflat7' ; %方向滤波器
%NSCT分解
coeffs_TV_int = nsctdec(srcImg, nlevels, dfilter, pfilter ); %nsct分解图像
%shownsct(coeffs_TV_int);
THE END!