三、图像增强
1、对比度展宽
图像对比度是指一幅图像中明暗区域间的亮度层级,对比度越大,图像从黑到白的层级越多,灰度表现力越强,可以看到更多图像灰度层级上的细节。对比度展宽是将图像的重要信息部分的对比度增强,从而得到更多的信息。
原理,将原图像的灰度范围(fa-fb)映射到(f’ a-f’ b),根据对图像感兴趣的灰度范围确定映射方式,常见线性或非线性映射如下:
用到函数:
(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );
作用实现颜色空间转换
参数code = CV_RGB2GRAY
是RGB到gray 转换
IplImage 结构体中的成员变量 imageData 表示图像数据的指针
用((UCHAR*)(src->imageData + src->widthStep*y))[x]
来获取x,y位置的灰度值
线性展宽代码如下:
IplImage *src, *dst;
src = cvCreateImage(cvGetSize(m_ipl), IPL_DEPTH_8U, 1);
cvCvtColor(m_ipl, src, CV_RGB2GRAY);
dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
int tmp = 0;
for (int y = 0; y < dst->height; y++)
{
for (int x = 0; x < dst->width; x++)
{
tmp = ((UCHAR*)(src->imageData + src->widthStep*y))[x];
UCHAR* tmp_ptr = &((UCHAR*)(dst->imageData + dst->widthStep*y))[x];
if (tmp < 64)
{
tmp_ptr[0] = tmp / 2;
}
else if (tmp < 192)
{
tmp_ptr[0] = tmp + tmp / 2;
}
else
{
tmp_ptr[0] = tmp / 2;
}
}
}
cvNamedWindow(_T("线性拉伸"));
cvShowImage(_T("线性拉伸"), dst