基于hessian矩阵的线条中心亚像素提取(matlab)

clear ;close ;
file='';%%自己加地址
im=imread(file);

im=im2double(im);
imshow(im);hold on;

%采用hessian法进行检测
Sigma =4;
[a,b,c,d,e]=Hessian2D(im,Sigma);
n=1;
for i=1:size(im,1)
    for j=1:size(im,2)

        if im(i,j)>200/255
            [V,D]=eig([c(i,j),d(i,j);d(i,j),e(i,j)]);
  if abs(D(1, 1)) >= abs(D(2, 2))
       norm = V(:, 1) ;
       lamda1 = D(2, 2);        
       lamda2 = D(1, 1);     
    else
       norm = V(:, 2) ; 
       lamda1 = D(1, 1);     
       lamda2 = D(2, 2);     
    end
    lamda = [lamda1; lamda2];  
   
    t = -(norm(1)*a(i,j) + norm(2)*b(i,j))/ ...
         (norm(1)^2*c(i,j) + 2*norm(1)*norm(2)*d(i,j) + norm(2)^2*e(i,j)); 

    if abs(t*norm(1))<=1/2&&abs(t*norm(2))<=1/2        

        sss(n,1)=i+t*norm(1);sss(n,2)=j+t*norm(2);
          n=n+1;

    end 

    end
end
end


plot(sss(:,2),sss(:,1),'*');

%hessian子函数
function [Dx,Dy,Dxx,Dxy,Dyy] = Hessian2D(I,Sigma)
[X,Y]   = ndgrid(-round(3*Sigma):round(3*Sigma));
Dx=( - X / (Sigma*Sigma)).*exp(-1 * (X.^2 + Y.^2) / (2 * Sigma*Sigma))*(1 / (2 * pi*Sigma^2));
Dy=( - Y / (Sigma*Sigma)).*exp(-1 * (X.^2 + Y.^2) / (2 * Sigma*Sigma))*(1 / (2 * pi*Sigma^2));
DGaussxx = 1/(2*pi*Sigma^4) * (X.^2/Sigma^2 - 1) .* exp(-(X.^2 + Y.^2)/(2*Sigma^2));
DGaussxy = 1/(2*pi*Sigma^6) * (X .* Y)           .* exp(-(X.^2 + Y.^2)/(2*Sigma^2));
DGaussyy = 1/(2*pi*Sigma^4) * (Y.^2/Sigma^2 - 1) .* exp(-(X.^2 + Y.^2)/(2*Sigma^2));
Dx = imfilter(I,Dx,'conv');
Dy = imfilter(I,Dy,'conv');
Dxx = imfilter(I,DGaussxx,'conv');
Dxy = imfilter(I,DGaussxy,'conv');
Dyy = imfilter(I,DGaussyy,'conv');
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值