log斑点检测matlab
搬砖张姐 2017-03-30 05:45:36 %看一下LOG方法检测斑点的具体实现过程
clear all;
%im=imread('IMG_0102_blob_small.jpg');
im=imread('biaoqing000.jpg');
%img=double(im(:,:,1));
img=double(rgb2gray(im));
%blob的数量
nb_blobs=500;
%设定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)=imfilter(img,fspecial('log',floor(6*sigma+1),sigma),'replicate');%这里的floor(5*)应该根据检测点的大小进行调整
end
snlo_dil=imdilate(snlo,ones(3,3,3));%imdilate表示膨胀
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);%ind2sub函数怎么用,应该是从index转到普通的坐标吧。sca这个变量表示什么啊?
points=[lig,col,3*reshape(sigma_array(sca),[size(lig,1),1])];
draw(im,points,'LoG');
问题:怎么实现按顺序检测到斑点