确定图像的熵和各向异性 Halcon entropy_gray 解析

1、图像的熵

1.1 介绍

图像熵(image entropy)是图像"繁忙"程度的估计值,它表示为图像灰度级集合的比特平均数,单位比特/像素,也描述了图像信源的平均信息量。熵指的是体系的混乱程度,对于图像而言,对焦良好的图像的熵大于没有清晰对焦的图像,因此可以用熵作为一种对焦评价标准。熵越大,图像越清晰。

图像熵反映了图像灰度直方图分布的离散程度。当图像细节清晰时,图像的灰度直方图分布较广,像素间灰度值对比较强,图像熵也较大;当图像模糊时,图像的灰度直方图分布较窄且集中,像素间的灰度值相差小,图像熵较小。

1.2 特征

  1. 对于一副灰度级为256的图像,其最大图像熵约为5.54比特/像素。
  2. 图像熵越大,表明图像的灰度级越多,直方图分布越均匀,相应的图像质量越好,细节信息越丰富。
  3. 图像熵是对图像灰度信息的整体描述,孤立的像素点几乎不会对图像熵造成影响。

1.3 应用

图像熵在图像处理、计算机视觉等领域有广泛应用。例如,在图像压缩中,可以利用图像熵来评估图像的信息量,从而选择合适的压缩算法和参数。在图像分割中,图像熵可以作为分割阈值的选取依据,帮助实现更准确的图像分割。此外,图像熵还可以用于图像质量评价、图像增强、图像去噪等方面。

2、各向异性

2.1 介绍

各向异性(anisotropy)是描述物质或系统在不同方向上具有不同性质的特性。在图像处理中,各向异性通常指的是图像在不同方向上的纹理、亮度、颜色等特征存在差异。

2.2 特点

各向异性是图像的一种重要特性,它反映了图像在不同方向上的信息差异。这种差异可以是由于图像的拍摄角度、光照条件、物体表面纹理等因素造成的。在图像处理中,利用各向异性可以帮助我们更好地理解和分析图像,提取有用的信息。

2.3 应用

各向异性在图像处理中有多种应用。例如,在图像增强中,可以利用各向异性来增强图像在某些方向上的特征,提高图像的视觉效果。在图像分割中,各向异性可以作为分割算法的一个重要依据,帮助实现更准确的分割结果。此外,各向异性还可以用于图像去噪、图像修复、图像识别等方面。

在地震图像处理中,各向异性扩散滤波方法被广泛应用于断层识别。这种方法利用地震图像中各向异性的特性,通过构建结构张量矩阵来判断扩散方向,从而实现保边去噪和断层识别。这种方法在提高地震资料信噪比的同时,保护了断层等小尺度边缘信息,为后续的地震断层精细解释等提供了基础资料。

3、Halcon entropy_gray

`entropy_gray` 是 Halcon 库中的一个算子,用于确定图像的熵和各向异性。

  1. 名称与功能:
  • 名称:`entropy_gray`

  • 功能:确定图像的熵和各向异性 。

  1. 用法:
  • 算子的用法为:`entropy_gray(Regions, Image : : : Entropy, Anisotropy)` 。
  1. 描述:
  • `entropy_gray` 创建输入图像中灰度值的相对频率直方图,并根据这些频率计算来自区域的每个区域的熵和各向异性系数 。

  • 熵和各向异性系数的计算公式如下:

  • 熵(Entropy):根据灰度值频率的直方图计算得出。

  • 各向异性系数(Anisotropy):测量灰度值分布的对称性 。

  1. 参数:
  • `Regions`:要确定特征的区域,输入类型为 region(-array) 。

  • `Image`:灰度值图像,输入类型为 singlechannelimage 。

  • `Entropy`:输出信息内容(熵)的灰度值,输出类型为 real(-array) 。

  • `Anisotropy`:测量灰度值分布的对称性,输出类型为 real(-array) 。

  1. 注意:
  • `entropy_gray` 算子仅考虑给定的区域,并忽略输入图像 `Image` 的任何先前设置的域 。
  1. 并行性:
  • 多线程类型:可重入(与非独占算子并行运行)。

  • 多线程范围:全局(可以从任何线程调用)。

  • 在元组级别自动并行化处理 。

  1. 复杂度:
  • 如果 F 是该区域的面积,则运行时复杂度为 O(F + 255) 。
  1. 结果:
  • 如果输入了具有定义的灰度值的图像并且参数是正确的,则算子 `entropy_gray` 返回值 2(`H_MSG_TRUE`)。空输入情况下的行为(没有可用的输入图像)可以通过 `set_system('no_object_result',<Result>:)` 设置,空区域的行为可以通过 `set_system('empty_region_result',<Result>:)` 设置。如有必要,会引发异常 。
  1. 替代算子:
  • `select_gray` 。
  1. 参考其他算子:
  • `entropy_image`, `gray_histo`, `gray_histo_abs`, `fuzzy_entropy`, `fuzzy_perimeter` 。

