OpenCV 灰度直方图及熵的计算

news2024/11/26 0:35:41

目录

一、概述

1.1灰度直方图

1.1.1灰度直方图的原理

1.1.2灰度直方图的应用

1.1.3直方图的评判标准

1.2熵

二、代码实现

三、实现效果

3.1直方图显示

3.2 熵的计算


一、概述

        OpenCV中的灰度直方图是一个关键的工具,用于分析和理解图像的灰度分布情况。直方图的熵是图像分析中的一个重要概念,它用于量化图像中信息的复杂性和不确定性。熵的概念源自信息论,表示系统的不确定性或混乱程度。对于图像直方图而言,熵的高低反映了图像灰度分布的复杂性和信息量。

1.1灰度直方图

        灰度直方图是图像中每个像素灰度值出现的次数或频数的统计结果。它是图像空间域内像素值分布的图形表示,用于描述图像中每种灰度级像素的个数或频率。在灰度直方图中,横坐标表示灰度级(通常范围从0到255,对于8位灰度图像),纵坐标表示该灰度级出现的频率或像素数量。

1.1.1灰度直方图的原理

1.灰度级统计:
        - 灰度直方图通过统计图像中每个灰度级出现的次数来构建。对于一幅8位灰度图像,其灰度级范围为0到255,共256个灰度级。
        - 通过遍历图像的每一个像素,并记录下每个像素的灰度值,然后统计每个灰度值出现的次数,即可得到灰度直方图。
2.反映灰度分布:
        - 灰度直方图直观地反映了图像中灰度的分布情况。如果图像的直方图集中在低灰度值区域,则说明图像比较暗;如果直方图集中在高灰度值区域,则说明图像比较亮。
        - 通过观察灰度直方图,可以了解图像的亮度、对比度以及灰度分布的均匀性等特性。
3.不反映像素位置:
        - 需要注意的是,灰度直方图只反映了图像中灰度值出现的频率,而并未反映这些灰度值像素在图像中的具体位置。也就是说,灰度直方图丢失了像素的空间位置信息。
4.唯一性与非唯一性:
        - 任何一幅图像都可以唯一地对应一幅灰度直方图。但是,不同的图像可能具有相同的灰度直方图。这是因为灰度直方图只关注灰度值的频率分布,而不考虑像素的空间位置。
5.区域直方图:
        - 如果将图像划分为多个区域,并分别计算这些区域的灰度直方图,然后将这些直方图相加,其和将等于原图像的灰度直方图。这一性质有助于对图像进行局部分析。

1.1.2灰度直方图的应用

1.图像分析:
        - 灰度直方图可用于分析图像的对比度、亮度和灰度分布等特性。例如,通过观察直方图的分布范围可以判断图像的亮度;通过直方图的峰值可以判断图像中的主要灰度级。
2.图像增强:
        - 灰度直方图可用于图像增强处理,如直方图均衡化。直方图均衡化的目的是提高图像的对比度,通过拉伸图像的直方图使其分布更加均匀,从而改善图像的视觉效果。
3.图像分割:
        - 灰度直方图还可用于图像分割任务中。例如,可以利用灰度直方图的阈值化方法进行图像的二值化处理;或者通过直方图反投影来查找图像中具有特定灰度值的区域。
        综上所述,OpenCV中的灰度直方图是图像分析、处理和增强中不可或缺的工具之一。通过灰度直方图,我们可以直观地了解图像的灰度分布情况,进而对图像进行更深入的分析和处理。

1.1.3直方图的评判标准

        评判灰度直方图的标准可以帮助我们了解图像的对比度、亮度、动态范围等特性。以下是一些常见的评判标准:
1.对比度:
        - 高对比度图像:灰度直方图会显示在整个灰度范围内的分布,具有较宽的分布区域。
        - 低对比度图像:灰度直方图会集中在较小的灰度范围内,具有较窄的分布区域。
2.亮度:
        - 亮图像:灰度直方图主要集中在高灰度值(右侧)。
        - 暗图像:灰度直方图主要集中在低灰度值(左侧)。
3.动态范围:
        - 宽动态范围:灰度直方图分布在0到255的全灰度范围内。
        - 窄动态范围:灰度直方图分布在较小的灰度范围内,可能只有一部分灰度级别。
4.峰值:
        - 单峰:表示图像中有一个主要亮度区域。
        - 多峰:表示图像中有多个不同的亮度区域,例如图像包含多个不同的物体。
5.均匀性:
        - 均匀分布:灰度直方图较为平坦,表示图像中各个灰度值的像素数量相对均匀。
        - 非均匀分布:灰度直方图具有显著的高峰和低谷,表示图像中某些灰度值的像素数量较多或较少。
6.图像质量:
        - 高质量图像:灰度直方图在整个灰度范围内均匀分布,没有明显的噪声或失真。
        - 低质量图像:灰度直方图可能集中在某些特定区域,显示出噪声、失真或压缩伪影。

