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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 简单图像处理(8) 直方图均衡化

發(fā)布時間:2024/4/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 简单图像处理(8) 直方图均衡化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直方圖均衡化就是把一已知灰度概率分布的圖像經過一種變換使之演變成一幅具有均勻灰度概率分布的新圖像

它是以累積分布函數變換法為基礎的直方圖修正法

我們來看看直方圖的含義

還是以上次我們講的例子為例

?

我們看到R通道的直方圖主要集中在亮部,所以R通道灰度圖看起來較白

而B通道的直方圖主要集中在暗部,而對應的B通道灰度圖看起來很暗

G通道分布比較均勻,但有點偏暗

好了,這就是直觀的理解

而清晰柔和的圖像的直方圖灰度分布比較均勻

?

什么是累積分布函數呢,我們先看看直方圖的畫法,每一個橫坐標上縱坐標的高度對應于灰度值為該值的像素點的個數

若我們定義一個橫坐標對應縱坐標高度是所有小于該灰度值的像素點的個數

這就是我們說的累積分布

灰度值為1處對應灰度值為1的點

灰度值為2處對應灰度值為1和2的點

灰度值為3處對應灰度值為1、2、3的點

·······

灰度值為255處對應所有的點

好啦

我們來看看累積分布直方圖的效果吧

?

直方圖均衡化的方法如下:

紅色部分是原圖累積分布函數輪廓線

而理想的均衡化累積分布函數輪廓線應該是一條斜線

對于原圖中灰度值為80的點,按圖中的方法我們把它轉換為灰度值為60

對每個灰度值,我們建立一個轉換表,再對原圖進行轉換,就可以得到均衡化后的圖了

我們來看看具體程序

import cv

def Hist(image,color = cv.RGB(102,204,204)):
a
= [0]*256
w
= image.width
h
= image.height
iHist
= cv.CreateImage((256,256),8,3)
for i in range(h):
for j in range(w):
iGray
= int(image[i,j])
a[iGray]
= a[iGray] +1

S
= max(a)

for k in range(256):
a[k]
= a[k]*255/S
x
= (k,255)
y
= (k,255-a[k])
cv.Line(iHist,x,y,color)

return iHist

def LHist(image,color = cv.RGB(102,204,204)):
a
= [0]*256
w
= image.width
h
= image.height
iLHist
= cv.CreateImage((256,256),8,3)
for i in range(h):
for j in range(w):
iGray
= int(image[i,j])
a[iGray]
= a[iGray] +1

for i in range(1,256):
a[i]
= a[i]+a[i-1]
S
= max(a)
for k in range(256):
a[k]
= a[k]*255/S
x
= (k,255)
y
= (k,255-a[k])
cv.Line(iLHist,x,y,color)

return iLHist

def Equalize(image):
a
= [0]*256
w
= image.width
h
= image.height
size
= (w,h)
iEqualize
= cv.CreateImage(size,image.depth,1)
for i in range(h):
for j in range(w):
iGray
= int(image[i,j])
a[iGray]
= a[iGray] +1
for i in range(1,256):
a[i]
= a[i]+a[i-1]

S
= max(a)
for k in range(256):
a[k]
= a[k]*255/S
for i in range(h):
for j in range(w):
iEqualize[i,j]
= a[int(image[i,j])]
return iEqualize

image
= cv.LoadImage('lena.jpg',0)
iHist
= Hist(image)
iLHist
= LHist(image)
iEqualize
= Equalize(image)
iEHist
= Hist(iEqualize,cv.RGB(153,204,54))
iELHist
= LHist(iEqualize,cv.RGB(153,204,54))
cv.ShowImage(
'image',image)
cv.ShowImage(
'iHist',iHist)
cv.ShowImage(
'iLHist',iLHist)
cv.ShowImage(
'iEqualize',iEqualize)
cv.ShowImage(
'iEHist',iEHist)
cv.ShowImage(
'iELHist',iELHist)
cv.WaitKey(0)

看看運行效果

現在圖像的直方圖分布比較均勻了

但很難得到完全均衡的結果,另外,變換后的灰度級減少了。

這種現象叫做“簡并”現象。由于簡并現象的存在,處理后的灰度級總是要減少的

直觀反映就是均衡后直方圖在垂直方向上有很多黑線

好啦,直方圖均衡化就講到這里啦

轉載于:https://www.cnblogs.com/xianglan/archive/2010/12/28/1918694.html

總結

以上是生活随笔為你收集整理的python 简单图像处理(8) 直方图均衡化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。