Opencv 图像增强算法 图像检测结果

本code通过直方图变换增强了图像对比度,实现了单通道图像增强。将图像灰度阈值拉伸到0-255,图像检测结果见底部

Keywords: 图像增强 增强对比度 直方图变换

int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)
/*************************************************
Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255
src1:               单通道灰度图像                  
dst1:              同样大小的单通道灰度图像 
*************************************************/
{
	assert(src1->width==dst1->width);
	double p[256],p1[256],num[256];
	
	memset(p,0,sizeof(p));
	memset(p1,0,sizeof(p1));
	memset(num,0,sizeof(num));
	int height=src1->height;
	int width=src1->width;
	long wMulh = height * width;
	
	//statistics
	for(int x=0;x<src1->width;x++)
	{
		for(int y=0;y<src1-> height;y++){
			uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];
				num[v]++;
		}
	}
	//calculate probability
	for(int i=0;i<256;i++)
	{
		p[i]=num[i]/wMulh;
	}

	//p1[i]=sum(p[j]);	j<=i;
	for(int i=0;i<256;i++)
	{
		for(int k=0;k<=i;k++)
			p1[i]+=p[k];
	}

	// histogram transformation
	for(int x=0;x<src1->width;x++)
	{
		for(int y=0;y<src1-> height;y++){
			uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];
				((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;            
		}
	}
	return 0;
}

void CCVMFCView::OnImageAdjustContrast()
{
	if(workImg->nChannels>1)
		OnColorToGray();
	Invalidate();
	dst=cvCreateImage(cvGetSize(workImg),workImg->depth,workImg->nChannels);
	ImageStretchByHistogram(workImg,dst);
	m_dibFlag=imageReplace(dst,&workImg);
	Invalidate();
}

Experiment Result:

Opencv 图像增强算法 图像检测结果_第1张图片

                                    原图灰度化

Opencv 图像增强算法 图像检测结果_第2张图片

                                     检测结果1

Opencv 图像增强算法 图像检测结果_第3张图片

                                灰度化并增强对比度

Opencv 图像增强算法 图像检测结果_第4张图片

                                   检测结果2


你可能感兴趣的:(算法,function,DST)