当前位置: 首页 > article >正文

图像处理篇---opencv中的图像特征


文章目录

  • 前言
  • 一、纹理特征:局部二值模式(LBP)
    • 1. LBP 简介
    • 2. LBP 计算步骤
    • 3. OpenCV 实现
    • 4. 优点
    • 5. 缺点
  • 二、形状特征:Hu矩
    • 1. Hu矩简介
    • 2. Hu矩计算步骤
    • 3. OpenCV 实现
    • 4. 优点
    • 5. 缺点
  • 三、其他可用于传统机器学习的特征
    • 1. 颜色特征
      • 颜色直方图
      • 颜色矩
    • 2. 边缘特征
      • Canny边缘检测
      • HOG(方向梯度直方图)
    • 3. 关键点特征
      • SIFT
      • SURF
    • 4. 纹理特征
      • Haralick纹理特征
    • 5. 几何特征
      • 轮廓特征
  • 四、总结
    • 1. LBP
    • 2. Hu矩
    • 3. 其他特征


前言

OpenCV 提供了多种传统图像特征提取方法,这些特征可以用于机器学习任务(如图像分类、目标检测)。以下是 OpenCV 中常用的纹理特征(LBP)和形状特征(Hu矩)的详细介绍,以及其他可用于传统机器学习的特征


一、纹理特征:局部二值模式(LBP)

1. LBP 简介

局部二值模式(Local Binary Pattern, LBP)是一种用于描述图像局部纹理特征的算子。它通过比较像素点与其邻域像素的灰度值,生成二进制模式,进而提取纹理信息。

2. LBP 计算步骤

选择一个中心像素点。
比较中心像素点与其邻域像素的灰度值
如果邻域像素值大于中心像素值,则标记为 1。
否则,标记为 0。
二进制结果转换为十进制数,作为该中心像素的 LBP 值。
对整个图像重复上述过程,生成 LBP 图像

3. OpenCV 实现

import cv2
import numpy as np

#读取图像并转换为灰度图
image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

#计算 LBP 特征
radius = 1  # 邻域半径
n_points = 8 * radius  # 邻域像素点数
lbp = np.zeros_like(image, dtype=np.uint8)

for i in range(radius, image.shape[0] - radius):
    for j in range(radius, image.shape[1] - radius):
        center = image[i, j]
        binary = 0
        for k in range(n_points):
            x = i + int(radius * np.cos(2 * np.pi * k / n_points))
            y = j - int(radius * np.sin(2 * np.pi * k / n_points))
            binary |= (image[x, y] >= center) << k
        lbp[i, j] = binary

#显示 LBP 图像
cv2.imshow("LBP Image", lbp)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 优点

计算简单,速度快
光照变化具有一定的鲁棒性

5. 缺点

噪声敏感。
仅适用于局部纹理描述

二、形状特征:Hu矩

1. Hu矩简介

Hu矩是一种基于图像几何矩的形状特征,具有平移、旋转和缩放不变性。它通过计算图像的七个不变矩来描述图像的形状特征

2. Hu矩计算步骤

计算图像的几何矩
计算中心矩
归一化中心矩
计算七个 Hu 不变矩

3. OpenCV 实现

import cv2

#读取图像并转换为灰度图
image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

#二值化图像
_, binary = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

#计算 Hu 矩
moments = cv2.moments(binary)
hu_moments = cv2.HuMoments(moments)

#打印 Hu 矩
print("Hu Moments:", hu_moments.flatten())

4. 优点

具有平移、旋转和缩放不变性
适用于形状描述。

5. 缺点

噪声敏感。
仅适用于全局形状描述。

三、其他可用于传统机器学习的特征

1. 颜色特征

颜色直方图

颜色直方图:描述图像中颜色的分布。

hist = cv2.calcHist([image], [0], None, [256], [0, 256])

颜色矩

颜色矩:计算图像颜色的均值、方差和偏度

2. 边缘特征

Canny边缘检测

Canny 边缘检测:提取图像的边缘信息。

edges = cv2.Canny(image, 100, 200)

HOG(方向梯度直方图)

HOG(方向梯度直方图):描述图像的局部形状和外观

hog = cv2.HOGDescriptor()
features = hog.compute(image)

3. 关键点特征

SIFT

SIFT:检测图像的关键点并计算描述符。

sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(image, None)

SURF

SURF:类似于 SIFT,但计算速度更快。

surf = cv2.xfeatures2d.SURF_create()
keypoints, descriptors = surf.detectAndCompute(image, None)

4. 纹理特征

Haralick纹理特征

Haralick 纹理特征:基于**灰度共生矩阵(GLCM)**计算纹理特征。

from skimage.feature import graycomatrix, graycoprops
glcm = graycomatrix(image, distances=[1], angles=[0], levels=256, symmetric=True, normed=True)
contrast = graycoprops(glcm, 'contrast')

5. 几何特征

轮廓特征

轮廓特征:提取图像中物体的轮廓信息。

contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    area = cv2.contourArea(contour)
    perimeter = cv2.arcLength(contour, True)

四、总结

1. LBP

用于局部纹理描述。
计算简单,但对噪声敏感。

2. Hu矩

用于全局形状描述。
具有平移、旋转和缩放不变性

3. 其他特征

颜色特征、边缘特征、关键点特征、纹理特征和几何特征均可用于传统机器学习任务。

根据具体任务选择合适的特征组合
通过结合多种特征,可以提高传统机器学习模型在图像任务中的性能



http://www.kler.cn/a/577114.html

相关文章:

  • C++程序设计语言笔记——基本功能:表达式
  • pytorch tensor创建tensor
  • Maven快速入门指南
  • 2025天津申论(综合市区) 第一题“反向旅游”
  • python:pymunk + pygame 模拟六边形内小球弹跳运动
  • Node.js中HTTPS模块应用详解
  • [补]数电笔记——逻辑代数基础
  • HarmonyOS 应用程序包结构 (发布态)
  • 【Spring Boot 应用开发】-05 命令行参数
  • Python使用入门(一)
  • 网络编程介绍
  • Vue 3 组件库测试驱动开发 (TDD):Jest + Vue Test Utils 单元测试实战 - 保障组件质量与长期维护性
  • Redis在人员管理系统中的应用示例
  • 【每日八股】计算机网络篇(四):HTTP
  • 大白话react第十七章React 与 WebGL 项目进阶优化及拓展
  • GStreamer —— 2.13、Windows下Qt加载GStreamer库后运行 - “教程13:播放控制“(附:完整源码)
  • BUUCTF——[GYCTF2020]FlaskApp1 SSTI模板注入/PIN学习
  • 无人机避障——XTDrone中运行VINS-Fusion+Ego-planner进行路径规划
  • 构建功能齐全的JavaScript计算器:从基础到高级功能的全面实现
  • 深入解析 BitBake 日志机制:任务调度、日志记录与调试方法