CVPR目标检测经典作:HOG特征

news2024/11/28 22:55:42

来源:投稿 作者:小灰灰
编辑:学姐

HOG特征

HOG特征( Histogram of Oriented Gradients 方向梯度直方图)是一种在图像上找到特征描述子,主要通过计算和统计图像局部区域的梯度方向直方图来构成特征。来源于cvpr2015 年论文。

算法流程

1、进行图像预处理

2、计算梯度

1. 图像预处理

1.1 图像灰度化,gamma矫正

我们先读入彩色图像,然后转换成灰度图像,采用gamma校正对输入的图像进行颜色空间的归一化,主要作用是调节图像的对比度,可以降低局部的阴影和光照变换的影响,可以抑制噪音。

图片one.png,是一个64*64的图片。

import cv2
import numpy as np

img = cv2.imread("one.png", 0) # 其中参数0表示以灰度图进行读取;
img1 = np.power(img/float(np.max(img)), 1/1.5)
img2 = np.power(img/float(np.max(img)), 1.5)
cv2.imshow('src', img)
cv2.imshow('gamma=1/1.5', img1)
cv2.imshow('gamma=1.5', img2)
cv2.waitKey()

这是原始图片,灰度图片,不同比例的gamma校正之后的图片。

其中我们将一张灰度图片表示以下的矩阵

np.max(img)=203,img/float(np.max(img))是以下结果。

那么什么是gamma校正?

就是将归一化之后的像素值,也就是将0.15763547 的1/1.5,1.5次方,例如0.15763547的1/1.5 次方就等于0.29181165,依次可以计算得出以下值。

2. 计算梯度图

我们需要计算图像的水平和垂直方向的梯度,以刚开始图片为主。

我们以下面像素为例,计算图像的梯度。

计算中心点0.078431375的梯度大小,其中0.078431375(A)的坐标点为(x,y):

水平梯度计算公式是:

垂直梯度计算公式:

那么梯度幅度计算公式:

梯度方向计算公式:

根据上面的计算,我们可以调用sobel算子,进行计算。

import cv2
import numpy as np
im = cv2.imread("one.png", 0)     # 其中,0表示将图片以灰度读出来。
img = np.float32(im) / 255.0      # 归一化
gx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)
gy = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=3)

# 计算梯度幅度和方向
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
cv2.imshow('src', img)
cv2.imshow("absolute x-gradient",gx)
cv2.imshow("absolute y-gradient",gy)
cv2.imshow("gradient magnitude",mag)
cv2.imshow("gradient direction",angle)

可以看到下图,分别是gx,gy的图像显示,以及幅度和方向的可视化。

这是其中的计算得出的结果。

上面是整个的HOG特征的计算公式,但是因为是整张图片计算的,计算量大,等等一些缺点,所以我们可以选用8x8,4x4的小的cell可以用于计算HOG特征。

这里以16x16作为例子进行展示;

原图是64*64,其中pixels_per_cell=(16, 16),是用来设置cell的大小。

image = cv2.imread('one.png', 0)        # 读取图片,有0的话表示转变为灰度图;
image = np.float32(image) / 255.0       # 归一化
fd, hog_image = hog(image,
                    orientations=8,
                    pixels_per_cell=(16, 16),
                    cells_per_block=(1, 1),
                    visualize=True,
                    multichannel=False) # multichannel=True是针对3通道彩色;

关注下方《学姐带你玩AI》🚀🚀🚀

回复“CVPR”获取更多经典+前沿必读论文

码字不易,欢迎大家点赞评论收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Angular 学习笔记

本系列笔记主要参考: Angular学习视频 Angular官方文档 Angular系列笔记 特此感谢! 目录 1.Angular 介绍2.Angular 环境搭建、创建 Angular 项目、运行 Angular 项目2.1.环境搭建2.2.创建 Angular 项目2.3.运行项目 3.Angular 目录结构分析3.1.目录结构分…

低分辨率视频可以变高分辨率吗?

近几年,老电影、老视频片段修复越来越常见了。很多优质的片源,因为年代久远,分辨率较低,画质比较差,通过视频超分技术,实现了画质增强,提高画质分辨率,视频画面变得更清晰了。 首先…

计算机有哪些方面的技术? - 易智编译EaseEditing

计算机是一种多功能的电子设备,可以处理数据、进行信息存储和检索、进行计算和模拟等多种任务。计算机技术是指计算机相关的技术领域,包括硬件和软件等多个方面。下面介绍一些常见的计算机技术: 操作系统技术: 操作系统是计算机系…

select poll epoll有什么区别

select/poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述…

什么是日志文件

