【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

时间:2022-12-24 16:52:15

 ????‍????个人主页:研学社的博客 

????????????????欢迎来到本博客❤️❤️????????

????博主优势:????????????博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

????????????本文目录如下:????????????

目录

????1 概述

1.1 斑点信号检测算法的复杂度分析

????2 运行结果

????3 Matlab代码实现

????4 参考文献


【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

????1 概述

斑点特征是指与周围颜色和灰度有明显差异的区域,如一颗树、一块草地、栋房子
均可以看作斑点,其具有精度高、鲁棒性好、保持尺度不变等优点,但目前的斑点
特征提取算法(如 SIFT、SURF)的运算复杂度较高,不适合应用于实时性要求较高的系统。
为此,在分析斑点特征提取原理的基础上,提出了一种高效的斑点特征提取算法。研
究思路如图3.1所示,首先分析了斑点特征检测的运算复杂性,在对卷积函数分析的基础
上,设计了一种三层滤波函数,将特征检测转化成积分图像的加减运算;然后分析了基于
梯度的特征描述运算的复杂性,结合基于积分和基于量化的梯度运算的优点,设计了基
于积分-量化的梯度运算,并应用于特征描述中;最后在上述研究的基础上,设计了高效的
斑点特征提取算法,并通过实验对算法的精确性、鲁棒性和实时性进行测试。

1.1 斑点信号检测算法的复杂度分析


(1)斑点信号检测的基本原理
为了便于分析,本文首先对一维斑点信号进行分析,然后再将其扩展到二维图像上
去。设一个一维信号I(t),I(t)上有一个尺度为4的斑点信号,如图3.2所示。

【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

????2 运行结果

高斯拉普拉斯算子

【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

 【图像处理】高效斑点特征提取技术研究(Matlab代码实现)

部分代码:

function [points] = log_Blob(img,o_nb_blobs)
% 功能:提取LoG斑点
% 输入:
%      img –输入的图像
%       o_nb_blobs -需要检测的斑点区域的数量
% 输出:
%       points -检测出的斑点
% 参考文献:
% Lindeberg, T. Feature Detection with Automatic Scale Selection
% IEEE Transactions Pattern Analysis Machine Intelligence, 1998, 30,
% 77-116

% 输入图像
img = double(img(:,:,1));

% 设定检测到斑点的数量
if nargin==1
    nb_blobs = 120;
else
    nb_blobs = o_nb_blobs;
end

% 设定LoG参数
sigma_begin = 2;
sigma_end   = 15;
sigma_step  = 1;
sigma_array = sigma_begin:sigma_step:sigma_end;
sigma_nb    = numel(sigma_array);

% 变量
img_height  = size(img,1);
img_width   = size(img,2);

% 计算尺度规范化高斯拉普拉斯算子
snlo = zeros(img_height,img_width,sigma_nb);
for i=1:sigma_nb
    sigma       = sigma_array(i);
    
    snlo(:,:,i) = sigma*sigma*imfilter(img,fspecial('log', floor(6*sigma+1), sigma),'replicate');
    
end

% 搜索局部极值
snlo_dil             = imdilate(snlo,ones(3,3,3));
blob_candidate_index = find(snlo==snlo_dil);
blob_candidate_value = snlo(blob_candidate_index);
[tmp,index]          = sort(blob_candidate_value,'descend');

blob_index           = blob_candidate_index( index(1:min(nb_blobs,numel(index))) );

[lig,col,sca]        = ind2sub([img_height,img_width,sigma_nb],blob_index);

points               = [lig,col,3*reshape(sigma_array(sca),[size(lig,1),1])];

end

????3 Matlab代码实现

????4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]胡佳. 基于斑点特征的虚实配准技术研究[D].解放军信息工程大学,2013.