GLCM 特征和LBP特征提取

GLCM 特征

GLCM(灰度共生矩阵)特征用于描述图像中像素灰度级之间的空间关系,常用于纹理分析。GLCM特征通过统计图像中各个灰度级对之间的出现频率来描述图像的纹理特征。GLCM特征包括能量(ASM)、对比度(Contrast)、熵(Entropy)、逆差矩(Inverse Difference Moment,IDM)和相关性(Correlation)等。

1. 能量(ASM)
   - 能量表示图像中像素灰度级对之间的概率的平方和,即像素对之间的均匀性程度。公式中的 \( p(i,j) \) 表示灰度级对 \( (i,j) \) 出现的概率,求和对所有可能的灰度级对进行。ASM越大,表示图像中的像素对越均匀,纹理越均匀。

2. 对比度(Contrast)
   - 对比度反映了图像中像素对的灰度级之间的差异程度。公式中的 \( (i-j)^2 \) 表示两个灰度级之间的差异的平方, \( p(i,j) \) 表示灰度级对 \( (i,j) \) 出现的概率。对比度越大,表示图像的纹理越粗糙,灰度级对之间的差异越大。

3. 熵(Entropy)
   - 熵用于描述图像的不确定性或信息量。公式中的 \( -\log(p(i,j)) \) 表示灰度级对 \( (i,j) \) 出现的概率的负对数,求和对所有可能的灰度级对进行。熵越大,表示图像中的像素对越不规则,纹理越复杂。

4. 逆差矩(IDM)
   - 逆差矩用于描述图像中灰度级对的一致性程度。公式中的 \( \frac{1}{1+(i-j)^2} \) 表示逆差值, \( p(i,j) \) 表示灰度级对 \( (i,j) \) 出现的概率。逆差矩越大,表示图像中的灰度级对越一致,纹理越均匀。

5. 相关性(Correlation)
   - 相关性用于描述图像中灰度级对的线性相关性程度。公式中的 \( \mu_x \) 和 \( \mu_y \) 分别表示灰度级对的横坐标和纵坐标的平均值, \( \sigma_x \) 和 \( \sigma_y \) 分别表示横坐标和纵坐标的标准差。相关性越接近1,表示图像中的灰度级对越线性相关。

GLCM特征的计算公式能够全面反映图像的纹理特征,能够用于纹理分析、图像分类等应用中。

 读取一张灰度图像,为了计算方便,本节将灰度图像的最高灰度级别从 256 降至 16。 之后从四个方向(0 度,45 度,90 度,135 度),步长d =1分别生成对应的四个灰度共生矩阵。图 4-5 所示为灰度图像 Imgw*h及其生成的四个灰度共生矩阵(其中,w为图片的宽度,h 为图片的高度, wh 不一定相等)。该灰度图像的最高灰度级别为 4,其在生成对应的灰度共生矩阵时,首先根据灰度图像的最高灰度级别生成一个4*4的矩阵,之后分别从四个方向,使用步长d =1遍历整个灰度图像,统计相应的灰度像素对出现的次数。 例如在灰度图像 Imgw*h中,水平方向 0 1 像素对出现的次数为 2,则其在水平方向的灰度共生矩阵中第 0 行第 1 列的元素记为 2。之后,基于每个灰度共生矩阵使用表 4- 2 所示的公式提取 5 个统计特征,即为该灰度共生矩阵提取的 5 GLCM 特征。最后每个可执行文件提取到 20 维的 GLCM 特征。

引用自参考论文  基于二进制文件的 C 语言编译器特征提取及识别

 实现代码

