在對影像分析時會需要知道影像像數值的分布狀況,可以透過直方圖進行分析。

以下是將影像R、G、B分別進行統計後繪出各自顏色的分布。

 

繪製直方圖,此函數可以直接針對影像的R、G、B分別繪製。

由於panel 在 windows form 中的長寬是固定的。

為求每張圖片的繪製直方圖能夠美觀,因此需先統計最大值進行正規化處理。

 

由於此案例中設定為128,然而影像分布為0~255,因此須將相近的兩個數值平均後繪製。DRAW_INTERVAL為合併寬度,此案例DRAW_INTERVAL = 2。

 

private void draw(Graphics[] graphicses, Bitmap bitmap)
{
	int[,] statistics = MyColouring.Statistics(bitmap);
	
	// find Max value
	int MAX = 0;
	foreach (int value in statistics)
		if (value > MAX)
			MAX = value;

	Pen pen = new Pen(Color.Black, 1);
	pen.EndCap = System.Drawing.Drawing2D.LineCap.NoAnchor;  //EndCap設定 這支筆的結尾會是個箭頭 ArrowAnchor
	for (int c = 0; c < graphicses.Length; c++)
	{
		graphicses[c].Clear(Color.White);
		int value = 0;
		for (int x = 0; x < 256; x++)
		{
			if (x % DRAW_INTERVAL == 0)
			{
				value += (int)(((double)(MAX - statistics[c, x]) / MAX * GraphicsHieght));
				graphicses[c].DrawLine(pen, x / DRAW_INTERVAL, GraphicsHieght, x / 2, value / DRAW_INTERVAL);
			}
			else
			{
				value = (int)(((double)(MAX - statistics[c, x]) / MAX * GraphicsHieght));
			}

		}
	}
}

使用方法

Graphics[] graphicses = {sourceGraphicsB.CreateGraphics()};
draw(graphicses, bitmap);
arrow
arrow
    文章標籤
    C#
    全站熱搜

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()