Opencv 图像增强算法 图像检测结果
发布时间
阅读量:
阅读量
该代码通过直方图变换实现了单通道图像的对比度增强,并将灰度值拉伸到0-255范围。实验结果显示原图灰度化后通过直方图变换增强了对比度,并通过检测结果1和检测结果2展示了对比度增强后的清晰图像效果。
该算法经过直方图调整以提升图像对比度,并成功实现了单通道图像增强。为实现这一目标,在灰度值范围内将其扩展至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:

原图灰度化

检测结果1

灰度化并增强对比度

检测结果2
全部评论 (0)
还没有任何评论哟~
