图像处理——角点检测

1角点介绍

1.1角点定义

角点的定义有两个版本:一是两条边缘的交点,二是邻域内具有两个主方向的特征点。一般而言,角点是边缘曲线上曲率为极大值的点,或者图像亮度发生剧烈变化的点。

1.2检测思路

在图像中定义一个局部小窗口,然后沿各个方向移动这个窗口,则会出现三种情况,分别对应平坦区、边缘和角点。
1)窗口内的图像强度,在窗口向各个方向移动时,都没有发生变化,则窗口内都是“平坦区”,不存在角点。
图像处理——角点检测_第1张图片
2)窗口内的图像强度,在窗口向某一个(些)方向移动时,发生较大变化;而在另一些方向不发生变化,那么窗口内可能存在“边缘”。
图像处理——角点检测_第2张图片
3)窗口内的图像强度,在窗口向各个方向移动时,都发生了较大的变化,则认为窗口内存在“角点”。
图像处理——角点检测_第3张图片

1.3Harris角点检测公式推导

图像处理——角点检测_第4张图片

代码

import numpy as np
import cv2 as cv
 
 
def harris(image):
    # Detector parameters
    blockSize = 2
    apertureSize = 3
    k = 0.04
    # Detecting corners
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    dst = cv.cornerHarris(gray, blockSize, apertureSize, k)
    # Normalizing
    print(dst)
    dst_norm = np.empty(dst.shape, dtype=np.float32)
    cv.normalize(dst, dst_norm, alpha=0, beta=255, norm_type=cv.NORM_MINMAX)
    # Drawing a circle around corners
    for i in range(dst_norm.shape[0]):
        for j in range(dst_norm.shape[1]):
            if int(dst_norm[i, j]) > 120:
                cv.circle(image, (j, i), 2, (0, 255, 0), 2)
    # output
    return image
 
 
src = cv.imread("test.jpg")
result = harris(src)
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()

实现效果:
图像处理——角点检测_第5张图片
图像处理——角点检测_第6张图片
图像处理——角点检测_第7张图片

你可能感兴趣的:(opencv,图像处理,计算机视觉,python)