文章目录 什么是日志文件Centos 7 日志文件简易说明日志文件的重要性Linux常见的日志文件文件名/var/log/boot.log/var/log/cron/var/log/dmesg/var/log/lastlog/var/log/maillog或 /var/log/mail/*/var/log/messages/var/log/secure/var/log/wtmp、/var/log/faillog/var/log/h…

Netty实战(二)

第一个Netty程序 一、环境准备二、Netty 客户端/服务器概览三、编写 Echo 服务器3.1 ChannelHandler 和业务逻辑3.2 引导服务器 四、编写 Echo 客户端4.1 通过 ChannelHandler 实现客户端逻辑4.2 引导客户端 五、构建和运行 Echo 服务器和客户端 一、环境准备 Netty需要的运行…

U盘怎么加密?最简单的U盘加密方法

说起U盘,相信每个人都不会感到陌生,它是最常用的移动存储设备。那么,你会加密U盘吗?相信不少人并不知道这个问题的答案。下面小编就来教大家自己动手制作加密U盘。 首先,我们需要提前做好准备工作,一个可以…

04-数组和字符串

概述 同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。 一维数组 全局数组若不初始化,编译器将其初始化为零。局部数组若不初始化,内容为随机值。 int a[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//定义一…

瑞吉外卖 - 员工信息分页查询功能(7)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

NodeJs之调试

关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉。 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了。 但是也别泰国担心,NodeJs的调试是很不方便!这是肯定的。 但是还好&…

Spring MVC优雅处理业务异常

本文中,我会描述如何在应用程序的不同层次,优雅地处理业务异常。 异常定义 BusinessException基类定义如下,注意异常中携带业务错误码,方便前端处理异常: public class BusinessException extends RuntimeException…

哪些云渲染服务用于多GPU渲染?

众所周知,GPU渲染 可以使用显卡代替CPU进行渲染,可以显着加快渲染速度,因为GPU主要是为快速图像渲染而量身定制的。GPU的诞生是为了应对图形密集型应用程序,这些应用程序会给CPU带来负担并阻碍计算性能。GPU渲染的原理是在多个数据…

信创办公–基于WPS的EXCEL最佳实践系列 (图表)

信创办公–基于WPS的EXCEL最佳实践系列 (图表) 目录 应用背景操作步骤1、创建图表和图形2、添加其他数据序列3、在源数据的行与列之间切换4、添加图例5、调整图表和图形的大小6、修改图表和图形参数7、应用图表布局和样式8、设置图表和图形的位置9、插入…

4面都过了,最后要价10K,HR说我不尊重华为....

在不知道一个公司的普遍薪资水平的时候,很多面试者不敢盲目的开价,但就因为这样可能使得面试官怀疑你的能力。一位网友就在网上诉说了自己的经历,男子是一位测试员,已经有九年的工作经历了,能力自己觉得还不错。 因为…

单片机课设 - 液晶显示屏显示时间(实验板实现)

目录 前言:本代码涉及的主要知识:代码(实验板实现代码): 前言: 设计本代码的主要目的是为了完成期末作业,即在液晶显示屏上显示、时间、日期、温度,以及用按键控制时间、温度的显示。…

Leetcode50. Pow(x, n)

Every day a Leetcode 题目来源&#xff1a;50. Pow(x, n) 解法1&#xff1a;递归 代码&#xff1a; /** lc appleetcode.cn id50 langcpp** [50] Pow(x, n)*/// lc codestart class Solution { public:double myPow(double x, int n){if (n 0)return 1.0;if (n < 0)re…

华为OD机试真题 Java 实现【获取最大软件版本号】【2023Q1 100分】

一、题目描述 Maven版本号定义,<主版本>.<次版本><增量版本>-<里程碑版本> 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。 <主版本>.<次版本>增…

纯代码的3D玫瑰花,有个这个还怕女朋友不开心?

先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>import url("https://fonts.googleapis.com/css2?familyNico…

Anicube NFT 作品集

Anicube 是韩国娱乐公司 Cube Entertainment 和区块链公司 Animoca Brands 的合资公司 Anicube Entertainment 推出的 IP 空间。其主题是音乐元宇宙&#xff0c;各种基于 K-pop 的表演和推广活动将在主舞台和音乐家星球上举行。 此外&#xff0c;这个系列的购买者还将获得特别奖…

web自动化测试:selenium怎么实现关键字驱动

要做 ui 自动化测试&#xff0c;使用关键字驱动可以说是必须会的一种测试方式&#xff0c;它既可以在纯代码的自动化程序中运行&#xff0c;也可以在测试平台中使用。 使用纯代码方式时&#xff0c;自动化工程师先写好一个通用的程序&#xff0c;其他手工测试人员只需要把执行…