日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

直方图绘制与直方图均衡化实现

發(fā)布時(shí)間:2023/11/29 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直方图绘制与直方图均衡化实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,直方圖的繪制

1.直方圖的概念:

在圖像處理中,經(jīng)常用到直方圖,如顏色直方圖、灰度直方圖等。
圖像的灰度直方圖就描述了圖像中灰度分布情況,能夠很直觀的展示出圖像中各個(gè)灰度級(jí)所
占的多少。
圖像的灰度直方圖是灰度級(jí)的函數(shù),描述的是圖像中具有該灰度級(jí)的像素的個(gè)數(shù):其中,橫
坐標(biāo)是灰度級(jí),縱坐標(biāo)是該灰度級(jí)出現(xiàn)的頻率。
(簡(jiǎn)潔來說:就是描述圖像中各個(gè)灰度級(jí)的個(gè)數(shù))

直方圖反映了圖像中的灰度分布規(guī)律。它描述每個(gè)灰度級(jí)具有的像素個(gè)數(shù),但不包含
這些像素在圖像中的位置信息。
圖像直方圖不關(guān)心像素所處的空間位置,因此不受圖像旋轉(zhuǎn)和平移變化的影響,可以作為圖像的特征。

2.直方圖的應(yīng)用:


直方圖的應(yīng)用主要體現(xiàn)在來表現(xiàn)圖像是否過亮或過暗,而解決的辦法就是直方圖均值化。

3.代碼實(shí)現(xiàn):

  • 頭文件:
  • import cv2 import numpy as np from matplotlib import pyplot as plt
  • 灰度圖像直方圖繪制:
  • plt接口實(shí)現(xiàn):# 獲取灰度圖像 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()
  • opencv接口實(shí)現(xiàn):''' equalizeHist—直方圖均衡化 函數(shù)原型: equalizeHist(src, dst=None) src:圖像矩陣(單通道圖像) dst:默認(rèn)即可 '''# 灰度圖像的直方圖, 方法二 hist = cv2.calcHist([gray],[0],None,[256],[0,256]) plt.figure()#新建一個(gè)圖像 plt.title("Grayscale Histogram") plt.xlabel("Bins")#X軸標(biāo)簽 plt.ylabel("# of Pixels")#Y軸標(biāo)簽 plt.plot(hist) plt.xlim([0,256])#設(shè)置x坐標(biāo)軸范圍 plt.show()
  • 彩色圖像直方圖繪制:
  • #彩色圖像直方圖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.實(shí)現(xiàn)結(jié)果:

    二,直方圖均衡化

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

    直方圖均衡化是將原圖像的直方圖通過變換函數(shù)變?yōu)榫鶆虻闹狈綀D,然后按均勻直方圖修改原
    圖像,從而獲得一幅灰度分布均勻的新圖像。
    直方圖均衡化就是用一定的算法使直方圖大致平和的方法
    直方圖均衡化的作用是圖像增強(qiáng)
    注意:能適當(dāng)提升圖像的對(duì)比度

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

    為了將原圖像的亮度范圍進(jìn)行擴(kuò)展,需要一個(gè)映射函數(shù),將原圖像的像素值均衡映射到新直
    方圖中,這個(gè)映射函數(shù)有兩個(gè)條件:

  • 為了不打亂原有的順序,映射后亮、暗的大小關(guān)系不能改變,
  • 映射后必須在原有的范圍內(nèi),比如(0-255)
  • 實(shí)現(xiàn)步驟:

  • 依次掃描原始灰度圖像的每一個(gè)像素,計(jì)算出圖像的灰度直方圖H
  • 計(jì)算灰度直方圖的累加直方圖
  • 根據(jù)累加直方圖和直方圖均衡化原理得到輸入與輸出之間的映射關(guān)系。
  • 最后根據(jù)映射關(guān)系得到結(jié)果:dst(x,y) = H’(src(x,y))進(jìn)行圖像變換
  • 映射關(guān)系的推導(dǎo):(在實(shí)際應(yīng)用中采用接口調(diào)用即可)

  • 對(duì)于輸入圖像的任意一個(gè)像素p, p∈[0,255], 總能在輸出圖像里有對(duì)應(yīng)的像素q, q∈[0,255] 使得下面等式成立(輸入和輸出的像素總量相等):
  • 其中,輸出圖像每個(gè)灰度級(jí)的個(gè)數(shù):

    H和W代表圖像的長(zhǎng)和寬,HW就是指圖像中存在的像素點(diǎn)個(gè)數(shù)*
  • 代入累加直方圖公式:

    (q+1)是指從0到q有q+1個(gè)值
    最后的結(jié)果就是紅色框的公式!
    不過這里要注意:在運(yùn)算后的q可能是負(fù)數(shù),如果要手動(dòng)實(shí)現(xiàn)該算法,這里要處理一下
  • 3.直方圖均衡化的實(shí)現(xiàn)舉例:

    首先要我們要明確:替換前和替換后的像素值的映射關(guān)系如下:

    最開始,我們需要均衡化的圖像中的像素值如下:

    很明顯看出來,這個(gè)圖像是5*5的圖像,像素值最高是9,最低是0。
    接下來,我們建立一個(gè)表格:

    pix值:是指圖像中包含所有的像素值:該圖像是從0-9。
    Ni值:是該pix像素值存在的個(gè)數(shù),在目標(biāo)圖像中,0像素有3個(gè),Ni值就為3。
    Pi值:是該像素值的概率。
    sunmPi值就是之前Pi的總和,也可以看作sumPi=Pi+sumP(i-1),比如sumP0=P0=0.12,sumP1=sumP0+P1
    最后的結(jié)果就是sumPi×255-1,最后將這個(gè)結(jié)果四舍五入后的數(shù)值替換原像素?cái)?shù)值。

    4.代碼實(shí)現(xiàn):

  • 頭文件
  • import cv2 import numpy as np from matplotlib import pyplot as plt
  • 灰度圖像直方圖均衡化
  • ''' equalizeHist—直方圖均衡化 函數(shù)原型: equalizeHist(src, dst=None) src:圖像矩陣(單通道圖像) dst:默認(rèn)即可 '''# 獲取灰度圖像 img = cv2.imread("lenna.png", 1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉(zhuǎn)換成灰色圖像 #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)
  • 彩色圖像直方圖均衡化
  • # 彩色圖像直方圖均衡化 img = cv2.imread("lenna.png", 1) cv2.imshow("src", img)# 彩色圖像均衡化,需要分解通道 對(duì)每一個(gè)通道均衡化 (b, g, r) = cv2.split(img) bH = cv2.equalizeHist(b) gH = cv2.equalizeHist(g) rH = cv2.equalizeHist(r) # 合并每一個(gè)通道 result = cv2.merge((bH, gH, rH)) cv2.imshow("dst_rgb", result)cv2.waitKey(0)

    5.實(shí)現(xiàn)結(jié)果:



    結(jié)果對(duì)比很明顯發(fā)現(xiàn)在直方圖中像素值變的均勻很多,而且明顯均衡化的圖像的對(duì)比度更高。

    總結(jié)

    以上是生活随笔為你收集整理的直方图绘制与直方图均衡化实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。