算法流程:

将图像转换为灰度图像

利用Sobel滤波器求出 海森矩阵 (Hessian matrix) :

将高斯滤波器分别作用于Ix²、Iy²、IxIy

计算每个像素的 R= det(H) - k(trace(H))²。det(H)表示矩阵H的行列式,trace表示矩阵H的迹。通常k的取值范围为[0.04,0.16]。

满足 R>=max(R) * th 的像素点即为角点。th常取0.1。

Harris算法实现:

import cv2 as cv

import numpy as np

import matplotlib.pyplot as plt

# Harris corner detection

def Harris_corner(img):

## Grayscale

def BGR2GRAY(img):

gray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]

gray = gray.astype(np.uint8)

return gray

## Sobel

def Sobel_filtering(gray):

# get shape

H, W = gray.shape

# sobel kernel

sobely = np.array(((1, 2, 1),

(0, 0, 0),

(-1, -2, -1)), dtype=np.float32)

sobelx = np.array(((1, 0, -1),

(2, 0, -2),

(1, 0, -1)), dtype=np.float32)

# padding

tmp = np.pad(gray, (1, 1), "edge")

# prepare

Ix = np.zeros_like(gray, dtype=np.float32)

Iy = np.zeros_like(gray, dtype=np.float32)

# get differential

for y in range(H):

for x in range(W):

Ix[y, x] = np.mean(tmp[y : y + 3, x : x + 3] * sobelx)

Iy[y, x] = np.mean(tmp[y : y + 3, x : x + 3] * sobely)

Ix2 = Ix ** 2

Iy2 = Iy ** 2

Ixy = Ix * Iy

return Ix2, Iy2, Ixy

# gaussian filtering

def gaussian_filtering(I, K_size=3, sigma=3):

# get shape

H, W = I.shape

## gaussian

I_t = np.pad(I, (K_size // 2, K_size // 2), "edge")

# gaussian kernel

K = np.zeros((K_size, K_size), dtype=np.float)

for x in range(K_size):

for y in range(K_size):

_x = x - K_size // 2

_y = y - K_size // 2

K[y, x] = np.exp( -(_x ** 2 + _y ** 2) / (2 * (sigma ** 2)))

K /= (sigma * np.sqrt(2 * np.pi))

K /= K.sum()

# filtering

for y in range(H):

for x in range(W):

I[y,x] = np.sum(I_t[y : y + K_size, x : x + K_size] * K)

return I

# corner detect

def corner_detect(gray, Ix2, Iy2, Ixy, k=0.04, th=0.1):

# prepare output image

out = np.array((gray, gray, gray))

out = np.transpose(out, (1,2,0))

# get R

R = (Ix2 * Iy2 - Ixy ** 2) - k * ((Ix2 + Iy2) ** 2)

# detect corner

out[R >= np.max(R) * th] = [255, 0, 0]

out = out.astype(np.uint8)

return out

# 1. grayscale

gray = BGR2GRAY(img)

# 2. get difference image

Ix2, Iy2, Ixy = Sobel_filtering(gray)

# 3. gaussian filtering

Ix2 = gaussian_filtering(Ix2, K_size=3, sigma=3)

Iy2 = gaussian_filtering(Iy2, K_size=3, sigma=3)

Ixy = gaussian_filtering(Ixy, K_size=3, sigma=3)

# 4. corner detect

out = corner_detect(gray, Ix2, Iy2, Ixy)

return out

# Read image

img = cv.imread("../qiqiao.jpg").astype(np.float32)

# Harris corner detection

out = Harris_corner(img)

cv.imwrite("out.jpg", out)

cv.imshow("result", out)

cv.waitKey(0)

cv.destroyAllWindows()

实验结果:

原图:

Harris角点检测算法检测结果:

以上就是python 实现Harris角点检测算法的详细内容,更多关于python Harris角点检测算法的资料请关注云海天教程其它相关文章!

原文链接:https://www.cnblogs.com/wojianxin/p/12574909.html

python 角点检测_python 实现Harris角点检测算法相关推荐

  1. python 角点检测_python实现Harris角点检测算法

    算法流程: 将图像转换为灰度图像 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 将高斯滤波器分别作用于Ix².Iy².IxIy 计算每个像素的 R= det(H) - k( ...

  2. 《OpenCV3编程入门》学习笔记10 角点检测(一)Harris角点检测

    第10章 角点检测 10.1 Harris角点检测 10.1.1 角点 1.图像特征类型: (1)边缘 (2)角点(感兴趣点) (3)斑点(感兴趣区域) 2.角点定义: (1) 一阶导数(灰度的梯度) ...

  3. 计算机视觉(角点检测)- 1 - Harris角点检测

    计算机视觉(角点检测)- 1 - Harris角点检测 学习前言 一.Harris角点检测   1.什么是角点?   2.Harris角点检测的基本原理&基本思想   3.Harris角点检测 ...

  4. harris角点匹配 matlab,基于Harris角点的图像匹配算法

    摘 要: 提出了新的基于特征点的高速图像匹配算法.该算法把角点特征和灰度值特征结合起来,定义了一种基于Harris角点的灰度值特征,并充分利用角点灰度值以及角点周边灰度值和位置信息,然后依据这些信息进 ...

  5. 角点检测汇总:Harris角点及Shi-Tomasi角点检测

    一.角点定义 有定义角点的几段话: 1.角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域中.也 ...

  6. harris角点检测c语言,Harris角点检测原理及实现

    为便于理解,先简要介绍角点的概念和角点检测背景 一.角点及角点检测背景: 角点概念: 角点,通常可理解为两条边的角点,也可理解为像素值在多个方向有显著变化的点或局部区域内某个属性明显的点.如多个轮廓的 ...

  7. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例

    Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...

  8. python 测试端口连通_Python语言 实现端口连通性检测

    本文主要向大家介绍了Python语言 实现端口连通性检测,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. # -*- coding: utf-8 -*- #!/bin/env py ...

  9. python中cv2库_Python cv2库(人脸检测)

    根据访问图片识别 # coding:utf-8 import sys import math import cv2 # 待检测的图片路径 imagepath = r'l.png' face_casca ...

最新文章

  1. linux制作共享服务器,Linux如何制作一个简单的共享服务器
  2. [备忘]WPF的Colors类
  3. Redis操作Hash相关API
  4. 迭代器协议、斐波那契数列
  5. 【带着canvas去流浪(15)】threejs fundamentals翻译系列1-scene graph
  6. Mysql优化之索引优化
  7. [原创]将本地代码共享到github的操作步骤
  8. 第一台电子计算机采用哪位科学家,计算机基础知识试题及答案解析
  9. 一道微软面试题的Java解法
  10. (花生壳)向日葵 相关虚拟硬件(驱动)造成 xp 系统无法正常 待机、休眠
  11. 打印机添加或者设置流程
  12. 2013Esri全球用户大会QA之GIS发展状况和趋势
  13. java可视化tiff转pdf工具
  14. getch()函数怎么用
  15. python模拟用户登录代码_Python模拟用户自动登陆网易126邮箱源码详解
  16. oenwrt 进不了bios_J1900在openwrt不能正常重启的BIOS选项说明
  17. 已解决:Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy
  18. (1)在ensp上面进行静态路由和默认路由测试(直接上手)
  19. Nokia的操作技巧
  20. AWVS安装激活教程

热门文章

  1. VS code内置浏览器插件-Preview on Web Server
  2. 概论第6章_正态总体的抽样分布_卡方分布_F分布_t分布
  3. 和京东、阿里健康正面刚,叮当快药胜算几何?
  4. 幼儿园中秋国庆双节活动方案怎么写?
  5. java创建文件夹的4种方法及其优缺点(io基础)
  6. java实现初始化三角形数组_Java 数组、多维数组,动态、静态初始化,数组JVM内存模型分析...
  7. Jackson实现xml转换
  8. SpringCloud Feign 传参问题及传输Date类型参数的时差
  9. MANET模拟器和拓扑可视化研究(Matlab代码实现)
  10. 【Flutter】Flutter项目中遇到的各种坑