『OpenCV3』Harris角点特征_API调用及python手动实现
一、OpenCV接口调用示意
介绍了OpenCV3中提取图像角点特征的函数:
1 # coding=utf-8 2 import cv2 3 import numpy as np 4 5 6 '''Harris算法角点特征提取''' 7 8 img = cv2.imread('chess_board.png') 9 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 10 gray = np.float32(gray) 11 12 # {标记点大小,敏感度(3~31,越小越敏感)} 13 # OpenCV函数cv2.cornerHarris() 有四个参数 其作用分别为 : 14 #img - Input image, it should be grayscale and float32 type. 15 #blockSize - It is the size of neighbourhood considered for corner detection 16 #ksize - Aperture parameter of Sobel derivative used. 17 #k - Harris detector free parameter in the equation,在0.04 到0.05之间 18 dst = cv2.cornerHarris(gray,2,23,0.04) 19 img[dst>0.01 * dst.max()] = [0,0,255] 20 21 cv2.imshow('corners',img) 22 cv2.waitKey() 23 cv2.destroyAllWindows()
dst = cv2.cornerHarris(gray,2,23,0.04)中第3个参数(23)调整对结果影响如下:
取值为3时:
取值为23时:
二、使用Python实现harris胶垫检测
计算机视觉课后作业,因为已经提交了一段时间了,之前也注意到网上很少有python版本的harris角点检测代码,所以开源出来,
# Author : hellcat
# Time : 18-3-22"""
import os
os.environ["CUDA_VISIBLE_DEVICES"]="-1"import numpy as np
np.set_printoptions(threshold=np.inf)import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
"""import numpy as np
from PIL import Image
from skimage import filters
from datetime import datetime
import matplotlib.pyplot as pltIMAGE_PATH = '1653033843.jpg' # 图片路径
WITH_NMS = False # 是否非极大值抑制,True/False
k = 0.04 # 响应函数参数k
threshold = 0.01 # 界定阈值img = Image.open(IMAGE_PATH)
img_gray = img.convert('L')
img_num = np.pad(np.asarray(img_gray, dtype=np.float32), ((1, 1), (1, 1)), 'constant')
h, w = img_num.shape # padding之后的图像尺寸# 计算Ix,Iy
grad = np.empty([h, w, 2], dtype=np.float)
grad[:, 1:-1, 0] = img_num[:, 2:] - img_num[:, :-2] # Ix
grad[1:-1, :, 1] = img_num[2:, :] - img_num[:-2, :] # Iy# 计算Ixx,Iyy,Ixy
m = np.empty([h, w, 3], dtype=np.float)
# m[:, :, 0] = grad[:, :, 0]**2
# m[:, :, 1] = grad[:, :, 0]**2
# m[:, :, 2] = grad[:, :, 0]*grad[:, :, 1]
m[:, :, 0] = filters.gaussian(grad[:, :, 0]**2, sigma=2) # Ixx
m[:, :, 1] = filters.gaussian(grad[:, :, 1]**2, sigma=2) # Iyy
m[:, :, 2] = filters.gaussian(grad[:, :, 0]*grad[:, :, 1], sigma=2) # Ixy
m = [np.array([[m[i, j, 0], m[i, j, 2]],[m[i, j, 2], m[i, j, 1]]]) for i in range(h) for j in range(w)]# 记录一下R计算时耗
start = datetime.now()
# 0:00:42.123384 迭代器策略:用时间换空间
# R = np.array([d-k*t**2 for d, t in zip(map(np.linalg.det, m), map(np.trace, m))])
# 0:00:35.846864
D, T = list(map(np.linalg.det, m)), list(map(np.trace, m))
R = np.array([d-k*t**2 for d, t in zip(D, T)])
end = datetime.now()
print(end-start)R_max = np.max(R)
R = R.reshape(h, w)# 标注角点
record = np.zeros_like(R, dtype=np.int)
img_row = np.pad(np.asarray(img, dtype=np.float32), ((1, 1), (1, 1), (0, 0)), 'constant')
for i in range(1, h-2):for j in range(1, w-2):if WITH_NMS:if R[i, j] > R_max*threshold and R[i, j] == np.max(R[i-1:i+2, j-1:j+2]):record[i, j] = 255img_row[i, j] = [255, 255, 255]else:if R[i, j] > R_max*0.01:record[i, j] = 255img_row[i, j] = [255, 255, 255]
# record[R > 0.01*R_max] = 255
# img_row[R > 0.01*R_max] = [255, 255, 255]# 图像展示与保存
res = Image.fromarray(np.uint8(record[1:-1, 1:-1]))
img_row = Image.fromarray(np.uint8(img_row[1:-1, 1:-1]))plt.figure()
plt.subplot(1, 2, 1)
plt.imshow(res)
plt.subplot(1, 2, 2)
plt.imshow(img_row)
if WITH_NMS:plt.savefig('角点检测_NMS.jpg')res.save('角点检测_NMS_1.png')img_row.save('角点检测_NMS_2.png')
else:plt.savefig('角点检测_no_NMS.jpg')res.save('角点检测_no_NMS_1.png')img_row.save('角点检测_no_NMS_2.png')
实际上在计算Ixx,Ixy,Iyy时要进行高斯滤波,理论推导中都采用了最简单的权重(全部为1),这点注意,使用全1权重啥也检测不出来。
不进行非极大值抑制结果:
进行非极大值抑制结果(实际上检测出来的点很多,因为分辨率看不清):
『OpenCV3』Harris角点特征_API调用及python手动实现相关推荐
- opencv3/C++ Harris角点、Shi-Tomasi角点亚像素角点
角点检测在图像匹配.目标识别.目标跟踪.运动估计与三维重建等CV领域起着非常重要的作用. 角点定义 关于角点的定义有以下几种: 1.角点是两条及两条以上的边缘的交点: 2.角点处的一阶导数最大,二阶导 ...
- 『OpenCV3』滤波器实现及使用滤波器降噪
一.滤波器实现 我们实现这样一个基于拉普拉斯算子的滤波器核心,并使用它进行滤波,这可以做到锐化图像的效果, 0 -1 0 -1 5 -1 0 -1 0 首先我们完全手动的进行滤波,依赖指针操作, vo ...
- Harris角点特征提取和角点特征匹配(2)
Harris角点特征提取和特征匹配(后半部分) 前半部分点击以下链接: https://blog.csdn.net/QWER306306/article/details/123510826 本文采用H ...
- Harris角点检测和Shi-Tomasi角点检测
文章目录 什么是角点? Harris角点的基本思想 Harris角点特征的数学表达 Harris角点的性质 Harris算法具体步骤 Tshi-Tomasi角点检测和Harris的区别 什么是角点? ...
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
实现平台:windows下的Android studio1.4 依赖库:openCV3.1.0 程序安装平台:Android6.0 实现的功能:从手机中选择一张图片,检测图片的基本特征,通过menu菜 ...
- 《OpenCV3编程入门》学习笔记10 角点检测(一)Harris角点检测
第10章 角点检测 10.1 Harris角点检测 10.1.1 角点 1.图像特征类型: (1)边缘 (2)角点(感兴趣点) (3)斑点(感兴趣区域) 2.角点定义: (1) 一阶导数(灰度的梯度) ...
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...
- 特征点提取之Harris角点提取法
1. 特征点提取的意义 2.角点 3. Harris角点检测的基本原理 4.Harris角点检测算法的步骤 5.Harris角点提取算法设计 <span style="font-siz ...
- OpenCV-图像特征harris角点检测/SIFT函数/特征匹配-05
图像特征-harris角点检测 基本原理 R>0 角点 R≈0 平坦区域 R<0 边界 总结一下Harris算法流程 获取点数据后,计算Ix 和 Iy 整合矩阵,求特征值 比较特征值大小 ...
- 图像特征提取与描述_角点特征01:Harris算法+Shi-Tomas算法
1 Harris角点检测 1.1 原理 Harris角点检测的思想是通过图像的局部的小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化,如下图所示: 将上述思想转换为数学形式,即 ...
最新文章
- mysql show命令用不了_MySQL show命令的用法 | 很文博客
- 150kHz无线导航信号接收板调试-Ver2
- Rsync 基本安装及同步(一)
- 巧用 PHP 数组函数
- 为什么喝酒有的人会脸红,有的人会脸发白
- 《剑指offer》数据流中的中位数
- Eclipse程序员要掌握的常用快捷键
- 手把手教你数据不足时如何做深度学习NLP
- 集成学习—决策树(CART)
- win10下Redis安装、启动教程
- 怎样才能容易更换DB
- python collections模块(队列)
- 深入JavaScript之JS引擎如何执行JS代码
- 天邑TY1608卡刷包晶晨S905L3B支持RTL8822CS、MT7668、MT7661
- xxx.com和www.xxx.com的区别
- 基于matlab的锁相环频率合成器,基于MATLAB锁相环.ppt
- WIN API编程的详细介绍
- CSS最详细的基础教程
- ipad好用的思维导图软件有哪些
- input调起ios摄像头拍照旋转问题解决思路
热门文章
- 小程序 switch 自定义_微信小程序自定义组件问题一:获取组件DOM元素
- docker-compose搭建EFK,继上篇使用filebeat+es对日志文件的过滤
- python分类器鸢尾花怎么写_机器学习之路: python k近邻分类器 鸢尾花分类预测
- MAC编译OpenJDK8(含202-242)的Xcode版本问题
- OFFICE软件有哪三大语言功能?
- 为解决WINDOWS JRE启动外壳,找了好几个方案
- 在项目中经历生死的系统,才会成熟
- ImportError: No module named tensorrt
- 雄伟到惊世骇俗的黄羊山超级相控阵雷达
- 管理感悟:正确认识自己的工作