当前位置: 首页 > article >正文

计算机视觉-Harris特征点检测实验报告

实验二  Harris特征点检测实验

一、实验目的

  1. 掌握 Harris 角点检测算法的基本原理。
  2. 学会使用计算机程序实现 Harris 角点检测。
  3. 理解并对比角点检测结果与实际图像特征之间的关系。
  4. 分析 Harris 角点检测在实际图像处理中的应用和局限性。

二、实验内容和要求

1.实验内容:

  1. 选择一组图像作为实验对象,用于进行 Harris 角点检测。
  2. 使用 Python 和 OpenCV 实现 Harris 角点检测算法。
  3. 调整 Harris 算子的各参数(如角点响应函数的阈值、窗口大小等),比较不同参数下的检测效果。
  4. 可视化角点检测结果,通过图像中标记的角点位置进行验证和分析。

2.基本要求:

  1. 编写 Harris 角点检测程序,并能够对给定图像进行检测。
  2. 掌握 Harris 角点检测的参数调节方法,并能解释参数对检测结果的影响。
  3. 对比不同图像和不同参数设置下的检测效果,进行分析并撰写实验报告。

三、实验设备

        实验设备主要有:计算机、OpenCV库

四、实验原理

        使用一个滑动窗口在下面三幅图中滑动,可以得出以下结论:

        左图表示一个平坦区域,在各方向移动,窗口内像素值均没有太大变化;

        中图表示一个边缘特征(Edges),如果沿着水平方向移动(梯度方向),像素值会发生跳变;如果沿着边缘移动(平行于边缘) ,像素值不会发生变化;

        右图表示一个角(Corners),不管你把它朝哪个方向移动,像素值都会发生很大变化。

        算法的核心是利用局部窗口在图像上进行移动,判断灰度是否发生较大的变化。如果窗口内的灰度值(在梯度图上)都有较大的变化,那么这个窗口所在区域就存在角点。

        这样就可以将 Harris 角点检测算法分为以下三步:

  1. 1.当窗口(局部区域)同时向 x (水平)和 y(垂直) 两个方向移动时,计算窗口内部的像素值变化量 E(x,y) ;
  2. 2.对于每个窗口,都计算其对应的一个角点响应函数 R;
  3. 3.然后对该函数进行阈值处理,如果 R>threshold,表示该窗口对应一个角点特征。

五、实验步骤

实验代码:

from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread("C:\\Users\\aslon\\Desktop\\louna.jpg")//图片路径
gray_img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# Initiate FAST object with default values
fast = cv2.FastFeatureDetector_create()
# find and draw the keypoints
kp = fast.detect(gray_img,None)
img2 = cv2.drawKeypoints(image, kp, None, color=(0,0,255))

# Print all default params
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )

# Disable nonmaxSuppression
fast.setNonmaxSuppression(0)
kp = fast.detect(gray_img,None)
print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv2.drawKeypoints(image, kp, None, color=(0,0,255))

img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB)
plt.subplot(121), plt.imshow(img2), plt.title('fast_true'), plt.axis('off')
img3 = cv2.cvtColor(img3,cv2.COLOR_BGR2RGB)
plt.subplot(122), plt.imshow(img3), plt.title('fast_false'), plt.axis('off')
plt.show()

实验原图:

处理后图:

六、实验总结

不同图像的效果对比

1. 简单图像:

        对于具有清晰边缘和明显角点的简单图像,如几何图形(如正方形、三角形等),Harris 角点检测通常能够准确地检测出角点。在这种情况下,检测到的角点数量相对较少,位置也比较明确,角点响应值较高。

图像中的噪声较少时,角点检测的准确性更高,不会将噪声误检测为角点。

2. 复杂图像:

        对于自然场景图像或纹理复杂的图像,Harris 角点检测可能会检测到更多的角点,包括一些不太明显的角点和由于纹理变化引起的伪角点。

        复杂图像中的噪声会对角点检测产生更大的影响,可能导致一些噪声点被检测为角点,降低检测的准确性。

不同参数设置的效果对比

1. 窗口大小:

        较小的窗口尺寸适用于检测局部细节的角点,但对噪声更敏感。在图像中存在较多噪声时,可能会检测到很多伪角点。

较大的窗口尺寸可以平滑噪声,但可能会错过一些小尺度的角点,并且对图像的局部变化不敏感。

2. 阈值:

        较高的阈值会减少检测到的角点数量,只保留响应值较高的明显角点。这可以提高检测的准确性,但可能会遗漏一些较弱的角点。

较低的阈值会增加检测到的角点数量,包括一些不太明显的角点和伪角点。这可以提高角点的覆盖率,但会降低检测的准确性。

3. 梯度计算方法:

        使用不同的梯度计算方法(如 Sobel 算子、Prewitt 算子等)可能会对 Harris 角点检测的结果产生影响。不同的梯度计算方法在对边缘的敏感度和抗噪性方面有所不同。

        综上所述,在使用 Harris 角点检测时,需要根据具体的图像特点和应用需求选择合适的参数设置,以获得最佳的检测效果。同时,对于不同的图像,可能需要进行多次试验和调整参数,以找到最适合的检测方法。


http://www.kler.cn/a/371281.html

相关文章:

  • Xcode 16.1 (16B40) 发布下载 - Apple 平台 IDE
  • 在qemu-system上跑arm-Debian
  • ArcGIS必会的选择要素方法(AND、OR、R、IN等)位置选择等
  • NAT技术和代理服务器
  • 深度学习Pytorch-Tensor的属性、算术运算
  • mysql 十把锁之《小猫钓鱼》
  • c++11新语法(上)
  • Python bs4 结合 Scrapy,进行数据爬取和处理
  • 利用游戏引擎的优势
  • windows 驱动实例分析系列: NDIS 6.0的Filter 驱动改造(四)
  • Educational Codeforces Round 171 (Rated for Div. 2)(A~D题题解)
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算——从0基础到15个案例实战
  • Ubuntu22.04环境搭建MQTT服务器
  • 【Spring框架】Spring框架的开发方式
  • 短视频矩阵系统源代码开发|技术源代码部署/OEM贴牌搭建
  • electron知识整理和问题汇总
  • Data+AI时代下,如何做数字化转型升级!
  • 【MySQL】 运维篇—备份与恢复:使用mysqldump进行数据库备份与恢复
  • 开源一款前后端分离的企业级网站内容管理系统,支持站群管理、多平台静态化,多语言、全文检索的源码
  • IDEA连接EXPRESS版本的SQL server数据库
  • QT交互界面:实现按钮运行脚本程序
  • conda、virtualenv, venv分别是什么?它们之间有什么区别?
  • (青牛科技)双通道H桥电机驱动芯片GC8548 12V双通道全桥驱动芯片GC8548兼容LV8548
  • Skywalking教程一
  • HTML小阶段二维表和思维导图
  • Unity 两篇文章熟悉所有编辑器拓展关键类 (上)