图像数据处理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时检测结果(灵敏度增加)

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

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

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值