人工智能图像形状检测算法(一)

简介: 人工智能图像形状检测算法(一)

角点检测


在进行图像匹配的时,通常需要对两幅图像中的特征点进行匹配。为了保证匹配的准确性,选择的特征点必须具有其独特性,而图像的角点则经常被看成是一种不错的选择。由观察可知,角点往往是两天边缘的交点,它是两条边缘方向变换的一种表示,因此,其两个方向的梯度变化通常都比较大并且容易检测。人们通过在一个小小的窗口区域内观察像素点的灰度值大小来识别角点,如果向任何方向移动窗口都会引起较大的灰度变化,则该位置往往就是我们要找的角点。


Harris算子


对于角点检测,有很多的算法,其中Harris 算法是最常用的角点检测算法之一,算法依据的正是上图的直观判断。


要衡量在某个方向上的梯度变化大小,可定义图像在某个方向上灰度的变化E(u,v)。


E(u,v)=\Sigma_x_y w(x,y)(I(x+u,y+v)-I(x,y))^{2}\Sigma_x_y w(x,y)(I(x+u,y+v)-I(x,y))^{2}


其中w(x,y)为窗口函数,它可以是如图所示的加权函数,也可以是高斯函数。


9e23e85431f049a400d14a3783caaaba_bb64a832236f4e3b8282361c34fbea0c.png


向量(u,v)表示某个方向,以及在该方向上的位移。I(x,y)表示像素灰度值强度,范围为0~255,I(x+u,y+v)表示位移强度。由上述公式可知,我们要研究在哪个方向上图像灰度值变化最大,只需令E(u,v)的值最大即可,因为E(u,v)表示的是某个方向上图像灰度的变化。而求解问题,则可通过泰勒展开式:


I(x+u,y+v)=I(x,y)+uIx+vIy+O(x,y)I(x+u,y+v)=I(x,y)+uIx+vIy+O(x,y)


得到:


(I(x+u,y+v)−I(x,y)2)≈(uIx+vIy)2≈([u,v][IxIy])([Ix,Iy][uv])≈[uv][IxIxIyIxIxIyIyIy][uv](I(x+u,y+v)−I(x,y)2)≈(uIx+vIy)2≈([u,v][IxIy])([Ix,Iy][uv])≈[uv][IxIxIxIyIyIxIyIy][uv]


记上式最后结果为ΔΔ,则得到:E(u,v)=\sum _x_yw(x,y)\cdot \Delta =[u,v]M\begin{bmatrix} u\\v \end{bmatrix}E(u,v)=\sum _x_yw(x,y)\cdot \Delta =[u,v]M\begin{bmatrix} u\\v \end{bmatrix}


其中M为2*2的Harris矩阵,Ix和IyIx和Iy分别是x方向和y方向的图像导数(灰度值强度),则可得:M=\sum _x_yw(x,y)\begin{bmatrix} I_x^{2} &I_xI_y \\ I_yI_x & I_y^{2} \end{bmatrix}M=\sum _x_yw(x,y)\begin{bmatrix} I_x^{2} &I_xI_y \\ I_yI_x & I_y^{2} \end{bmatrix}


根据Harris矩阵来计算矩阵特征值λ1λ1,λ2λ2,并通过一个评分函数R来判断一个窗口中是否含有角点:


R=det(M)−k(trace(M)2)R=det(M)−k(trace(M)2)


其中,det(M)=λ1,λ2,trace(M)=λ1+λ2det(M)=λ1,λ2,trace(M)=λ1+λ2。λ1,λ2λ1,λ2皆为M的特征值。上述公式即为:


R=λ1λ2−K(λ1+λ2)2R=λ1λ2−K(λ1+λ2)2.


这些特征值决定了一个区域是否为角点,边缘或平面。


①.当λ1和λ2都很小时,|R|的值也很小,则该区域为平坦区域。


②.当λ1>>λ2,或者λ1<<λ2,则该区域为边缘。


③.当λ都很大时,且λ1≈λ2时,也很大,则该区域为角点。


因此,Harris角点检测可以“R>阈值”作为条件判断一个图像区域是否为为角点。J·西(J·Shi)和C·托马西(C·Tomasi)于1994年在其论文“Good Features to Track”中提出了一种对Harris角点检测算子的改进算法,也就是Shi—Tomasi角点检测算子。我们也可以通过goodFeaturesToTrack算法进行角点检测,它同样定义了评分函数R,也是用R值的大小来判断区域是否为特征点:


R=min(λ1λ2)R=min(λ1λ2)


我们这里就直接使用OPenCV中的角点检测函数。


函数原型:


