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

图像处理篇---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. 其他特征

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

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


相关文章:

  • JavaScript基本知识
  • 【C++模板】:开启泛型编程之门(函数模版,类模板)
  • 大模型在甲状腺良性肿瘤诊疗全流程中的应用研究报告
  • 【Golang】第一弹-----初步认识GO语言
  • docker 小记
  • 使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)
  • Node 使用 SSE 结合redis 推送数据(echarts 图表实时更新)
  • Javascript基础语法详解
  • 深入探索Matter协议:开发Matter智能家居设备的基本步骤
  • 《Java三剑客:JDK、JRE、JVM的“塑料友情”》
  • wireshark 如何关闭混杂模式 wireshark操作
  • redis在ubuntu更新至最新版本-官方提供方法-查看版本和状态-查看数据库中数据
  • 【Javascript网页设计】在线食谱分享页面案例
  • 网络防火墙是什么有什么用_网络防火墙:守护信息安全的重要屏障
  • 【论文精读】ACE-Zero
  • 电脑的写字板如何使用?
  • FastJSON常用注解
  • 利用python生成excel中模板范围对应的shape文件
  • 指令微调 (Instruction Tuning) 与 Prompt 工程
  • 光电感知赋能智能未来 灵途科技护航新质生产力发展