import numpy as np
import cv2
from skimage.feature import graycomatrixdef read_and_reduce_gray_levels(image_path, num_levels=16):image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)image_reduced = (image // (256 // num_levels)).astype(np.uint8)return image_reduceddef compute_glcm(image, distances=[1], angles=[0, np.pi / 4, np.pi / 2, 3 * np.pi / 4]):glcm = graycomatrix(image, distances=distances, angles=angles, levels=16, symmetric=True, normed=True)return glcmdef compute_glcm_features(glcm):features = []num_levels = glcm.shape[0]for i in range(glcm.shape[2]):for j in range(glcm.shape[3]):glcm_matrix = glcm[:, :, i, j]asm = np.sum(glcm_matrix ** 2)contrast = np.sum([[(i - j) ** 2 * glcm_matrix[i, j] for i in range(num_levels)] for j in range(num_levels)])entropy = -np.sum([[(glcm_matrix[i, j] * np.log2(glcm_matrix[i, j] + 1e-10)) for i in range(num_levels)] for j inrange(num_levels)])idm = np.sum([[(glcm_matrix[i, j] / (1 + (i - j) ** 2)) for i in range(num_levels)] for j in range(num_levels)])# Calculate mean and standard deviation for correlationi_indices = np.arange(num_levels)j_indices = np.arange(num_levels)mu_x = np.sum(i_indices * np.sum(glcm_matrix, axis=1))mu_y = np.sum(j_indices * np.sum(glcm_matrix, axis=0))sigma_x = np.sqrt(np.sum((i_indices - mu_x) ** 2 * np.sum(glcm_matrix, axis=1)))sigma_y = np.sqrt(np.sum((j_indices - mu_y) ** 2 * np.sum(glcm_matrix, axis=0)))correlation = 0if sigma_x > 0 and sigma_y > 0:correlation = np.sum([[(i - mu_x) * (j - mu_y) * glcm_matrix[i, j] for i in range(num_levels)] for j inrange(num_levels)]) / (sigma_x * sigma_y)features.extend([asm, contrast, entropy, idm, correlation])return np.array(features)def main(image_path):# 读取并降灰度级image = read_and_reduce_gray_levels(image_path, num_levels=16)# 计算GLCMglcm = compute_glcm(image)# 计算GLCM特征features = compute_glcm_features(glcm)print("GLCM Features:", features)return features# 使用主函数处理图像并提取GLCM特征
glcm_features = main('test2.png')

利用上一篇文章用B2M算法生成的图像进行FLCM特征提取,得到如下数据

LBP特征

LBP(Local Binary Pattern)是一种简单而有效的图像纹理描述方法。

1. 纹理特征的有效捕捉

LBP能够很好地捕捉局部纹理特征。它通过比较每个像素与其邻域像素的灰度值,生成一个二进制模式,然后将这些模式转换为整数值来描述图像的局部纹理特征。这些局部特征可以用于图像的分类和识别。

2. 计算简单且高效

LBP算法计算简单,只涉及灰度值的比较和二进制编码操作,没有复杂的数学运算,因此计算效率高,适合实时应用。对于每个像素点,生成LBP值的过程仅需要比较其与邻域像素的值并进行二进制编码,这使得LBP在处理大规模图像数据时非常高效。

3. 旋转不变性和灰度不变性

LBP具有旋转不变性和灰度不变性。当图像中的物体旋转或光照条件改变时,LBP特征能够保持相对稳定。这是因为LBP只考虑像素之间的相对关系,而不是绝对灰度值,从而使其对图像的旋转和灰度变化具有鲁棒性。

4. 统计特性

LBP特征向量是通过统计每个LBP模式在图像中出现的频率得到的,这种统计特性使得LBP能够捕捉图像的全局纹理信息。在实际应用中,256维的LBP特征向量可以用于构建纹理直方图,这种直方图能够反映图像的整体纹理分布。

实现:

  1. 计算LBP

    • local_binary_pattern函数计算每个像素点的LBP值,P表示邻域像素的数量(默认8),R表示半径(默认1)。
    • 这种方法通过对每个像素点进行局部计算,能够有效捕捉局部纹理特征。
  2. 统计LBP值的频率

    • np.histogram函数统计LBP值在整个图像中出现的频率,并生成256维的特征向量。
    • 这种统计方法能够反映图像的整体纹理分布,有助于图像的分类和识别。
import numpy as np
import cv2
from skimage.feature import local_binary_patterndef compute_lbp_features(image, P=8, R=1):# 计算LBPlbp = local_binary_pattern(image, P, R, method='uniform')# 统计256维向量n_bins = int(lbp.max() + 1)hist, _ = np.histogram(lbp, bins=n_bins, range=(0, n_bins), density=True)return histdef main(image_path):# 读取灰度图像image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)# 计算LBP特征lbp_features = compute_lbp_features(image)print("LBP Features:", lbp_features)return lbp_features# 使用主函数处理图像并提取LBP特征
lbp_features = main('test2.png')

使用的是刚刚同一图像,结果如下

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

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

相关文章

对于创建相关项目时,项目出现红色感叹号,且无jre环境显示,应该怎么解决?

首先,假设你已经下载好了相关你的jre环境,注意:如果你的jre不想用之前用的默认的话,你应该新建一个新的文件路径来存储你的新的jre环境下的项目文件。 先直接new->project->javaproject 点击next: 显示如下:&…

JavaScript表达式语句二

异常处理语句 异常标识一种非中正常得信息,它提示程序在运行过程中发生了意外或错误,然后JavaScript通过一定的方式把它暴露出来,这叫做抛出异常。抛出异常操作表示系统告诉我们当前程序出现了问题,JavaScript使用异常处理语句来…

以一道简单的例题计算灵敏性分析

在例1.1中,全部的变量包括:猪的重量w(磅),从现在到出售猪期间经历的时间t(天),t天内饲养猪的花费C(美元),猪的市场价格p(美元/磅),售出生猪所获得的收益R(美元),我们最终获得的净收益P(美元).这里还有一些其他的有关量,如猪的初始重量(200磅)…

Python 全栈体系【四阶】(五十四)

第五章 深度学习 十二、光学字符识别(OCR) 3. 文字识别技术 3.1 CRNNCTC(2015) CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络,是DCNN和RNN的组合,专门用于识别图像中的序列式对象。…

掌握常用的域信息收集的方法和域控制器攻击的方法(渗透课程)

域信息收集 【实验目的】 通过利用PsExec命令远程连接内网主机,分别收集查询域用户信息和域控制器相关信息,了解并掌握如何收集域内的信息命令。 【知识点】 域信息收集 【实验原理】 NET命令是功能强大的以命令行方式执行的工具。它包含了管理网络…

Nginx企业级负载均衡:技术详解系列(11)—— 实战一机多站部署技巧

你好,我是赵兴晨,97年文科程序员。 工作中你是否遇到过这种情况:公司业务拓展,新增一个域名,但服务器资源有限,只能跟原有的网站共用同一台Nginx服务器。 也就是说两个网站的域名都指向同一台Nginx服务器…

过滤器Filter

目录 概述 Filter快速入门 概述 概念:Filter过滤器,是JavaWeb三大组件(Servlet,Filter,Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实一些特殊的功能。 过滤器一般完成一些通用的操作,比如…

MySQL(二)基本SQL语句以及基本函数应用

1、基本SQL语句 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 - 函数应用在sql语句中 -- 临时表 select now() from dual;-- 数…

活动预告|与 Zilliz 共探亚马逊云科技中国峰会

亚马逊云科技中国峰会是由全球云计算的开创者和引领者亚马逊云科技举办的一年一度的科技盛会。 参与者将有机会了解云计算推动行业发展的新趋势与解决方案、生成式 AI 等前沿技术的落地实践,通过大量成功案例解析,获得灵感及经验来解决实际问题&#xff…

民国漫画杂志《时代漫画》第26期.PDF

时代漫画26.PDF: https://url03.ctfile.com/f/1779803-1248635183-9832d2?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

AGV与智能仓储的应用案例

背景介绍 该企业的智能工厂专注于高端家用电器的生产与研发,包括电子坐便盖、电子坐便器、吸尘器、洗碗机等,覆盖8条关键产线。面对日益增长的市场需求和生产节奏的加快,传统的物流方式已无法满足高效、精准的生产要求。为此,企业…

电流采样(分流器与霍尔传感器)

在对于电信号采集的设计中,其中对电流信号的采集是非常常见的,根据电流信号的属性,如信号大小、信号周期等因素,以及采样的需求指标不一样,往往需要选择不同的采样方式进行采样。 下面主要介绍分流器和霍尔元件采样电…

【贪心算法指针】C++ 解决子数组 / 子序列的相关问题(最大数、数组和减半的最小操作数、连续/递增序列)

文章目录 1. 前言1.1 贪心算法介绍 2. 算法题2.1_将数组和减半的最少操作次数2.2_最大数2.3_最长递增子序列2.4_递增的三元子序列2.5_最长连续递增序列2.6_数组中的最长连续子序列2.7_在字符串中找出连续最长的数字串 1. 前言 1.1 贪心算法介绍 贪心算法(Greedy A…

一文搞透常见的Python编码陷阱(上)(分析+案例)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 一、别忘了冒号 1. if 语句 2. while 语句 3. for 语句 4. 函数定义 5. 类定义 6. try/except 语句 …

RTDETR结合CVPR2024最新图像增强算法!让你的模型无惧风雨【含端到端推理脚本】

如何有效地探索雨痕的多尺度表示对于图像去雨是很重要的。与现有的基于Transformer的方法相比,这些方法主要依赖于单一尺度的雨痕外观,我们开发了一个端到端的多尺度Transformer,利用各种尺度中潜在有用的特征来促进高质量的图像重建。为了更好地探索空间变化的雨痕的常见退…

满帮集团 Eureka 和 ZooKeeper 的上云实践

作者:胡安祥 满帮集团,作为“互联网物流”的平台型企业,一端承接托运人运货需求,另一端对接货车司机,提升货运物流效率。2021 年美股上市,成为数字货运平台上市第一股。根据公司年报,2021 年&a…

网络协议——FTP(简介、搭建FTP服务端)

一、简介 1、什么是FTP? FTP(File Transfer Protocol,文件传输协议) TCP/IP 协议组的协议之一。常用20(数据)、21(命令)端口作为通讯端口。(22为SSH端口)F…

就业班 第三阶段(ELK) 2401--5.22 day3 filebeat+elk云部署

kafka集群 Windterm同步输入,多台机子可以同时输入同步输入 启动kafka需要启动两个 第一个 [rootkafka1 ~]# cd /usr/local/kafka_2.11-2.0.0/ [rootkafka1 ~]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &第二个 [rootkafka1 ~]#…

20232810 肖峰 2023-2024-2 《网络攻防实践》实验十一

一、实践内容 (1)web浏览器渗透攻击 任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。 实验步骤: ①选择使用Metasploit中的MS06-014渗透攻击模块 ②选择PAYLOAD为任…

Linux 36.3@Jetson Orin Nano之系统安装

Linux 36.3Jetson Orin Nano之系统安装 1. 源由2. 命令行烧录Step 1:下载Linux 36.3安装程序Step 2:下载Linux 36.3根文件系统Step 3:解压Linux 36.3安装程序Step 4:解压Linux 36.3根文件系统Step 5:安装应用程序Step …