4、具体计算

cpp 复制代码
read_image (Image, 'fabrik')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_display (Image)
dev_set_draw ('margin')
* Create two rectangle parallel to the coordinate axes
gen_rectangle1 (Rectangle1, 351, 289, 407, 340)
gen_rectangle1 (Rectangle2, 78, 178, 144, 244)
entropy_gray (Rectangle1, Image, Entropy1, Anisotropy1)
entropy_gray (Rectangle2, Image, Entropy2, Anisotropy2)

区域1的熵和各向异性为:

区域2的熵和各向异性为:

从图像可以看出熵的大小可以用来区分不同图像内容。

5、应用 Halcon例程:crystal.hdev

cpp 复制代码
* crystal.hdev: extraction of hexagonally shaped crystals via local thresholding and region post-processing

* 关闭当前所有打开的窗口,防止干扰
dev_close_window ()

* 关闭窗口的自动更新功能,以提高处理速度
dev_update_window ('off')

* ****
* step: acquire image
* 加载图像文件到内存中,准备进行处理
* 文件名为'crystal'
* ****
read_image (Image, 'crystal')

* 获取图像的尺寸,用于后续窗口的调整
get_image_size (Image, Width, Height)

* 根据图像的尺寸打开一个新窗口,以适应图像的大小
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)

* 设置窗口中显示的字体样式和大小
set_display_font (WindowID, 12, 'mono', 'true', 'false')

* 设置绘制模式为边缘绘制,以便更清晰地显示图像边缘
dev_set_draw ('margin')

* 设置绘制线条的宽度
dev_set_line_width (2)

* 在窗口中显示原始图像
dev_display (Image)

* 显示继续消息,提示用户下一步操作
disp_continue_message (WindowID, 'black', 'true')

* 暂停程序执行,等待用户输入继续
stop ()

* ****
* step: segment image
* 对图像进行分割处理,以提取出感兴趣的区域
* ****

* -> 使用局部阈值法进行分割
* 计算图像的均值图像,用于后续的阈值处理
mean_image (Image, ImageMean, 21, 21)

* 使用动态阈值法根据均值图像对原始图像进行分割
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')

* -> 提取连通区域
* 将分割后的区域中连通的部分提取出来
connection (RegionDynThresh, ConnectedRegions)

* 在窗口中显示连通区域
dev_display (ConnectedRegions)

* 显示继续消息,提示用户下一步操作
disp_continue_message (WindowID, 'black', 'true')

* 暂停程序执行,等待用户输入继续
stop ()

* ****
* step: process regions
* 对提取出的区域进行进一步的处理,以筛选出符合要求的晶体区域
* ****

* 将连通区域转换为凸包区域,以便进行形状分析
shape_trans (ConnectedRegions, ConvexRegions, 'convex')

* 根据面积筛选出较大的区域,这些区域可能是晶体
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)

* 根据灰度值的熵筛选出符合条件的区域,熵值反映了图像区域的灰度分布均匀性
* 这一步进一步筛选出可能的晶体区域
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)

* 在窗口中同时显示原始图像和筛选出的晶体区域
dev_display (Image)
dev_display (Crystals)
相关推荐
去码头整点薯条ing19 分钟前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
zSD55rt5a27 分钟前
方差在扩散模型保护中的作用
人工智能·harmonyos
人生百态,人生如梦1 小时前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
用户652238438111 小时前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa99883341 小时前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能
wuhanzhanhui1 小时前
当AI遇见储能!2026武汉国际数字能源产业与新型电力及储能技术展览会
人工智能·能源
赶紧写完去睡觉1 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀1 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
Tangyuewei1 小时前
给 AI 套上缰绳:Harness Engineering 是什么
人工智能
AI棒棒牛1 小时前
第11讲 | 目标检测任务:边界框、IoU、类别与置信度
人工智能·yolo·目标检测·yolo26