基礎篇05-圖像直方圖操作

本節將簡要介紹Halcon中有關圖像直方圖操作的算子,重點介紹直方圖獲取和顯示兩類算子,以及直方圖均衡化處理算子。

目錄

1. 引言

2. 獲取并顯示直方圖

2.1 獲取(灰度)直方圖

(1)?gray_histo算子

(2) gray_histo_abs算子

(3) gray_histo_range算子

(4)?histo_2dim

2.2 顯示直方圖

(1)?gen_region_histo算子

(2)?get_grayval_range算子

3. 直方圖操作

3.1 直方圖均衡

3.2 計算直方圖的統計特性

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)* 顯示原始圖像
      dev_display(GrayImage)
      dev_set_window(0)
      set_display_font(16, 'mono', 'true', 'false')
      disp_message(0, 'Original Image', 'window', 12, 12, 'black', 'true')
      dev_open_window(0, 512, 512, 512, 'black', WindowHandle1)
      dev_set_window(WindowHandle1)
      disp_message(WindowHandle1, 'Original Histogram', 'window', 12, 12, 'black', 'true')* 計算并顯示原始圖像的直方圖
      gray_histo(GrayImage, GrayImage, AbsoluteHisto, RelativeHisto)
      dev_display(GrayImage)
      dev_set_window(WindowHandle1)
      disp_histogram(AbsoluteHisto, 512, 512, 1, 1, 'absolute', 'true')* 進行直方圖均衡化
      equ_histo_image(GrayImage, EquImage)* 顯示均衡化后的圖像
      dev_open_window(512, 0, 512, 512, 'black', WindowHandle2)
      dev_set_window(WindowHandle2)
      dev_display(EquImage)
      disp_message(WindowHandle2, 'Equalized Image', 'window', 12, 12, 'black', 'true')* 計算并顯示均衡化后的直方圖
      gray_histo(EquImage, EquImage, AbsoluteHistoEqu, RelativeHistoEqu)
      dev_open_window(512, 512, 512, 512, 'black', WindowHandle3)
      dev_set_window(WindowHandle3)
      disp_message(WindowHandle3, 'Equalized Histogram', 'window', 12, 12, 'black', 'true')
      disp_histogram(AbsoluteHistoEqu, 512, 512, 1, 1, 'absolute', 'true')

      注意事項

      • 輸入圖像:equ_histo_image 適用于灰度圖像。如果輸入是彩色圖像,需要先轉換為灰度圖像。

      3.2 計算直方圖的統計特性

      除了直方圖均衡化處理之外,在計算視覺特征時,還需要計算一些基于直方圖的統計特性。Halcon中并沒有提供計算這些統計特征量的算子。

      附錄:算子列表

      1. gray_histo:計算直方圖
      2. gray_histo_abs:計算灰度值分布
      3. equ_histo_image:直方圖均衡化
      4. histo_2dim:計算量通道灰度圖像的直方圖
      5. gen_region_histo:將直方圖轉換為一個區域,用于展示直方圖

      (初稿完成,最新更新2025-02-08)

      本專欄將介紹基于Halcon的各種傳統經典的數字圖像處理技術,所介紹內容基本與Gonzalez的教材基本保持一致。作為學習和實踐DIP技術的入門教程。

      感謝大家的支持和瀏覽,本專欄將持續更新(每周至少更新1篇),每篇的篇幅控制在5000字左右,這樣大家閱讀起來也比較輕松。估計2025年上半年完成全部內容,歡迎加收藏。但由于到了假期,更新的速度不會很快。

      在專欄全部完成之前,所有內容將一直免費。

      本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
      如若轉載,請注明出處:http://www.pswp.cn/web/69238.shtml
      繁體地址,請注明出處:http://hk.pswp.cn/web/69238.shtml
      英文地址,請注明出處:http://en.pswp.cn/web/69238.shtml

      如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

      相關文章

      MySQL | Navicat安裝教程

      MySQL | Navicat安裝教程 🪄個人博客:https://vite.xingji.fun 簡介 Navicat 是一款流行的 圖形化數據庫管理工具,由 PremiumSoft 公司開發,支持多種主流數據庫系統(如 MySQL、MariaDB、SQL Server、Oracle、Postgre…

      硬件實現I2C案例(寄存器實現)

      一、需求分析 二、硬件電路設計 本次案例需求與前面軟件模擬案例一致,這里不再贅述,不清楚可參見下面文章:軟件模擬I2C案例(寄存器實現)-CSDN博客 值得注意的是,前面是軟件模擬I2C,所以并沒有…

      基于SpringBoot養老院平臺系統功能實現六

      一、前言介紹: 1.1 項目摘要 隨著全球人口老齡化的不斷加劇,養老服務需求日益增長。特別是在中國,隨著經濟的快速發展和人民生活水平的提高,老年人口數量不斷增加,對養老服務的質量和效率提出了更高的要求。傳統的養…

      matlab simulink 汽車四分之一模型輪胎帶阻尼

      1、內容簡介 略 matlab simulink121-汽車四分之一模型輪胎帶阻尼 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

      w196Spring Boot高校教師科研管理系統設計與實現

      🙊作者簡介:多年一線開發工作經驗,原創團隊,分享技術代碼幫助學生學習,獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取,記得注明來意哦~🌹贈送計算機畢業設計600個選題excel文…

      【鴻蒙開發】第二十四章 AI - Core Speech Kit(基礎語音服務)

      目錄 1 簡介 1.1 場景介紹 1.2 約束與限制 2 文本轉語音 2.1 場景介紹 2.2 約束與限制 2.3 開發步驟 2.4 設置播報策略 2.4.1 設置單詞播報方式 2.4.2 設置數字播報策略 2.4.3 插入靜音停頓 2.4.4 指定漢字發音 2.5 開發實例 3 語音識別 3.1 場景介紹 3.2 約束…

      數據分析:企業數字化轉型的金鑰匙

      引言:數字化浪潮下的數據金礦 在數字化浪潮席卷全球的背景下,有研究表明,只有不到30%的企業能夠充分利用手中掌握的數據,這是否讓人深思?數據已然成為企業最為寶貴的資產之一。然而,企業是否真正準備好從數…

      Starrocks 對比 Clickhouse

      極速查詢的單表查詢 StarRocks 在極速查詢方面上做了很多,下面著重介紹四點: 1)向量化執行:StarRocks 實現了從存儲層到查詢層的全面向量化執行,這是 StarRocks 速度優勢的基礎。向量化執行充分發揮了 CPU 的處理能力…

      Vue 入門到實戰 八

      第8章 組合API與響應性 目錄 8.1 響應性 8.1.1 什么是響應性 8.1.2 響應性原理 8.2 為什么使用組合API 8.3 setup組件選項 8.3.1 setup函數的參數 8.3.2 setup函數的返回值 8.3.3 使用ref創建響應式引用 8.3.4 setup內部調用生命周期鉤子函數 8.4 提供/注入 8.4.1 …

      Java使用aspose實現pdf轉word

      Java使用aspose實現pdf轉word 一、下載aspose-pdf-21.6.jar包【下載地址】&#xff0c;存放目錄結構如圖&#xff1b;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…

      使用Node.js搭配express框架快速構建后端業務接口模塊Demo

      使用Node.js搭配express框架快速構建后端業務接口模塊Demo&#xff01;實際開發中&#xff0c;有很多項目&#xff0c;其實都是可以使用node.js來完成對接mysql數據庫的&#xff0c;express確實使用起來非常簡單&#xff0c;入手快&#xff0c;效率非常高。下面是一個簡單的案例…

      Python----Python高級(并發編程:協程Coroutines,事件循環,Task對象,協程間通信,協程同步,將協程分布到線程池/進程池中)

      一、協程 1.1、協程 協程&#xff0c;Coroutines&#xff0c;也叫作纖程(Fiber) 協程&#xff0c;全稱是“協同程序”&#xff0c;用來實現任務協作。是一種在線程中&#xff0c;比線程更加輕量級的存在&#xff0c;由程序員自己寫程序來管理。 當出現IO阻塞時&#xff0c;…

      Unity 加載OSGB(webgl直接加載,無需轉換格式!)

      Unity webgl加載傾斜攝影數據 前言效果圖后續不足 前言 Unity加載傾斜攝影數據&#xff0c;有很多的插件方便好用&#xff0c;但是發布到網頁端均失敗&#xff0c;因為webgl 的限制&#xff0c;IO讀取失效。 前不久發現一個開源項目: UnityOSGB-main 通過兩種方式在 Unity 中…

      【Block總結】PSA,金字塔擠壓注意力,解決傳統注意力機制在捕獲多尺度特征時的局限性

      論文信息 標題: EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network論文鏈接: arXivGitHub鏈接: https://github.com/murufeng/EPSANet 創新點 EPSANet提出了一種新穎的金字塔擠壓注意力&#xff08;PSA&#xff09;模塊&#xff0c;旨…

      【重新認識C語言----結構體篇】

      目錄 -----------------------------------------begin------------------------------------- 引言 1. 結構體的基本概念 1.1 為什么需要結構體&#xff1f; 1.2 結構體的定義 2. 結構體變量的聲明與初始化 2.1 聲明結構體變量 2.2 初始化結構體變量 3. 結構體成員的訪…

      如何在Vscode中接入Deepseek

      一、獲取Deepseek APIKEY 首先&#xff0c;登錄Deepseek官網的開放平臺&#xff1a;DeepSeek 選擇API開放平臺&#xff0c;然后登錄Deepseek后臺。 點擊左側菜單欄“API keys”&#xff0c;并創建API key。 需要注意的是&#xff0c;生成API key復制保存到本地&#xff0c;丟失…

      電腦開機提示按f1原因分析及終極解決方法來了

      經常有網友問到一個問題&#xff0c;我電腦開機后提示按f1怎么解決&#xff1f;不管理是臺式電腦&#xff0c;還是筆記本&#xff0c;都有可能會遇到開機需要按F1&#xff0c;才能進入系統的問題&#xff0c;引起這個問題的原因比較多&#xff0c;今天小編在這里給大家列舉了比…

      AI協助探索AI新構型自動化創新的技術實現

      一、AI自進化架構的核心范式 1. 元代碼生成與模塊化重構 - 代碼級自編程&#xff1a;基于神經架構搜索的強化學習框架&#xff0c;AI可通過生成元代碼模板&#xff08;框架的抽象層定義、神經元結點-網絡拓撲態的編碼抽象定義&#xff09;自動組合功能模塊。例如&#xff0…

      RAID獨立硬盤冗余陣列

      目錄 一、RAID基本功能 二、RAID常見級別 三、實現方式 1、軟件磁盤陣列 2、硬件磁盤陣列 四、熱備盤 RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一種通過將多個硬盤組合成一個邏輯單元來提升存儲性能、冗余性或兩者兼具的技術。 一、RAID基本…

      【高級篇 / IPv6】(7.2) ? 04. 在60E上配置ADSL撥號寬帶上網(IPv4) ? FortiGate 防火墻

      【簡介】除了單位用戶以外&#xff0c;大部分個人用戶目前使用的仍然是30E、50E、60E系列防火墻&#xff0c;固件無法達到目前最高版本7.6&#xff0c;這里以最常用的60E為例&#xff0c;演示固件版本7.2下實現ADSL撥號寬帶的IPv6上網。由于內容比較多&#xff0c;文章分上、下…