机器学习图像特征提取—Hu矩(Hu不变矩)原理及代码

目录

1 矩的概念

2 Hu不变矩

3 利用opencv-python计算Hu矩

1 矩的概念

       图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(图像描述量)来描述整个图像,这组数据越简单越有代表性越好。良好的特征不受光线、噪点、几何形变的干扰。图像识别发展几十年,不断有新的特征提出,而图像不变矩就是其中一个。

       矩是概率与统计中的一个概念,是随机变量的一种数字特征。设X为随机变量,c为常数,k为正整数。则量E[(x−c)k]称为X关于c点的k阶矩。

比较重要的有两种情况:

1. c=0。这时ak=E(Xk)称为X的k阶原点矩

2. c=E(X)。这时μk=E[(X−EX)k]称为X的k阶中心矩。

      一阶原点矩就是期望。一阶中心矩μ1=0,二阶中心矩μ2就是X的方差Var(X)。在统计学上,高于4阶的矩极少使用。μ3可以去衡量分布是否有偏。μ4可以去衡量分布(密度)在均值附近的陡峭程度如何。

       针对于一幅图像,我们把像素的坐标看成是一个二维随机变量(X,Y),那么一幅灰度图像可以用二维灰度密度函数来表示,因此可以用矩来描述灰度图像的特征。

      不变矩(Invariant Moments)是一处高度浓缩的图像特征,具有平移、灰度、尺度、旋转不变性。M.K.Hu在1961年首先提出了不变矩的概念。1979年M.R.Teague根据正交多项式理论提出了Zernike矩。

2 Hu不变矩

       Hu 距值具有旋转、缩放、镜像和平移不变性,也就是说相同或相似的形状经过旋转、缩放、平移变换后,其 Hu 矩值不变。对于彩色帐篷形状固定的障碍物,在无人机飞行过程中会产生缩放、平移等变化,但其 Hu 矩值变化不大;而对于火焰由于其面积和轮廓的无规律变化,其 Hu 矩值也会呈相应的无规律变化。Hu 矩是通过二阶和三阶中心矩可求得 7 个不变矩组,如下式所示。

       由Hu矩组成的特征量对图片进行识别,优点就是速度快,缺点是识别率比较低,对于纹理比较丰富的图片,识别率低。

       Hu不变矩一般用于识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果形状,或者对于车牌中的简单字符的识别效果会相对好一些。

3 利用opencv-python计算Hu矩

#============hu不变矩==============
# Hu不变矩的性质:(1)图像形状平移不变性;(2)图像形状尺度不变性;(3)图像形状旋转不变性。
# Hu不变矩的应用与意义:(1)图像形状匹配;(2)图像形状区分;(3)图像形状相似度计算。
import cv2
from datetime import datetime
import numpy as np

def test(img):
    moments = cv2.moments(img)
    humoments = cv2.HuMoments(moments)
    # 因为直接计算出来的矩可能很小或者很大,因此取对数好比较,这里的对数底数为e,通过对数除法的性质将其转换为以10为底的对数,一般是负值,因此加一个负号将其变为正的
    humoments = -(np.log(np.abs(humoments)))/np.log(10) # 同样建议取对数
    print(humoments)

if __name__ == '__main__':
    #t1 = datetime.now()
    fp = './photo/7-5-1250.bmp'
    img = cv2.imread(fp)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    test(img_gray)
    #print (datetime.now() - t1)

参考来源:图像的矩特征 - ☆Ronny丶 - 博客园

Hu 矩计算 - 知乎

图像矩(Hu矩)简介_呜呜我是小侠客的博客-CSDN博客_hu矩

### 实现智慧职教MOOC自动化播放脚本开发 为了实现智慧职教MOOC课程的自动化播放功能,需构建一个能够处理登录验证、解析视频URL以及控制浏览器自动播放流程的Python程序。此过程涉及多个方面的工作。 #### 构建基础环境 确保已安装必要的库来支持Web操作和多媒体文件处理。通常情况下,`selenium`是一个强大的工具,可用于模拟真实用户的浏览器行为;而`requests`则有助于发送HTTP请求完成登录认证等前置工作[^1]。 ```bash pip install selenium requests ``` #### 登录逻辑设计 通过分析目标平台(即云课堂智慧职教)的具体机制,编写一段代码片段用于执行登录动作。这一步骤可能需要解决验证码识别等问题,在某些场景下或许还需要借助第三方服务或API接口辅助完成。 ```python from selenium import webdriver import time driver = webdriver.Chrome() # 使用Chrome作为驱动器 driver.get('https://www.zhijiao.com/login') # 替换成实际网址 # 填写用户名密码并提交表单 (此处仅为示意, 需要根据实际情况调整) username_input = driver.find_element_by_name('username') password_input = driver.find_element_by_name('password') username_input.send_keys('your_username') password_input.send_keys('your_password') login_button = driver.find_element_by_class_name('btn-login') login_button.click() time.sleep(5) # 等待页面加载完毕 ``` #### 获取课程列表与章节详情 成功登录之后,下一步是从个人主页或其他指定位置抓取所选课程的信息。这部分内容往往嵌套于HTML文档结构之中,因此推荐利用XPath表达式或者CSS选择器定位所需节点,并提取其中的关键数据项如链接地址、标题描述等。 ```python course_links = [] elements = driver.find_elements_by_css_selector('.course-item a') for element in elements: href = element.get_attribute('href') course_links.append(href) print(course_links[:3]) # 输出前三个课程链接供测试使用 ``` #### 自动化播放管理 最后也是最关键的一环就是让计算机代替人工去逐集浏览这些在线资源了。考虑到不同站点对于连续访问频率存在限制措施,建议适当加入延时策略以规避潜在风险。同时也要注意监听播放状态变化事件以便及时响应异常情况的发生。 ```python def play_video(video_url): driver.execute_script(f'window.open("{video_url}");') video_player = None while not video_player: try: video_player = driver.switch_to.active_element() except Exception as e: pass duration = int(driver.execute_script("return arguments[0].duration", video_player)) current_time = 0 while current_time < duration * 0.9: # 至少看完90% current_time = float(driver.execute_script("return arguments[0].currentTime", video_player)) print(f"Playing... {current_time}/{duration}") if 'ended' in str(driver.execute_script("return arguments[0].readyState", video_player)): break time.sleep(10) # 每隔十秒检查一次进度条 for link in course_links: chapters = get_chapter_details(link) # 定义函数get_chapter_details获取每章的内容 for chapter in chapters: videos = extract_videos(chapter['url']) # 提取出该章节下的所有视频链接 for vid in videos: play_video(vid) driver.quit() ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值