1.2熵


        在OpenCV中,直方图的熵是图像分析中的一个重要概念,它用于量化图像中信息的复杂性和不确定性。熵的概念源自信息论,表示系统的不确定性或混乱程度。对于图像直方图而言,熵的高低反映了图像灰度分布的复杂性和信息量。
1.熵值较高:
        - 当图像的直方图熵值较高时,意味着图像中灰度级的分布较为均匀或离散,即图像包含较多的细节和复杂度。这种情况下,图像中的像素值变化较大,信息内容丰富,不易被压缩或简化。
        - 较高的熵值通常与图像的高清晰度和高信息量相关联,表明图像在视觉上可能更加“繁忙”或具有更多的细节。
2.熵值较低:
        - 相反,当图像的直方图熵值较低时,表明图像中灰度级的分布较为集中或单一,即图像包含的细节和复杂度较少。这种情况下,图像中的像素值变化较小,信息内容相对简单。
        - 较低的熵值可能意味着图像较为简单、模糊或缺乏细节,视觉上可能显得较为单调或“空旷”。


二、代码实现

import cv2
import numpy as np
from matplotlib import pyplot as plt


def calculate_histogram(image, point, radius=10):
    # 确定ROI的范围
    x, y = point
    roi = image[max(0, y - radius):min(image.shape[0], y + radius + 1),
          max(0, x - radius):min(image.shape[1], x + radius + 1)]

    # 计算灰度直方图
    histogram = cv2.calcHist([roi], [0], None, [256], [0, 256])
    return histogram


def calculate_entropy(histogram):
    # 归一化直方图
    histogram = histogram / histogram.sum()

    # 计算熵
    entropy = -np.sum(histogram * np.log2(histogram + 1e-9))  # 加1e-9以避免对0取对数
    return entropy


# 读取图像
image_path = "Gray.tiff"  # 确保图像路径正确
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)  # 灰度模式读取

# 指定点
point = (435,671)

# 计算指定点周围半径为10的区域的灰度直方图
histogram = calculate_histogram(image, point,20)

# 计算直方图的熵(均匀性)
entropy = calculate_entropy(histogram)



# 绘制灰度直方图
plt.figure()
plt.title(f"Grayscale Histogram around point {point}")
plt.xlabel("Grayscale value")
plt.ylabel("Frequency")
plt.plot(histogram)
plt.xlim([0, 256])
plt.show()

print(f"Entropy (Uniformity) of the histogram: {entropy}")

# 指定点
point2 = (541,1163)

# 计算指定点周围半径为10的区域的灰度直方图
histogram2 = calculate_histogram(image, point2,20)

# 计算直方图的熵(均匀性)
entropy2 = calculate_entropy(histogram2)

plt.figure()
plt.title(f"Grayscale Histogram around point {point2}")
plt.xlabel("Grayscale value")
plt.ylabel("Frequency")
plt.plot(histogram2)
plt.xlim([0, 256])
plt.show()

print(f"Entropy (Uniformity) of the histogram: {entropy2}")

三、实现效果

3.1直方图显示

两个点位的显示效果

3.2 熵的计算

point = (435,671):Entropy (Uniformity) of the histogram: 0.9858561754226685
point2 = (541,1163):Entropy (Uniformity) of the histogram: 1.9892882108688354

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

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

相关文章

electron教程(二)控制应用程序的事件生命周期

