基于线特征的图像配准

一、线特征提取

1.1 模板检测

使用模板在一幅图像上移动,他会对特定方向上的(一个像素宽)线响应强烈。下面是常见检测模板:
在这里插入图片描述

1.2 边缘检测

边缘检测的基本思想是使用如下两个准则之一找到图像中快速变换的位置:
1. 寻找灰度的一阶导数的幅值大于某个阈值的位置
2. 寻找灰度的二阶导数有零交叉的位置

matlab提供的函数:[g,t]=edge(f,'method',paramters)

1.2.1 Sobel边缘检测器

检测器模板:
在这里插入图片描述
matlab函数:[g,t]=edge(f,'sobel',T,dir)

1.2.2 Prewitt边缘检测器

检测器模板:
在这里插入图片描述

matlab函数:[g,t]=edge(f,'prewitt',T,dir)

1.2.3 Roberts边缘检测器

检测器模板:
在这里插入图片描述
matlab函数:[g,t]=edge(f,'roberts',T,dir)

1.2.4 LoG检测器

介绍: 使用高斯函数的二阶导数,称为高斯拉普拉斯算子(LoG)。

检测原理: 使用 △ 2 G ( x , y ) \bigtriangleup ^2G(x,y) 2G(x,y)对图像卷积有两个效果:它平滑了图像(降低了噪声),并计算拉普拉斯算子,进而产生一幅双边缘图像。然后通过查找双边缘之间的零交叉来定位边缘。

matlab函数:[g,t]=edge(f,'log',T,sigma),T设置为0会产生封闭轮廓

1.2.5 零交叉检测器

与LoG方法相同的概念,但卷积是使用一个特定的滤波器函数H来完成。

matlab函数:[g,t]=edge(f,'zerocross',T,H)

1.2.6 Canny边缘检测器

是函数edge中最强大的边缘检测器。

matlab函数:[g,t]=edge(f,'canny',T,sigma)

1.3 霍夫变换(Hough)线检测

基本思想: 假设在X-Y平面有直线 y = k x + b y=kx+b y=kx+b,该直线上的点 P i P_i Pi应满足该式子,反之如果一些点 P i P_i Pi满足该式子它们就在同一条直线上。利用霍夫变换,将该直线方程转换为 b = − k x + y b=-kx+y b=kx+y,那么在K-B平面(参数空间)上,这些点 P i P_i Pi都是一条直线,且相交于 ( k , b ) (k,b) (k,b),找到 ( k , b ) (k,b) (k,b)即得到了X-Y平面的直线方程。

在实际的检测中,由于直线斜率k有可能为无穷大,所以用法线来表示直线 x cos ⁡ θ + y sin ⁡ θ = ρ x\cos \theta +y\sin \theta =\rho xcosθ+ysinθ=ρ
在这里插入图片描述

算法步骤:

  1. 使用canny算子检测图像边缘,得到二值化的边缘图像
  2. 检测非背景点 ( x , y ) (x,y) (x,y)【非0的点】作为参数带入: x cos ⁡ θ + y sin ⁡ θ = ρ x\cos \theta +y\sin \theta =\rho xcosθ+ysinθ=ρ,在累加单元 θ ρ \theta\rho θρ(二维数组)将满足的 ( θ , ρ ) (\theta,\rho) (θ,ρ)元素值加1
  3. 设定阈值,累加单元中大于阈值的参数 ( θ i , ρ j ) (\theta_i,\rho_j) (θi,ρj)即认为是X-Y平面上的直线
  4. 画出直线 x cos ⁡ θ i + y sin ⁡ θ = ρ j x\cos \theta_i +y\sin \theta =\rho_j xcosθi+ysinθ=ρj

matlab相关函数:
[H,theta,rho]=hough(f)
peaks = houghpeaks(H,NumPeaks)
lines=houghlines(f,theta,rho,peaks)

1.4 LSD算法

LSD(Rafael Grompone von Gioi, LSD: a Line Segment Detector,2010)是一种直线检测分割算法,它能在线性的时间内得出亚像素级精度的检测结果。该算法被设计成可以在任何数字图像上都无需参数调节。

缺点:
1、对于直线相交情况,若有相交必有至少一条直线被割裂为两条。又因为其基于梯度,直线交点梯度值往往又较小(不被检测为边缘点),因此很有可能相交的两条直线在交点处被割裂为四条线段;
2、由于局部检测算法自增长的特点,对于长线段被遮挡、局部模糊等原因经常割裂为多条直线。

【论文及代码】http://www.ipol.im/pub/art/2012/gjmr-lsd/

【GitHub】利用OpenCV和MATLAB进行封装代码

1.5 LBD算法

来源论文:《An efficient and robust line segment matching approach based on LBD descriptor and pairwise geometric consistency,2013》

优势:该文章提出了LBD线检测算法,克服了LSD线检测碎片化问题和提高大尺度变化的性能,同时提出一种线特征匹配算法。

算法流程参考:https://www.cnblogs.com/Jessica-jie/p/7523364.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
图像配准是将不同图像中的同一场景进行精确重叠的过程。SIFT算法是一种图像特征提取算法,可以用于图像配准。 下面是使用MATLAB实现SIFT算法进行图像配准的步骤: 1. 读入两幅图像 ```matlab im1 = imread('image1.jpg'); im2 = imread('image2.jpg'); ``` 2. 提取SIFT特征点 ```matlab [f1, d1] = vl_sift(im1); [f2, d2] = vl_sift(im2); ``` 其中,f1和f2是每个特征点的位置和大小,d1和d2是每个特征点的描述子。 3. 匹配特征点 ```matlab [matches, scores] = vl_ubcmatch(d1, d2); ``` matches是匹配的特征点对的索引,scores是匹配的得分。 4. 可视化特征点匹配 ```matlab imshow(cat(2, im1, im2)); hold on; plot(f1(1, matches(1, :)), f1(2, matches(1, :)), 'r*'); plot(f2(1, matches(2, :))+size(im1, 2), f2(2, matches(2, :)), 'g*'); line([f1(1, matches(1, :)); f2(1, matches(2, :))+size(im1, 2)], [f1(2, matches(1, :)); f2(2, matches(2, :))]); hold off; ``` 其中,红色和绿色的星形表示两幅图像中匹配的特征点,红绿相间的线表示匹配的特征点对之间的对应关系。 5. 估计变换矩阵 ```matlab X1 = f1(1:2, matches(1, :)); X1(3, :) = 1; X2 = f2(1:2, matches(2, :)); X2(3, :) = 1; [H, inliers] = ransacfitaffine(X1, X2, 0.5); ``` 其中,ransacfitaffine是一个自定义函数,用于估计变换矩阵。H是估计的变换矩阵,inliers是符合变换矩阵的特征点对的索引。 6. 应用变换矩阵 ```matlab tform = maketform('affine', H'); im2_aligned = imtransform(im2, tform, 'XData', [1 size(im1, 2)], 'YData', [1 size(im1, 1)]); ``` 其中,maketform是用于创建仿射变换矩阵的函数,imtransform是用于应用变换矩阵的函数。 7. 可视化配准结果 ```matlab imshow(im1); hold on; h = imshow(im2_aligned); set(h, 'AlphaData', 0.5); hold off; ``` 其中,im2_aligned是经过变换之后的图像。 这样就完成了使用SIFT算法实现图像配准的过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值