LOG斑点检测

斑点是数字图像的主要特征,是区域检测的一种特例,是许多特征生成、目标识别等方法的重要预处理环节。斑点通常和关键点(keypoint),兴趣点(intrestpoint)以及特征点(featurepoint)表示同一个概念。
利用高斯拉普通拉斯(Laplace of Gaussian,LOG)算子检测图像斑点是一种十分常用的方法。

function [points]=LoG_Blob(img,num_blobs)
%功能:提取LoG斑点
%img——输入图像
%num——需要检测斑点数目
%point——检测出的斑点
img=double(img(:,:,1));
if nargin1 %如果输入参数仅有一个(img)
num=120; %则将检测斑点数设置为120
else
num=num_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);
%n = numel(A) returns the number of elements, n, in array A
%equivalent to prod(size(A)).
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)=sigmasigmaimfilter(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);
[temp,index]=sort(blob_candidate_value,‘descend’);
blob_index=blob_candidate_index(index(1:min(num,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

function draw(img,pt,str)
%功能:在图像中绘制特征点
%img——输入图像
%pt——特征点坐标
%str——图上显示的名称
figure(‘Name’,str);
imshow(img);
hold on;
axis off;
switch size(pt,2)
case 2
s=2;
for i=1:size(pt,1)
rectangle(‘Position’,[pt(i,2)-s,pt(i,1)-s,2s,2s],‘Curvature’…
,[0,0],‘EdgeColor’,‘b’,‘LineWidth’,2);
end
case 3
for i=1:size(pt,1)
rectangle(‘Position’,[pt(i,2)-pt(i,3),pt(i,1)-pt(i,3),…
2pt(i,3),2pt(i,3)],‘Curvature’,[1,1],‘EdgeColor’,…
‘w’,‘LineWidth’,2);
end
end
end

LOG斑点检测

在matlab指令窗口输入:
img=imread(‘jpg.jpg’);
imshow(img);
pt=LoG_Blob(rgb2gray(img));
draw(img,pt,‘LOG’)

即可得到结果图片

上一篇:如何从word文档复制公式到xheditor编辑器


下一篇:JAVA配合Freemark模板生成word返回文件流,前台vue接收下载