基础篇05-直方图操作

本节将简要介绍Halcon中有关图像直方图操作的算子,重点介绍直方图获取和显示两类算子,以及直方图均衡化处理算子。

目录

1. 引言

2. 获取并显示直方图

2.1 获取(灰度)直方图

(1) gray_histogram

(2) gray_histo_abs

(3) gray_histo_range

(4) histo_2dim

2.2 显示直方图

(1) create_histo2d

(2) gen_region_histo

(3) get_grayval_range

3. 直方图操作

3.1 直方图均衡


1. 引言

图像直方图Histogram)是反映图像像素分布的统计表,记为ℎ(𝑘),横坐标代表像素值的取值区间,纵坐标代表每一像素值在图像中的像素总数(对应普通直方图)或者所占的百分比(对应归一化直方图)。

归一化直方图Uniform Histogram)是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的发生的概率,记为𝑝(𝑘),它可以ℎ(𝑘)用得到。

累计分布直方图Cumulitive Distribution Histogram),简称累计直方图,代表图像组成成分在灰度级的累计概率分布情况,每一个概率值代表小于等于此灰度值的概率,记为𝑐(𝑘),它也可以用ℎ(𝑘)得到。

以下是三种直方图的定义:

h(k)=n_k,\quad p(k)=\frac{n_k}{N},\quad c=\frac{1}{N} \sum_{i=0}^{k}n_i,\quad k=0,1,\cdots,L-1

式中,𝑘是图像灰度级的取值,n_k表示取值为𝑘的像素点数目,N是图像内像素点的总数。

下图是多幅图像及其对应的直方图情况,不难看出,灰度直方图反映了图像中的灰度分布规律,直观地表现了图像中各灰度级的占比,很好地体现出图像的亮度和对比度信息:

  • 灰度图分布居中说明亮度正常,偏左说明亮度较暗,偏右表明亮度较高;
  • 狭窄陡峭表明对比度降低,宽泛平缓表明对比度较高。

(从左至右分别是较暗、较亮、较黯淡,以及高对比度图像及其直方图示例)

2. 获取并显示直方图

2.1 获取(灰度)直方图

(1) gray_histo算子

在Halcon中使用gray_histo算子获取图像的直方图。该算子计算图像的灰度值分布,并返回直方图的频数。根据参数设置不同,可以获取普通直方图和归一化直方图

算子声明

gray_histo(Image : : : AbsoluteHisto, RelativeHisto)

参数说明

  • Image:输入图像。
  • AbsoluteHisto:绝对直方图,表示每个灰度值的像素数量。
  • RelativeHisto:归一化直方图,表示每个灰度值的像素比例(概率)。

注意事项

  • 如果输入图像是彩色的,需要先转换为灰度图像。
  • 如果要显示直方图,需要使用gen_region_histo算子将直方图转换为图像的函数,方便可视化。

(2) gray_histo_abs算子

除了计算全局直方图信息外,Halcon还提供了gray_histo_abs算子用于获取图像局部区域的直方图信息,非常方便。在此列出该算子的声明和参数说明。

算子声明

gray_histo_abs(Region, Image : Histogram : : )

参数说明

  1. Region: 输入区域,指定要计算直方图的图像区域。
  2. Image: 输入图像,灰度图像。
  3. Histogram: 输出直方图,返回一个包含灰度值分布的数组。

(3) gray_histo_range算子

Halcon使用gray_histo_range算子用于计算图像中指定区域内灰度值在某个范围内的直方图信息。与 gray_histo_abs 不同,gray_histo_range 允许用户指定一个灰度值范围,并仅计算该范围内的像素分布。

算子声明

gray_histo_range(Region, Image : Histogram : MinGray, MaxGray, NumBins : )

参数说明

  1. Region: 输入区域,指定要计算直方图的图像区域。
  2. Image: 输入图像,灰度图像。
  3. Histogram: 输出直方图,返回一个数组,表示指定灰度范围内的像素分布。
  4. MinGray: 输入参数,指定灰度范围的最小值。
  5. MaxGray: 输入参数,指定灰度范围的最大值。
  6. NumBins: 输入参数,指定直方图的区间数(即将灰度范围分成多少个区间)。

(4) histo_2dim

Halcon使用histo_2dim算子计算双通道灰度值图像的直方图,即构建二维直方图。

算子声明

histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )

参数说明

  • Regions:输入区域,在此区域内计算直方图。这些区域通常是从图像中分割出来的一部分或多部分,即感兴趣区域(ROI)。
  • ImageCol:多通道图像的第一个通道,其数据将被用于计算直方图的第一维。
  • ImageRow:多通道图像的第二个通道,其数据将被用于计算直方图的第二维。
  • Histo2Dim:计算得出的二维直方图。输出是一个整数类型的图像,其中的每个像素值代表了对应灰度级组合出现的频率。

