(MATLAB/C)高斯拟合法求光斑中心

高斯拟合法求光斑中心

光斑图、阵列图、灰度图圆形等目标中心定位方法。分享高斯拟合法和更为简单的中心、重心法MATLAB代码,以及基于Eigen库的高斯拟合法C代码。互助互助

by HPC_ZY

一、基本原理

大多数光斑其明暗分布情况都是中心最亮,往四周慢慢变暗,就类似二维高斯模型(如下图)。所以我们利用二维高斯模型去拟合光斑,从而得到光斑中心等参数。
在这里插入图片描述

由于本人不是数学大佬,就不推导数学公式了,直接上代码。

MATLAB版本

三种方法都需要提供一个叫mask的矩阵,它是一个二值图像,描述的是被判定而光斑的像素。务必提供争取或你认为对的mask,中心只会在mask的范围内搜索。

  1. 高斯拟合法
% 输入:原始灰度图像,光斑二值蒙版
% 输出:中心坐标
function coor = gausscenter(im,mask)

% 连通域
[label,num] = bwlabel(mask);

% 计算
coor = zeros(num,2);
for n = 1:num
    [x,y] = find(label==n);
    % 生成计算矩阵
    m_iN = length(x);
    tmp_A = zeros(m_iN,1);
    tmp_B = zeros(m_iN,5);    
    for k = 1:m_iN        
        pSrc = im(x(k),y(k));
        if pSrc>0
            tmp_A(k) = pSrc*log(pSrc);
        end
        tmp_B(k,1) = pSrc ;
        tmp_B(k,2) = pSrc*x(k);
        tmp_B(k,3) = pSrc*y(k);
        tmp_B(k,4) = pSrc*x(k)*x(k);
        tmp_B(k,5) = pSrc*y(k)*y(k);
    end
    
    % QR分解
    Vector_A = tmp_A;
    matrix_B = tmp_B;
    [Q,R] = qr(matrix_B);
    
    % 求解中心
    S = Q'*Vector_A;
    S = S(1:5);
    R1 = R(1:5,1:5);
    C = R1\S;   
    coor(n,:) = [-0.5*C(2)
评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值