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

图像数据处理23

五、边缘检测

5.5角点检测

角点检测方法检测的是拥有特定特征的图像点。这些特征点在图像中有具体的坐标,并具有某些数学特征,比如局部最大或最小灰度、或是某些梯度特征等。角点检测算法可被用于识别具有特定形状的关键点,比如圆形、矩形等边缘的交点或特定结构的关键位置。这些关键点对于图形形状的识别、模板匹配等任务都至关重要。

在在进行动态图像分析中,角点检测算法能够跟踪图像序列中的特征点。因为这些特征点在连续帧之间能够保持相对稳定的位置和特征,所以角点检测可以用于视频跟踪、运动分析等任务。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
img = cv2.imread('sanjiao.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 将图片转换为float32类型
gray = np.float32(gray)

# 应用Harris角点检测
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)

# 对结果进行膨胀,以便更好地标记角点
dst = cv2.dilate(dst, None)

# 获取角点的坐标
# 使用threshold找到大于阈值的角点
ret, dst = cv2.threshold(dst, 0.01 * dst.max(), 255, 0)
dst = np.uint8(dst)

# 找到角点的具体位置
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)


# 定义一个用于绘制圆圈的函数
def draw_circles(img, centroids):
    for centroid in centroids:
        cx, cy = int(centroid[0]), int(centroid[1])  # 确保坐标是整数
        cv2.circle(img, (cx, cy), radius=5, color=(0, 0, 255), thickness=-1)

    # 在原图上绘制圆圈


draw_circles(img, centroids[1:])  # 跳过背景标签(通常为0)

# 显示图片
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Harris Corners Detected with Circles')
plt.show()

# 应用Harris角点检测
dst = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)

Harris的角点检测通过cv2.cornerHarris函数实现,它通过分析灰度图像的亮度变化来识别角点。该函数考虑每个像素的邻域大小(由blockSize决定),使用Sobel算子(窗口大小由ksize决定)来计算图像的梯度,并通过自由参数k控制检测的灵敏度。输出是一个矩阵,表示每个像素是角点的可能性。

k值的大小直接影响了检测到的角点数量。当k值较小时,角点检测的灵敏度较高,容易检测到更多的角点,但也可能可能错误的将非角点检测成角点。

ret, dst = cv2.threshold(dst, 0.01 * dst.max(), 255, 0)

这行代码的作用是将图像dst进行阈值处理,将所有像素值大于或等于图像最大像素值的1%的像素点设置为白色(255),其余像素点设置为黑色(0)

k值取0.04时检测结果

k值取0.01时检测结果(灵敏度增加)

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识。


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

相关文章:

  • 【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
  • Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略
  • Elasticsearch-分词器详解
  • 文件解析漏洞中间件(iis和Apache)
  • C++ OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制)
  • EMMC , UFS, SSD介绍
  • git 常用命令合集
  • 为什么要有RPC
  • OpenIPC开源IPC之重要源码包
  • Redis八种数据结构简介
  • pytorch 自定义Dataset类
  • CAS单点登录说明文档
  • EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘_边缘mec平台
  • Redis 讲解运行模式:单机、主从、哨兵、集群使用场景和区别
  • OpenCV 100道面试题及参考答案(7万字长文)
  • 第4章 汇编语言和汇编软件
  • 【C++】static作用总结
  • 【ORACLE】独有的函数
  • 数据结构代码集训day13(适合考研、自学、期末和专升本)
  • 华为认证是什么?HCIA/HCIP/HCIE是什么?
  • Java8对接三方流式接口,并实时输出(GPT)
  • 【数据库】Oracle和Mysql的区别
  • 多媒体应用设计师需要掌握多种软件
  • 动态化-鸿蒙跨端方案介绍
  • C++day6
  • MySQL5.7.36之主从复制增强半同步复制-centos7