▲基于Affine-sift的鱼眼图像矫正和配准算法matlab仿真

目录

1.鱼眼图像矫正原理

2.Affine-sift 配准原理

3.MATLAB程序

4.仿真结果

5.完整程序下载


1.鱼眼图像矫正原理

       鱼眼镜头的成像模型通常可以用等距投影、等立体角投影或正交投影等模型来描述。这里以等距投影模型为例,在该模型下,鱼眼图像上的点 与对应的空间点的极坐标之间的关系为:

        为了将鱼眼图像矫正为平面图像,需要根据上述成像模型进行反向变换。设矫正后图像上的点为(u,v),则其与鱼眼图像上点的坐标关系可以通过以下公式推导得到:

鱼眼图像存在径向畸变,通常可以用多项式函数来近似描述。假设径向畸变后的坐标为(xd,yd) ,原始无畸变坐标为(x,y),则径向畸变模型可以表示为:

       在实际应用中,可以通过已知的标定板图像或其他方法来估计这些畸变系数,然后对鱼眼图像进行径向畸变校正,得到校正后的图像坐标,再进行上述的等距投影逆变换,以实现鱼眼图像的矫正。

2.Affine-sift 配准原理

尺度空间构建

极值点检测与定位

       在 DOG 金字塔中,每个像素点与其相邻尺度和同一尺度的 8 个邻域像素点进行比较,检测出局部极值点。对于检测到的潜在极值点,通过泰勒展开式进行精确定位:

同时,计算该点的海森矩阵(Hessian Matrix),并根据其行列式和迹的值来去除低对比度和不稳定的边缘响应点。

方向分配

在以特征点为中心的邻域内,统计梯度方向直方图,将直方图的峰值方向作为该特征点的主方向,这样可以使特征描述符具有旋转不变性。

特征描述符生成

其中,hi是每个子区域内的梯度直方图的值,通过对特征点邻域内的像素梯度信息进行统计得到,并且对特征描述符进行归一化处理,使其具有光照不变性。

       对两幅需要配准的图像(一幅经过矫正的鱼眼图像和另一幅参考图像)分别进行 SIFT 特征提取和描述符生成后,采用特征点描述符的匹配算法,如基于欧几里得距离的最近邻匹配(Nearest Neighbor Matching)。对于图像 1 中的每个特征点描述符,计算其与图像 2 中所有特征点描述符的欧几里得距离,找到距离最小的两个点,如果最近邻距离与次近邻距离的比值小于一个设定的阈值(例如 0.8),则认为这两个点是匹配的特征点对。

3.MATLAB程序

32.......................


scale=0.4;
img1=imread('test2\1.JPG');
img1R=imresize(img1,scale);
[img1] = fish_180_degree(img1R);
figure;
subplot(2,2,1),imshow(img1R);title('鱼眼图像');
subplot(2,2,2),imshow(img1);title('鱼眼图像校正');

img2=imread('test2\2.jpg');
img2R=imresize(img2,scale);
[img2] = fish_180_degree(img2R);
 
subplot(2,2,3),imshow(img2R);title('鱼眼图像');
subplot(2,2,4),imshow(img2);title('鱼眼图像校正');

FIG           = 1;

 
Feature_point = 1;
%是否需要重新特征提取,%1:对以一组新的图片,需要选择1,对于同一组图片,直接设置0
sel     = 1;
t       = sqrt(2).^([0]);%选择不同的角度t,arccos(1/t);
 
%对两个图片分别进行角度选择和不同角度的特征提取
if sel == 1
     tic;
     disp('对图片1进行处理');
     [Hrl_feature1,Hr_pointl_feature1,cnt1]=func_sift_angle(img1s,m1,n1,t);
     Time = toc;
     disp('对图片2进行处理');
     [Hrl_feature2,Hr_pointl_feature2,cnt2]=func_sift_angle(img2s,m2,n2,t);
     save feature_data_B1.mat  Hrl_feature1 Hr_pointl_feature1 Hrl_feature2 Hr_pointl_feature2 cnt1 cnt2 Time
else
     load feature_data_B1.mat     
end

%进行配准
pp           = 0;
level        = 0.7; 
image_match1 = []; 
image_match2 = []; 
for i = 1:(cnt1 - 1)
    for j = 1:(cnt2 -1)
    pp = pp + 1;
    fprintf('处理进度:');fprintf('%3.2f',100*pp/(cnt1*cnt2));fprintf('%%\n\n');  
    NF1(i)       = size(Hrl_feature1{i},1);
    NF2(j)       = size(Hrl_feature2{j},1);
    same_feature = func_feature_match(Hrl_feature1{i},Hrl_feature2{j},level);            
    ind1         = find(same_feature);
    ind2         = same_feature(ind1);
    %根据门限来选择一定区域内的配准点
    ind          = find(sqrt(sum(((Hrl_feature1{i}(ind1,:)-Hrl_feature2{j}(ind2,:)).^2),2)) <= level);
    
    ind1         = ind1(ind);
    ind2         = ind2(ind);
    Match1Tmp    = Hr_pointl_feature1{i}(ind1,[ 1 2 3 end ]);
    Match2Tmp    = Hr_pointl_feature2{j}(ind2,[ 1 2 3 end ]);
    image_match1 = [image_match1;Match1Tmp]; 
    image_match2 = [image_match2;Match2Tmp]; 
    end
end

4.仿真结果

5.完整程序下载

完整可运行代码,博主已上传至优快云,使用版本为matlab2022a:

https://download.youkuaiyun.com/download/ccsss22/90189051

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值