前言
在影像處理中常常會需要計算影像的值方圖(Histogram)作為後續的處理資料,以下是使用EmguCV來計算出值方圖與顯示的Code
值方圖類別使用
EmguCV提供DenseHistogram的類別方便快速地完成值方圖的計算步驟
初始化與計算
設定你需要的量化的程度與顯示的範圍
繪製值方圖
可以使用內建的控制項ImageViwver或ImageBox繪製,但是只能顯示一維
HistogramBox:UI有擺放HistogramBox
圖像直接顯示
不使用DenseHistogram值方圖類別,直接顯示
//1.計算Blue單通道 int Bbin = 32; //切割量化的數量 RangeF BRange = new RangeF(0,255); DenseHistogram blueHist = new DenseHistogram(Bbin, BRange); //參數一是要計算的顏色資料,這邊分割通道並取得Blue通道的顏色;依序[1]:Green->[2]:Red blueHist.Calculate(new Image[] { loadImg.Split()[0] }, false, null); //2.計算Blue-Green單通道 int[2] bins = {16,16}; //切割量化的數量 RangeF[] ranges = new RangeF[]{ new RangeF(0,255),new RangeF(0,255) }; DenseHistogram bgHist = new DenseHistogram(bins, ranges); //填入Blue-Green通道的顏色圖像 bgHist.Calculate(new Image [] { loadImg.Split()[0],loadImg.Split()[1] }, false, null); //3.計算Hsv的H-S int[2] bins = {8,16}; //切割量化的數量{HBin,SBin} RangeF[] ranges = new RangeF[]{ new RangeF(0,180),new RangeF(0,255) }; //H,S DenseHistogram hsHist = new DenseHistogram(bins, ranges); //填入H-S通道的顏色圖像 hsHist.Calculate(new Image [] { loadImg.Convert ().Split()[0],loadImg.Convert ().Split()[1] }, false, null); //多通道或其他色彩表示以此類推...
- HistogramViewer:彈出視窗顯示
HistogramViewer.Show(blueHist, "Blue channel");
histogramBox.AddHistogram("Blue channel", Color.Blue, blueHist); histogramBox.Refresh(); //更新資料 histogramBox.Show();
loadImg = new Image("lena_ori.jpg"); Image [] image = loadImg.Split(); //1.使用HistogramViewer HistogramViewer.Show(image[0],32); //顯示Blue,bin = 32 //2.使用HistogramBox histogramBox.GenerateHistograms(image[0], 32); histogramBox.Refresh(); //更新資料 histogramBox.Show();
沒有留言:
張貼留言