直方圖繪制與直方圖均衡化實現

一,直方圖的繪制

1.直方圖的概念:

在圖像處理中,經常用到直方圖,如顏色直方圖、灰度直方圖等。
圖像的灰度直方圖就描述了圖像中灰度分布情況,能夠很直觀的展示出圖像中各個灰度級所
占的多少。
圖像的灰度直方圖是灰度級的函數,描述的是圖像中具有該灰度級的像素的個數:其中,橫
坐標是灰度級,縱坐標是該灰度級出現的頻率。
(簡潔來說:就是描述圖像中各個灰度級的個數)
在這里插入圖片描述
直方圖反映了圖像中的灰度分布規律。它描述每個灰度級具有的像素個數,但不包含
這些像素在圖像中的位置信息。
圖像直方圖不關心像素所處的空間位置,因此不受圖像旋轉和平移變化的影響,可以作為圖像的特征。

2.直方圖的應用:

在這里插入圖片描述
直方圖的應用主要體現在來表現圖像是否過亮或過暗,而解決的辦法就是直方圖均值化。

3.代碼實現:

  1. 頭文件:
import cv2
import numpy as np
from matplotlib import pyplot as plt
  1. 灰度圖像直方圖繪制:
    1. plt接口實現:
      # 獲取灰度圖像
      img = cv2.imread("lenna.png", 1)
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      #cv2.imshow("image_gray", gray)# 灰度圖像的直方圖,方法一
      plt.figure()
      plt.hist(gray.ravel(), 256)
      plt.show()
      
    2. opencv接口實現:
      '''
      equalizeHist—直方圖均衡化
      函數原型: equalizeHist(src, dst=None)
      src:圖像矩陣(單通道圖像)
      dst:默認即可
      '''# 灰度圖像的直方圖, 方法二
      hist = cv2.calcHist([gray],[0],None,[256],[0,256])
      plt.figure()#新建一個圖像
      plt.title("Grayscale Histogram")
      plt.xlabel("Bins")#X軸標簽
      plt.ylabel("# of Pixels")#Y軸標簽
      plt.plot(hist)
      plt.xlim([0,256])#設置x坐標軸范圍
      plt.show()
      
  2. 彩色圖像直方圖繪制:
#彩色圖像直方圖image = cv2.imread("lenna.png")
cv2.imshow("Original",image)
#cv2.waitKey(0)chans = cv2.split(image)    #把圖像維度切割
colors = ("b","g","r")
plt.figure()
plt.title("Flattened Color Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")for (chan,color) in zip(chans,colors):hist = cv2.calcHist([chan],[0],None,[256],[0,256])plt.plot(hist,color = color)plt.xlim([0,256])
plt.show()

4.實現結果:

在這里插入圖片描述

二,直方圖均衡化

1.直方圖均衡化的概念:

直方圖均衡化是將原圖像的直方圖通過變換函數變為均勻的直方圖,然后按均勻直方圖修改原
圖像,從而獲得一幅灰度分布均勻的新圖像。
直方圖均衡化就是用一定的算法使直方圖大致平和的方法
直方圖均衡化的作用是圖像增強
注意:能適當提升圖像的對比度
在這里插入圖片描述

2.直方圖均衡化的思想:

為了將原圖像的亮度范圍進行擴展,需要一個映射函數,將原圖像的像素值均衡映射到新直
方圖中,這個映射函數有兩個條件:

  1. 為了不打亂原有的順序,映射后亮、暗的大小關系不能改變,
  2. 映射后必須在原有的范圍內,比如(0-255)

實現步驟:

  1. 依次掃描原始灰度圖像的每一個像素,計算出圖像的灰度直方圖H
  2. 計算灰度直方圖的累加直方圖
  3. 根據累加直方圖和直方圖均衡化原理得到輸入與輸出之間的映射關系。
  4. 最后根據映射關系得到結果:dst(x,y) = H’(src(x,y))進行圖像變換

映射關系的推導:(在實際應用中采用接口調用即可)

  1. 對于輸入圖像的任意一個像素p, p∈[0,255], 總能在輸出圖像里有對應的像素q, q∈[0,255] 使得下面等式成立(輸入和輸出的像素總量相等):
    在這里插入圖片描述
  2. 其中,輸出圖像每個灰度級的個數:
    在這里插入圖片描述
    H和W代表圖像的長和寬,HW就是指圖像中存在的像素點個數*
  3. 代入累加直方圖公式:
    在這里插入圖片描述
    (q+1)是指從0到q有q+1個值
    最后的結果就是紅色框的公式!
    不過這里要注意:在運算后的q可能是負數,如果要手動實現該算法,這里要處理一下

