標籤:style blog http color 使用 os strong 檔案
本文簡要描述了均衡化原理及數學實現等理論問題,最終利用emgucv實現映像的灰階均衡。
長條圖的均衡化,這是映像增強常用方法。
一、均衡化原理及數學實現(轉載)
均衡化原理及數學實現可重點參看——《長條圖均衡化》和《影像處理(3)_灰階分布均衡化》
灰階分布均衡化又稱長條圖均衡化。
1、概述
這種方法通常用來增加許多映像的全域對比,尤其是當映像的有用資料的對比相當接近的時候。通過這種方法,亮度可以更好地在長條圖上分布。這樣就可以用於增強局部的對比而不影響整體的對比,長條圖均衡化通過有效地擴充常用的亮度來實現這種功能。
這種方法對於背景和前景都太亮或者太暗的映像非常有用,這種方法尤其是可以帶來X光映像中更好的骨骼結構顯示以及曝光過度或者曝光不足照片中更好的細節。這種方法的一個主要優勢是它是一個相當直觀的技術並且是可逆操作,如果已知均衡化函數,那麼就可以恢複原始的長條圖,並且計算量也不大。這種方法的一個缺點是它對處理的資料不加選擇,它可能會增加背景雜訊的對比並且降低有用訊號的對比。
2、原理及數學實現
我們來看一個灰階映像,讓ni表示灰階i出現的次數,這樣映像中灰階為i 的像素的出現機率是
L 是映像中所有的灰階數,n 是映像中所有的像素數, p 實際上是映像的長條圖,歸一化到 0....1。
把 c 作為對應於 p 的累計機率函數, 定義為:
c 是映像的累計歸一化長條圖。
我們建立一個形式為 y=T(xi) 的變化,對於原始映像中的每個值它就產生一個 y,這樣 y 的累計機率函數就可以在所有值範圍內進行線性化,轉換公式定義為:
注意 T 將不同的等級映射到 0...1 域,為了將這些值對應回它們最初的域,需要在結果上應用下面的簡單變換:
上面描述了灰階映像上使用長條圖均衡化的方法,但是通過將這種方法分別用於映像RGB顏色值的紅色、綠色和藍色分量,從而也可以對彩色映像進行處理。
上述是維基百科對長條圖均衡化的原理解釋,轉化為演算法描述則是:
(1)擷取靶心圖表像的長條圖。
(2)從擷取長條圖圖中擷取灰階密度分布。【就是每個灰階級像素個數 / 灰階長條圖中像素的總個數】
(3)對密度長條圖進行累加,每個灰階級密度是前面所有灰階級的密度總和。
(4)對原映像進行遍曆,每個像素值為累加後的機率密度索引值 並 乘上255 對映像進行還原。
二、程式實現
opencv的編程方法可參看《【OpenCV入門指南】第九篇 灰階長條圖均衡化》。
emgucv的編程方法相當簡單,利用的函數就是cvEqualizeHist。
程式主體架構可利用 [轉載+原創]Emgu CV on C# (二) —— Emgu CV on 灰階化 文章中的程式檔案。
給表單添加第三個PictureBox,並將SizeModel設定為Zoom
在灰階化功能函數後直接添加下段程式函數,so easy。
//均衡化 IntPtr Histimg = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcimg), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1); CvInvoke.cvEqualizeHist(grayimg, Histimg); MIplImage histmi = (MIplImage)Marshal.PtrToStructure(Histimg, typeof(MIplImage)); Image<Gray, Byte> histimage = new Image<Gray, Byte>(histmi.width, histmi.height, histmi.widthStep, histmi.imageData); pictureBox3.Image = histimage.ToBitmap();
三、結果分析
將《【OpenCV入門指南】第九篇 灰階長條圖均衡化》處理的圖片剪下下來,由於只有灰階圖片,也對該圖片進行了灰階處理,並將灰階處理之後的圖片進行均衡化。
1、原程式圖片
2、剪下擷取灰階圖片
3、通過emgucv方法進行均衡化,擷取的最終圖片與原文章得到的圖片進行比對。
原文章圖片
本文均衡化後的
轉載請標明出處,原文地址:http://www.cnblogs.com/MobileBo/p/3917956.html
都是調用的同一個dll,所以差別不是很大,只是emgucv方法中又進行了一次灰階化,會有部分細節損失。
從整理效果看,已經達到了預期要求,灰階長條圖均衡化對灰階圖的映像增強效果明顯,對比大大增強。