cv2.cornerHarris(src,blocksize,ksize,k[,dst[,borderTypr]])


参数说明:


(1).src:目标图像。


(2).blocksize:窗口大小。


(3).ksize:Sobel的孔径参数(Aperture Parameter),也就是Sobel核的半径,如1,3,5,7。


(4).k:R公式中的k,默认取0.04。


基于Harris角点检测的示例代码:


import numpy as np
import cv2
#将图像导入将其转化为float类型,用于传递给Harris函数
filename='D:\Image\\four.jpg'
img=cv2.imread(filename)
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray_img=np.float32(gray_img)
#对图像进行角点检测
Harris_detector=cv2.cornerHarris(gray_img,2,3,0.04)
#对图像进行膨胀处理,将灰度值增大(视觉上比较亮)的区域增强扩展,主要用来连通相似颜色或强度的区域
dst=cv2.dilate(Harris_detector,None)
#设置阈值
thres=0.01*dst.max()
#对角点进行红色标记
img[dst>thres]=[0,0,255]
cv2.imshow('Harris角点检测',img)
cv2.waitKey()


代码结果展示:


caaba200e3b611dca6f0a5c68daa865d_288e3d3e46a249c391321ca0df12f559.png


根据图像我们可以发现,角点的检测有些不太准确,只能检测较为明显的角点,并且存在很多的错误角点标记。于是,opencv便推出了更为精确的算法函数。


goodFeaturesToTrack算子


函数原型:


cv2.goodFeaturesToTack(image,maxCorners,qualityLevel,minDistance,[,corners[,mask[,blocksize[,useHarrisDetector[,k]]]])


参数说明如下:


(1).image:待检测目标图像


(2).maxCorners:最大数目的角点数


(3).qualityLevel:该参数指出最低可接受的角点质量,是一个百分数,实例中给0.01。


(4).minDistance:焦点之间最小的欧拉距离,避免得到相邻特征点。


(5).mask:可选参数,给出ROI。


利用goodFeaturesToTrack算法进行图像检测示例代码:


#goodFeaturesToTrack算法
import numpy as np
import cv2
#读入图像
filename='D:\Image\\four.jpg'
img=cv2.imread(filename)
img2=img
#将其转换为float型
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img_gray=np.float32(img_gray)
#得到角点坐标向量
goodFeatures_corners=cv2.goodFeaturesToTrack(img_gray,25,0.01,10)
goodFeatures_corners=np.int0(goodFeatures_corners)
for i in goodFeatures_corners:
    x,y=i.flatten()
    #用绿点标记角点
    cv2.circle(img2,(x,y),3,[0,255,],-1)
cv2.imshow('goodFreaturesToTack角点检测',img2)
cv2.waitKey()


993001d20ae20eda72852c8db8ac5b63_bc03ac9f42b1431b80b5883cab4f4d94.png


其中绿点表示角点,从两个算法检测结果来看,对于图像角点的标记,goodFeaturesToTrack算法更为精确,准确性高,但是也有误差。

目录
打赏
0
0
0
0
12
分享
相关文章
基于yolov2和googlenet网络的疲劳驾驶检测算法matlab仿真
本内容展示了基于深度学习的疲劳驾驶检测算法,包括算法运行效果预览(无水印)、Matlab 2022a 软件版本说明、部分核心程序(完整版含中文注释与操作视频)。理论部分详细阐述了疲劳检测原理,通过对比疲劳与正常状态下的特征差异,结合深度学习模型提取驾驶员面部特征变化。具体流程包括数据收集、预处理、模型训练与评估,使用数学公式描述损失函数和推理过程。课题基于 YOLOv2 和 GoogleNet,先用 YOLOv2 定位驾驶员面部区域,再由 GoogleNet 分析特征判断疲劳状态,提供高准确率与鲁棒性的检测方法。
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
100 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
基于Affine-Sift算法的图像配准matlab仿真
本项目展示了Affine-SIFT算法的运行效果(无水印),适用于图像配准任务,能够处理旋转、缩放、平移及仿射变换。程序基于MATLAB2022A开发,包含完整代码与操作视频。核心步骤为:先用SIFT提取特征点,再通过仿射变换实现高精度对准。
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
基于GA遗传算法的斜拉桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现斜拉桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率ηq(0.95≤ηq≤1.05)的要求,目标是使ηq尽量接近1,同时减少加载车辆数量和布载耗时。程序通过迭代优化计算车辆位置、方向、类型及占用车道等参数,并展示适应度值收敛过程。测试版本为MATLAB2022A,包含核心代码与运行结果展示。优化模型综合考虑车辆总重量、间距及桥梁允许载荷密度等约束条件,确保布载方案科学合理。