3.直方圖均衡化的實現舉例:

首先要我們要明確:替換前和替換后的像素值的映射關系如下:
在這里插入圖片描述
最開始,我們需要均衡化的圖像中的像素值如下:
在這里插入圖片描述
很明顯看出來,這個圖像是5*5的圖像,像素值最高是9,最低是0。
接下來,我們建立一個表格:
在這里插入圖片描述
pix值:是指圖像中包含所有的像素值:該圖像是從0-9。
Ni值:是該pix像素值存在的個數,在目標圖像中,0像素有3個,Ni值就為3。
Pi值:是該像素值的概率。在這里插入圖片描述
sunmPi值就是之前Pi的總和,也可以看作sumPi=Pi+sumP(i-1),比如sumP0=P0=0.12,sumP1=sumP0+P1
最后的結果就是sumPi×255-1,最后將這個結果四舍五入后的數值替換原像素數值。

4.代碼實現:

  1. 頭文件
import cv2
import numpy as np
from matplotlib import pyplot as plt
  1. 灰度圖像直方圖均衡化
'''
equalizeHist—直方圖均衡化
函數原型: equalizeHist(src, dst=None)
src:圖像矩陣(單通道圖像)
dst:默認即可
'''# 獲取灰度圖像
img = cv2.imread("lenna.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    #轉換成灰色圖像
#cv2.imshow("image_gray", gray)# 灰度圖像直方圖均衡化
dst = cv2.equalizeHist(gray)# 直方圖
hist = cv2.calcHist([dst],[0],None,[256],[0,256])plt.figure()
plt.hist(dst.ravel(), 256)
plt.show()cv2.imshow("Histogram Equalization", np.hstack([gray, dst]))
cv2.waitKey(0)
  1. 彩色圖像直方圖均衡化
# 彩色圖像直方圖均衡化
img = cv2.imread("lenna.png", 1)
cv2.imshow("src", img)# 彩色圖像均衡化,需要分解通道 對每一個通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一個通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst_rgb", result)cv2.waitKey(0)

5.實現結果:

在這里插入圖片描述
在這里插入圖片描述
結果對比很明顯發現在直方圖中像素值變的均勻很多,而且明顯均衡化的圖像的對比度更高。

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

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

相關文章

eclipse警告與報錯的修復

1.關閉所有eclipse校驗 windows->perference->validation disable all 2.Access restriction: The constructor BASE64Decoder() is not API (restriction on required library C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar) 在builde path 移除jre,再…

時間序列因果關系_分析具有因果關系的時間序列干預:貨幣波動

時間序列因果關系When examining a time series, it is quite common to have an intervention influence that series at a particular point.在檢查時間序列時,在特定時間點對該序列產生干預影響是很常見的。 Some examples of this could be:例如: …

微生物 研究_微生物監測如何工作,為何如此重要

微生物 研究Background背景 While a New York Subway station is bustling with swarms of businessmen, students, artists, and millions of other city-goers every day, its floors, railings, stairways, toilets, walls, kiosks, and benches are teeming with non-huma…

Linux shell 腳本SDK 打包實踐, 收集assets和apk, 上傳FTP

2019獨角獸企業重金招聘Python工程師標準>>> git config user.name "jenkins" git config user.email "jenkinsgerrit.XXX.net" cp $JENKINS_HOME/maven.properties $WORKSPACE cp $JENKINS_HOME/maven.properties $WORKSPACE/app cp $JENKINS_…

opencv:卷積涉及的基礎概念,Sobel邊緣檢測代碼實現及卷積填充模式

具體參考我的另一篇文章: opencv:卷積涉及的基礎概念,Sobel邊緣檢測代碼實現及Same(相同)填充與Vaild(有效)填充 這里是對這一篇文章的補充! 卷積—三種填充模式 橙色部分為image, 藍色部分為…

怎么查這個文件在linux下的哪個目錄

因為要裝pl/sql所以要查找tnsnames.ora文件。。看看怎么查這個文件在linux下的哪個目錄 find / -name tnsnames.ora 查到: /opt/app/oracle/product/10.2/network/admin/tnsnames.ora/opt/app/oracle/product/10.2/network/admin/samples/tnsnames.ora 還可以用loca…

無法從套接字中獲取更多數據_數據科學中應引起更多關注的一個組成部分

無法從套接字中獲取更多數據介紹 (Introduction) Data science, machine learning, artificial intelligence, those terms are all over the news. They get everyone excited with the promises of automation, new savings or higher earnings, new features, markets or te…

web數據交互_通過體育運動使用定制的交互式Web應用程序數據科學探索任何數據...

web數據交互Most good data projects start with the analyst doing something to get a feel for the data that they are dealing with.大多數好的數據項目都是從分析師開始做一些事情,以便對他們正在處理的數據有所了解。 They might hack together a Jupyter n…

C# .net 對圖片操作

using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;public class ImageHelper{/// <summary>/// 獲取圖片中的各幀/// </summary>/// <param name"pPath">圖片路徑</param>/// <param name"pSaveP…

數據類型之Integer與int

數據類型之Integer與int Java入門 基本數據類型 眾所周知&#xff0c;Java是面向對象的語言&#xff0c;一切皆對象。但是為了兼容人類根深蒂固的數據處理習慣&#xff0c;加快常規數據的處理速度&#xff0c;提供了9種基本數據類型&#xff0c;他們都不具備對象的特性&#xf…

PCA(主成分分析)思想及實現

PCA的概念&#xff1a; PCA是用來實現特征提取的。 特征提取的主要目的是為了排除信息量小的特征&#xff0c;減少計算量等。 簡單來說&#xff1a; 當數據含有多個特征的時候&#xff0c;選取主要的特征&#xff0c;排除次要特征或者不重要的特征。 比如說&#xff1a;我們要…

【安富萊二代示波器教程】第8章 示波器設計—測量功能

第8章 示波器設計—測量功能 二代示波器測量功能實現比較簡單&#xff0c;使用2D函數繪制即可。不過也專門開辟一個章節&#xff0c;為大家做一個簡單的說明&#xff0c;方便理解。 8.1 水平測量功能 8.2 垂直測量功能 8.3 總結 8.1 水平測量功能 水平測量方…

深度學習數據更換背景_開始學習數據科學的最佳方法是了解其背景

深度學習數據更換背景數據科學教育 (DATA SCIENCE EDUCATION) 目錄 (Table of Contents) The Importance of Context Knowledge 情境知識的重要性 (Optional) Research Supporting Context-Based Learning (可選)研究支持基于上下文的學習 The Context of Data Science 數據科學…

熊貓數據集_用熊貓掌握數據聚合

熊貓數據集Data aggregation is the process of gathering data and expressing it in a summary form. This typically corresponds to summary statistics for numerical and categorical variables in a data set. In this post we will discuss how to aggregate data usin…

IOS CALayer的屬性和使用

一、CALayer的常用屬性 1、propertyCGPoint position; 圖層中心點的位置&#xff0c;類似與UIView的center&#xff1b;用來設置CALayer在父層中的位置&#xff1b;以父層的左上角為原點&#xff08;0&#xff0c;0&#xff09;&#xff1b; 2、 property CGPoint anchorPoint…

GridView詳解

快速預覽&#xff1a;GridView無代碼分頁排序GridView選中&#xff0c;編輯&#xff0c;取消&#xff0c;刪除GridView正反雙向排序GridView和下拉菜單DropDownList結合GridView和CheckBox結合鼠標移到GridView某一行時改變該行的背景色方法一鼠標移到GridView某一行時改變該行…

訪問模型參數,初始化模型參數,共享模型參數方法

一. 訪問模型參數 對于使用Sequential類構造的神經網絡&#xff0c;我們可以通過方括號[]來訪問網絡的任一層。回憶一下上一節中提到的Sequential類與Block類的繼承關系。 對于Sequential實例中含模型參數的層&#xff0c;我們可以通過Block類的params屬性來訪問該層包含的所有…

QZEZ第一屆“飯吉圓”杯程序設計競賽

終于到了飯吉圓杯的開賽&#xff0c;這是EZ我參與的歷史上第一場ACM賽制的題目然而沒有罰時 不過題目很好&#xff0c;舉辦地也很成功&#xff0c;為法老點贊&#xff01;&#xff01;&#xff01; 這次和翰爺&#xff0c;吳駿達 dalao&#xff0c;陳樂揚dalao組的隊&#xff0…

談談數據分析 caoz_讓我們談談開放數據…

談談數據分析 caozAccording to the International Open Data Charter(1), it defines open data as those digital data that are made available with the technical and legal characteristics necessary so that they can be freely used, reused and redistributed by any…

數據創造價值_展示數據并創造價值

數據創造價值To create the maximum value, urgency, and leverage in a data partnership, you must present the data available for sale or partnership in a clear and comprehensive way. Partnerships are based upon the concept that you are offering value for valu…