1.will-finish-launching 当应用程序完成基础的启动的时候被触发,在 Windows 和 Linux 中, will-finish-launching 事件与 ready 事件是相同的; 在 macOS 中,这个事件相当于 NSApplication 中的 applicationWillFinishLaunching 提示。 app.on(will-fi…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【生成密钥(C/C++)】

生成密钥(C/C) 以生成ECC密钥为例,生成随机密钥。具体的场景介绍及支持的算法规格。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复…

教师商调函流程详解

作为一名教师,您是否曾面临过工作调动的困惑?当您决定迈向新的教育环境,是否清楚整个商调函流程的每一个细节?今天,就让我们一起来探讨这一过程,确保您能够顺利地完成工作调动。 首先需要确定新调入的学校已…

如何摆脱反爬虫机制?

在网站设计时,为了保证服务器的稳定运行,防止非法数据访问,通常会引入反爬虫机制。一般来说,网站的反爬虫机制包括以下几种: 1. CAPTCHA:网站可能会向用户显示CAPTCHA,要求他们在访问网站或执行…

在Ubuntu上配置PPPoE服务:从安装到自动化启动的全指南

在Ubuntu上配置PPPoE服务:从安装到自动化启动的全指南 PPPoE(点对点协议以太网)是一种广泛用于DSL和光纤宽带连接的协议。在本篇技术博客中,我们将详细介绍如何在Ubuntu系统上配置PPPoE服务,包括安装、配置、启动以及…

《简历宝典》02 - 如果你是HR,你会优先打开哪份简历?

现在的求职环境不必多说,其实我们大家都还是很清楚的。所以,在这个环境下,写一份优秀的简历,目的与作用也不必多说。那么,这一小节呢,我们先从简历这份文档的文档名开始说起。 目录 1 你觉得HR们刷简历的时…

沙龙回顾|MongoDB如何充当企业开发加速器?

数据不仅是企业发展转型的驱动力,也是开发者最棘手的问题。前日,MongoDB携手阿里云、NineData在杭州成功举办了“数据驱动,敏捷前行——MongoDB企业开发加速器”技术沙龙。此次活动吸引了来自各行各业的专业人员,共同探讨MongoDB的…

娱乐圈惊爆已婚男星刘端端深夜幽会

【娱乐圈惊爆!已婚男星刘端端深夜幽会,竟是《庆余年》二皇子“戏外风云”】在这个信息爆炸的时代,娱乐圈的每一次风吹草动都能瞬间点燃公众的热情。今日,知名娱乐博主刘大锤的一则预告如同投入湖中的巨石,激起了层层涟…

香橙派AIpro测评:yolo8+usb鱼眼摄像头的Camera图像获取及识别

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比,同时还可以兼容ubuntu、安卓等多种操作系统,今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV8s算法的部署并使用一个外接的鱼眼USB摄像头…

护航端侧大模型平稳健康发展,百度大模型内容安全Lite版正式发布

6月28日,WAVE SUMMIT深度学习开发者大会 2024 “智变应用、码动产业”平行论坛在北京召开。与会,百度大模型内容安全Lite版正式发布,可面向低算力和超低算力的终端大模型提供离线场景下的一站式安全解决方案,为各类终端大模型平稳…

社区活动|FlowUs知识库的发展|先进技术的落地应用|下一代生产力工具你用了吗

在当今快速发展的数字化时代,技术的进步不断推动着工作方式和知识管理的革新。FlowUs,作为一款前沿的知识管理和协作平台,正站在这一变革的浪潮之巅,引领着智能工作的新潮流。 智能化的智能学习引导工具 FlowUs不仅仅是一个工具&…

springboot大学生实习管理系统-计算机毕业设计源码97434

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 图2-4 添加信息流程图 2.2.5 修改信息流程 2.2.6 删除信息流…

Linux高并发服务器开发(十三)Web服务器开发

文章目录 1 使用的知识点2 http请求get 和 post的区别 3 整体功能介绍4 基于epoll的web服务器开发流程5 服务器代码6 libevent版本的本地web服务器 1 使用的知识点 2 http请求 get 和 post的区别 http协议请求报文格式: 1 请求行 GET /test.txt HTTP/1.1 2 请求行 健值对 3 空…

djangoGD高校信管专业就业信息管理系统-计算机毕业设计源码59343

djangoGD高校信管专业就业信息管理系统 摘 要 随着高校信管专业的快速发展,学生就业问题日益受到广泛关注。为了更好地服务学生,提高就业率,许多高校开始引入信息化手段来管理学生就业信息。然而,传统的就业信息管理方式存在很多问…

华夏女中师生深入同仁堂,感悟中医药文化之精髓

华夏女中师生深入同仁堂,感悟中医药文化之精髓 2024年7月4日下午,北京师范大学实验华夏女子中学15名学生在薛艳老师的带领下来到北京同仁堂中医医院,开展职业影随活动。何泽扬院长对她们的到来表示欢迎。随后,在“冯建春全国名老中…

SolidWorks教育版:促进师生互动的桥梁

在当今教育领域,技术的融合正改变着传统的教学方式。SolidWorks教育版作为一款专为教育机构和学生设计的三维设计软件,不仅以其强大的功能和易用的界面赢得了广泛赞誉,更在促进师生互动方面发挥了重要作用。本文将探讨SolidWorks教育版如何成…

python通过COM Interface控制CANoe

python通过COM Interface控制CANoe 介绍打开示例工程python代码示例介绍 通过python可以控制CANoe的启动和停止等其他操作,在做高阶的自动化项目时可以用到。 打开示例工程 python代码示例 # --------------------------------------------------------------------------…

c++习题03-分卡片

目录 一,题目 二,思路 三,代码 一,题目 二,思路 在做题的时候一定要认真审题,抓住关键的点和条件,才能够更高效的做对题目。 上面的题目有以下关键点(关键条件&#xff0…

模板初阶和string容器

目录 1.模板 函数模板 函数模板的调用规则: 类模板 容器与迭代器 string的简单介绍 iterator(迭代器) begin()与end() rbegin()和rend() Capacity(容量) shrink…

解决@Autowired 注入service 到 static接口方法的问题

1 对类进行 Component 定义 2 定义service及 static service Component public class OperationalJudgment {private static MemberService memberService;Resourceprivate MemberService service;PostConstructpublic void init() {memberServicethis.service;}3 static方法中…