你知道直方圖都能幹啥?
簡單總結如下, 詳見後文:
直方圖定義
維基百科上給出的定義是:
在統計學中,直方圖(Histogram)是一種對資料分佈情況的圖形表示, 是一種二維, 它的兩個座標分別是統計樣本和該樣本對應的某個屬性的度量, 以長條圖(bar)的形式具體表現. 因為直方圖的長度及寬度很適合用來表現數量上的變化, 所以較容易解讀差異小的數值.
百度上給出的定義是:
直方圖又稱質量分佈圖, 是一種統計報告圖, 由一系列高度不等的縱向條紋或線段表示資料分佈的情況. 一般用橫軸表示資料型別, 縱軸表示分佈情況. 直方圖是數值資料分佈的精確圖形表示, 這是一個連續變數(定量變數)的概率分佈的估計, 並且被卡爾·皮爾遜(Karl Pearson)首先引入. 它是一種條形圖. 為了構建直方圖, 第一步是將值的範圍分段, 即將整個值的範圍分成一系列間隔, 然後計算每個間隔中有多少值. 這些值通常被指定為連續的, 不重疊的變數間隔. 間隔必須相鄰, 並且通常是(但不是必須的)相等的大小.
總結一下直方圖特徵為: 二維圖表, 橫軸為資料(具有一定的連續性), 縱軸為資料分佈(資料數量).
直方圖作用
由於直方圖的特性, 有很多的應用: 如在資料處理方面可以用來排序, 如在影像處理方面可以用來影像增強和影像分割.
直方圖應用之排序
排序演算法中有一大類使用的是非比較排序, 如下圖所示為計數排序, 從圖中可以看到, 排序過程中使用了直方圖來統計資料, 由於直方圖的橫座標有一定的連續性, 當資料統計完成, 也就完成排序的目的. 詳細可以參見: 十大經典排序演算法(動圖演示) - 一畫素 - 部落格園 (cnblogs.com)
還有一些擴充套件應用, 如快速查詢資料中的topN, 如用來加速中值濾波(快速查詢中間資料)等.
直方圖應用之影像增強
常見的使用直方圖進行增強的方法就是直方圖均衡(HE, Histogram Equalization), 對比度受限自適應直方圖均衡(CLAHE, Contrast Limited Adaptive Histogram Equalization).
均衡的作用就是讓直方圖的分佈更加均勻, 直方圖分佈越均勻, 其熵越大, 熵越大影像中包含的資訊也就越多, 影像對比度就越高, 從而實現影像增強的效果. 如下圖所示為HE的效果:
直方圖應用之影像分割
直方圖是資料分佈的直觀表示, 直方圖中的每一個波峰就代表一個目標的分佈, 可以通過檢視直方圖中的波峰來確定影像中目標的個數及分佈, 因而也可以用來對影像進行分割, 將直方圖中的波峰進行劃分即可以完成影像分割. 如下圖所示為影像及其對應的直方圖, 圖中直方圖有4個波峰(最右邊2個波峰比較靠近, 認為是一個目標), 也可以看到影像上基本也有4個目標: 人影, 藍天, 白雲, 太陽.
最常見的使用直方圖進行影像分割的方法是大津閾值法(otsu), 如下所示為otsu實現效果:
otsu方法將直方圖分為2個部分, 如上圖所示紅色線為分割閾值, 對於有多個目標的影像, 效果不是很好.
對於多目標影像分割, 可以使用迭代otsu, 進行多次分割, 也可以對直方圖進行高斯擬合(假設目標分佈服從高斯分佈), 如下所示為高斯擬合進行分割結果: