图像特征-harris
图像特征-harris
概念
- 作用:对图像中的平滑区域、边界区域、角点进行检测
- 大致原理:使用一定大小的窗口在图像中的所有地方进行微小移动,对移动的差异值进行处理,判断是平滑区域、边界区域和角点
平滑区域:
边界区域:
角点区域:
相关数学推导
目标:计算图像中每个像素点的自相似性,由自相似性可以判断出该像素属于哪种类型的区域
自相似性的计算
自相似性的计算公式:
对自相似性的计算公式进行转换:
注意到二次函数在平面上本质是一个椭圆函数,是一个中心点在原点的倾斜椭圆,在3维空间上是一个顶点向下的椭圆锥
对其进行坐标转换或者实对称矩阵M进行对角化,可以消去中间项,把倾斜的椭圆放平,其中对角矩阵是,和对应了椭圆的两个轴
所以直观上来看,椭圆的两个轴长大小发生变化时自相似性的大小也会发生变化
根据自相似性作判断
根据像素点的特征值()大小,判断该点在哪种类型区域
- 边界:一个特征值大,另一个特征值小。自相关函数值在某个方向上大,其它方向上小
- 平面:两个特征值都小,且近似相等。自相关函数值在各个方向上都小
- 角点:两个特征值都大,且近似相等。自相关函数值在各个方向上都增大
角点相应R值:对进行处理,方便判断
- 当R>0:很可能是属于角点区域
- 当R≈0:很可能是属于平滑区域
- 当R<0:很可能是属于边界区域
函数运用
dst = cv2.cornerHarris(src, blockSize, ksize, k)
- src:数据类型为float32的图像
- blockSize: 角点检测中指定区域的大小
- ksize: Sobel求导中使用的窗口大小
- k: 取值参数为 [0,04,0.06],即角点相应R值中的
- dst:图中每个像素点的自适应值
运用例子:
import cv2 import numpy as np # 读入图片,转灰度图 img = cv2.imread('test_1.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用cornerHarris函数,指定检测区域大小为2x2,Sobel算子大小为3x3,k取0.04 dst = cv2.cornerHarris(gray, 2, 3, 0.04) # 对可能为角点的点标红 img[dst>0.01*dst.max()]=[0,0,255] # 显示 cv2.imshow('dst',img) cv2.waitKey(0) cv2.destroyAllWindows()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律