使用说明:

  • histo_2dim算子计算的是输入区域Regions内,由ImageCol和ImageRow两个通道构成的二维特征空间的直方图。
  • 在这个二维特征空间中,ImageCol的灰度值被解释为行索引,ImageRow的灰度值被解释为列索引。
  • 输出图像Histo2Dim中的每个点P(g1,g2)的灰度值表示(g1,g2)灰度值组合的频率,其中g1表示行索引,g2表示列索引。

注意事项

  1. 在使用histo_2dim算子时,需要确保输入图像的两个通道具有相同的尺寸和数据类型。

2.2 显示直方图

(1) gen_region_histo

    Halcon使用gen_region_histo算子用于根据直方图生成一个区域(Region)。该算子将直方图的灰度值分布转换为一个区域,通常用于可视化直方图或基于直方图的分析。

    算子声明

    gen_region_histo(Histogram : Region : Row, Column, Scale : )

    参数说明

    • Histogram: 输入直方图,通常是一个数组,表示灰度值的分布。
    • Region: 输出区域,生成的区域表示直方图的形状。
    • Row: 输入参数,指定生成区域的起始行坐标。
    • Column: 输入参数,指定生成区域的起始列坐标。
    • Scale: 输入参数,指定直方图的缩放比例。

    使用方法

    1. 计算直方图: 使用 gray_histo 或 gray_histo_range 等算子计算图像的直方图。
    2. 设置起始坐标: 指定生成区域的起始位置(Row 和 Column)。
    3. 设置缩放比例: 指定直方图的缩放比例(Scale),用于调整生成区域的大小。
    4. 生成区域: 使用 gen_region_histo 将直方图转换为区域。
    5. 可视化或进一步处理: 对生成的区域进行显示或进一步分析。

    实例:

    * 读取图像
    read_image(Image, 'example_image.png')* 转换为灰度图像
    rgb1_to_gray(Image, GrayImage)* 计算灰度直方图
    gray_histo(GrayImage, GrayImage, Histogram)* 定义直方图的起始位置和缩放因子
    Row := 100
    Column := 100
    Scale := 1.0* 生成基于直方图的区域
    gen_region_histo(RegionHisto, Histogram, Row, Column, Scale)* 显示生成的区域
    dev_display(GrayImage)
    dev_display(RegionHisto)

    注意事项

    • 直方图数据:确保输入的直方图数据是有效的数组。如果直方图数据为空或无效,生成的区域可能为空。
    • 起始坐标:确保 Row 和 Column 在图像范围内,否则生成的区域可能不可见。
    • 缩放比例:缩放比例 Scale 影响生成区域的大小。较大的缩放比例会生成较大的区域。

    (2) get_grayval_range

    在显示直方图信息时,Halcon使用了get_grayval_range算子用于获取图像中灰度值的范围(最小值和最大值)。这个算子对于分析图像的灰度分布非常有用,尤其是在直方图计算和图像增强等操作中。

    算子声明

    get_grayval_range(Image : : : MinGray, MaxGray)

    参数说明

    • Image:输入图像(可以是灰度图像或多通道图像)。
    • MinGray:图像中灰度值的最小值。
    • MaxGray:图像中灰度值的最大值。

      3. 直方图操作

      在Halcon中提供的直方图操作主要是两种,直方图均衡和直方图规定化。两者都能实现特定的图像增强目的,但又有区别。

      3.1 直方图均衡

      直方图均衡化Histogram Equalization,简称直方图均衡,HE)是一种简单有效的图像增强技术。根据直方图的形态可以判断图像的质量,通过调控直方图的形态可以改善图像的质量。

      直方图均衡的基本思想是对图像中占比大的灰度级进行展宽,而对占比小的灰度级进行压缩,使图像的直方图分布较为均匀,扩大灰度值差别的动态范围,从而增强图像整体的对比度。

      Halcon提供了equ_histo_image算子来实现直方图均衡化。

      算子声明

      equ_histo_image(Image : ImageEquHisto : : )

      参数说明

      • Image(输入):输入图像(通常是灰度图像)。
      • ImageEquHisto(输出):直方图均衡化后的图像。

      以下是一个完整的Halcon代码示例,展示如何实现直方图均衡化。

      * 读取图像
      read_image(Image, 'example_image.jpg')* 将图像转换为灰度图像(如果图像是彩色的)
      rgb1_to_gray(Image, GrayImage)* 对图像进行直方图均衡化
      equ_histo_image(GrayImage, ImageEquHisto)* 设置显示窗口
      dev_open_window(0, 0, 512, 512, 'black', WindowHandle1)
      dev_set_window(WindowHandle1)
      dev_display(GrayImage)
      dev_open_window(512, 0, 512, 512, 'black', WindowHandle2)
      dev_set_window(WindowHandle2)
      dev_display(ImageEquHisto)* 显示消息
      disp_message(WindowHandle1, 'Original Image', 'window', 12, 12, 'black', 'true')
      disp_message(WindowHandle2, 'Histogram Equalized Image', 'window', 12, 12, 'black', 'true')

      注意事项

      • 输入图像:equ_histo_image 适用于灰度图像。如果输入是彩色图像,需要先转换为灰度图像。

      3.2 计算直方图的统计特性

      直方图均衡化Histogram Equalization,简称直方图均衡,HE)是一种简单有效的图像增强技术。根据直方图的形态可以判断图像的质量,通过调控直方图的形态可以改善图像的质量。

      以下函数可能不存在

      histo_to_mean    根据直方图计算灰度值的均值。
      histo_to_entropy    根据直方图计算灰度值的熵(用于衡量图像的信息量)。
      histo_to_relative_entropy    计算两个直方图之间的相对熵(Kullback-Leibler 散度)。
      histo_to_histogramm_cumulative    计算累积直方图。
      histo_to_histogramm_normalized    计算归一化直方图(将直方图值缩放到 [0,1] 范围)。
      histo_to_histogramm_smooth    对直方图进行平滑处理,减少噪声。
      histo_to_histogramm_equalize    对直方图进行均衡化处理,增强图像对比度。
      histo_to_histogramm_match    将直方图与参考直方图进行匹配(直方图规定化)。
      histo_to_histogramm_compare    比较两个直方图的相似性(如欧氏距离、卡方距离等)。
      histo_to_histogramm_peak    查找直方图中的峰值(用于检测主要灰度值)。
      histo_to_histogramm_valley    查找直方图中的谷值(用于分割不同灰度区域)。
      histo_to_histogramm_threshold    根据直方图计算阈值(用于图像分割)。
      histo_to_histogramm_otsu    使用 Otsu 方法根据直方图计算最佳阈值(用于图像分割)。
      histo_to_histogramm_max    查找直方图中的最大值及其对应的灰度值。
      histo_to_histogramm_min    查找直方图中的最小值及其对应的灰度值。
      histo_to_histogramm_mean    计算直方图的均值(灰度值的加权平均)。
      histo_to_histogramm_stddev    计算直方图的标准差(灰度值的离散程度)。
      histo_to_histogramm_median    计算直方图的中位数(灰度值的中间值)。

      附录:算子列表

      1. gray_histo:计算直方图
      2. gray_histo_abs:计算灰度值分布
      3. equ_histo_image:直方图均衡化
      4. histo_2dim:计算量通道灰度图像的直方图
      5. gen_region_histo:将直方图转换为一个区域,用于展示直方图

      (未完待续,最新更新2025-02-06)

      本专栏将介绍基于Halcon的各种传统经典的数字图像处理技术,所介绍内容基本与Gonzalez的教材基本保持一致。作为学习和实践DIP技术的入门教程。

      感谢大家的支持和浏览,本专栏将持续更新(每周至少更新1篇),每篇的篇幅控制在5000字左右,这样大家阅读起来也比较轻松。估计2025年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。

      在专栏全部完成之前,所有内容将一直免费。

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

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

      相关文章

      Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)

      其实出现该问题就是监听或者服务没有配好。 G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMINlistener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\d…

      LabVIEW2025中文版软件安装包、工具包、安装教程下载

      下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述2条许可协议”,点击下一步 3、点击下一步,安装NI Packa…

      在本地顺利的部署一个al模型从零开始 windows

      引言 (踩的坑,省流引言的内容没有有使模型跑起来) 最近想在本地部署一个deepseek模型,就在网上搞了3 4天终于是能够部署下来了,在部署的时候也是成功的踩了无数的坑,比如我先问al如何在本地部署一个语言模…

      基于ansible部署elk集群

      ansible部署 ELK部署 ELK常见架构 (1)ElasticsearchLogstashKibana:这种架构是最常见的一种,也是最简单的一种架构,这种架构通过Logstash收集日志,运用Elasticsearch分析日志,最后通过Kibana中…

      Linux学习笔记16---高精度延时实验

      延时函数是很常用的 API 函数,在前面的实验中我们使用循环来实现延时函数,但是使用循环来实现的延时函数不准确,误差会很大。虽然使用到延时函数的地方精度要求都不会很严格( 要求严格的话就使用硬件定时器了 ) ,但是延时函数肯定…

      Linux系统 环境变量

      环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量,本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”,我们会更详细讲解;理解环境变量的全局…

      旋转变压器工作及解调原理

      旋转变压器 旋转变压器是一种精密的位置、速度检测装置,广泛应用在伺服控制、机器人、机械工具、汽车、电力等领域。但是,旋转变压器在使用时并不能直接提供角度或位置信息,需要特殊的激励信号和解调、计算措施,才能将旋转变压器…

      【漫话机器学习系列】076.合页损失函数(Hinge Loss)

      Hinge Loss损失函数 Hinge Loss(合页损失),也叫做合页损失函数,广泛用于支持向量机(SVM)等分类模型的训练过程中。它主要用于二分类问题,尤其是支持向量机中的优化目标函数。 定义与公式 对于…

      基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper

      KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…

      Go 语言 | 入门 | 快速入门

      快速入门 1.第一份代码 先检查自己是否有正确下载 Go,如果没有直接去 Go 安装 进行安装。 # 检查是否有 Go $ go version go version go1.23.4 linux/amd64然后根据 Go 的入门教程 开始进行学习。 # 初始化 Go 项目 $ mkdir example && cd example # Go…

      凝思60重置密码

      凝思系统重置密码 - 赛博狗尾草 - 博客园 问题描述 凝思系统进入单用户模式,在此模式下,用户可以访问修复错误配置的文件。也可以在此模式下安装显卡驱动,解决和已加载驱动的冲突问题。 适用范围 linx-6.0.60 linx-6.0.80 linx-6.0.100…

      HTML 复习

      文章目录 路径问题标题标签段落标签换行标签列表标签<ol> 有序列表<ul> 无序标签标签嵌套 超链接标签多媒体标签<img> 图片标签<audio> 音频标签<video> 视频标签 表格标签<colspan> 跨行<rowspan> 跨列组合使用 表单标签基本表单标…

      hot100(8)

      71.10. 正则表达式匹配 - 力扣&#xff08;LeetCode&#xff09; 动态规划 题解&#xff1a;10. 正则表达式匹配题解 - 力扣&#xff08;LeetCode&#xff09; 72.5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 动态规划 1.dp数组及下标含义 dp[i][j] : 下标i到…

      114,【6】攻防世界 web wzsc_文件上传

      进入靶场 传个桌面有的 直接空白了 我们 访问一下上传的东西 /index 没显示用于解析的.htaccess和.user.ini 文件&#xff0c;还两个都不显示 但上传的时候bp查看状态码是200&#xff0c;意味着上传成功了 别的博主说这是服务器在短时间内就立刻将其删掉了&#xff0c;需…

      禅道社区版项目管理软件部署(记录篇)

      系统要求&#xff08;这里推荐使用docker容器化方式&#xff09;安装前的准备Docker快速安装最后通过查看地址验证是否部署成功开始界面化安装配置 禅道&#xff08;ZenTao&#xff09;是一款国产开源的项目管理软件&#xff0c;专注于敏捷开发流程&#xff0c;支持 Scrum 和 K…

      B站自研的第二代视频连麦系统(上)

      导读 本系列文章将从客户端、服务器以及音视频编码优化三个层面&#xff0c;介绍如何基于WebRTC构建视频连麦系统。希望通过这一系列的讲解&#xff0c;帮助开发者更全面地了解 WebRTC 的核心技术与实践应用。 背景 在文章《B站在实时音视频技术领域的探索与实践》中&#xff…

      Selenium记录RPA初阶 - 基本输入元件

      防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…

      Ubutun本地部署DeepSeek R1

      目录 一、本地部署&终端命令行交互 二、网页端交互 三、参考链接 一、本地部署&终端命令行交互 Ollama 是一个轻量级的大语言模型管理工具&#xff0c;支持 Windows / Mac / Linux。 Ollama官网&#xff1a;Ollama # 下载安装ollama curl -fsSL https://ollama.co…

      NacosRce到docker逃逸实战

      NacosRce到docker逃逸实战 1、Nacos Derby Rce打入内存马 这个漏洞的原理大家应该都知道&#xff0c; 2.3.2 < Nacos < 2.4.0版本默认derby接口未授权访问&#xff0c;攻击者可利用未授权访问执行SQL语句加载构造恶意的JAR包导致出现远程代码执行漏洞。 在日常的漏洞挖…

      保姆级教程Docker部署KRaft模式的Kafka官方镜像

      目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 四、部署可视化工具 1、创建挂载目录 2、运行Kafka-ui容器 3、Compose运行Kafka-ui容器 4、查看Kafka-ui运行状态 …