一個灰度級變換的算法

直方圖均衡化算法

1.將灰度圖直方圖化,計算各個像素級的像素數目

2.形成累積直方圖

3.建立新的亮度查找表

程序源代碼:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

void histogram1(IplImage *src)
{
	assert(src->nChannels == 1);
	//assert(src1->nChannels == 1);
	int histogram[256] = {0};
	int chistogram[256] = {0};
	 
	for(int h=0;h<src->height;h++)
	{
		unsigned char *p = (unsigned char *)src->imageData+h*src->widthStep;
		for(int w=0;w<src->width;w++)
		{
			
			histogram[*p++]++;//計算直方圖
		}
	}
		int flag = 0;

		for(int i=0;i<256;i++)//形成累積直方圖
		{
			if(flag==0)
			{
				chistogram[0] = 0;
				flag = 1;
			}

			else 
			{
				chistogram[i] = chistogram[i-1]+histogram[i];
			}

		}
        
		int T[256] = {0};
		for(int i=0;i<256;i++)
		{
			T[i] = (int)(255/(src->width*src->height))*chistogram[i];//建立新的查找表
		}

		for(int h=0;h<src->height;h++)
			for(int w=0;w<src->width;w++)
			{
				int pixel = *(src->imageData +h*src->widthStep+w);
				*(src->imageData +h*src->widthStep+w) = T[pixel];
			}
}




效果圖:

原圖:

灰度圖:

亮度變換後的效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章