1.对比度展宽
对图像灰度级进行重新映射,是一种线性变换。通过抑制非重要信息的对比度来腾出空间给重要信息进行对比度扩展。
2.灰度窗
舍弃某部分不重要的信息,将重要信息映射到0~255之间,常常用于医学图像处理,将肌肉、骨头分离。
3.灰度窗切片
选择灰度值在一定范围内的像素,设置为255,其他为0;
#ifndef
HISTGORAM_H
#define
HISTGORAM_H
#include
<cv.h>
#include
<highgui.h>
//对比度展宽,将灰度值重新映射
void
contrast_ratio_extend(IplImage* src, IplImage* dst,
const
double
& fa,
const
double
& fb,
const
double
& ga,
const
double
& gb)
{
assert( src->nChannels == 1);
//单通道无符号整型
double
afa = ga/fa;
double
beta = (gb - ga)/(fb - fa);
double
gamma = (255 - gb)/(255 - fa);
for
(
int
y = 0; y != src->height; ++y)
{
for
(
int
x = 0; x != src->width; ++x)
{
uchar* p = (uchar*)(src->imageData + y*src->widthStep + x);
uchar* q = (uchar*)(dst->imageData + y*dst->widthStep + x);
if
(*p >= 0 && *p < fa)
{
*q = (uchar)(afa*(*p));
}
else
if
(*p >= fa && *p <fb)
{
*q = (uchar)(beta*(*p - fa) + ga);
}
else
if
(*p >= fb && *p < 255)
{
*q = (uchar)(gamma*(*p - fb) + gb);
}
}
}
}
//灰度窗,将fa到fb之间的灰度值映射到0~255之间
void
graylevel_window(IplImage* src, IplImage* dst,
const
double
& fa,
const
double
& fb)
{
assert(src->nChannels == 1);
//单通道无T符?号?整?型
//double a = ga/fa;
double
beta = 255/(fb - fa);
//double gamma = (255 - gb)/(255 - fa);
for
(
int
y = 0; y != src->height; ++y)
{
for
(
int
x = 0; x != src->width; ++x)
{
uchar* p = (uchar*)(src->imageData + y*src->widthStep + x);
uchar* q = (uchar*)(dst->imageData + y*dst->widthStep + x);
if
(*p >= 0 && *p < fa)
{
*q = 0;
}
else
if
(*p >= fa && *p <fb)
{
*q = (uchar)(beta*(*p - fa));
}
else
if
(*p >= fb && *p < 255)
{
*q = 255;
}
}
}
}
//灰度窗切D片,?即感兴趣的部分设置为255,其他部分为a0
void
graylevel_slice(IplImage* src, IplImage* dst,
const
double
& fa,
const
double
& fb)
//0<fa<fb<255
{
assert(src->nChannels == 1 && fa > 0 && fa < fb && fb < 255);
double
beta = 255/(fb - fa);
//double gamma = (255 - gb)/(255 - fa);
for
(
int
y = 0; y != src->height; ++y)
{
for
(
int
x = 0; x != src->width; ++x)
{
uchar* p = (uchar*)(src->imageData + y*src->widthStep + x);
uchar* q = (uchar*)(dst->imageData + y*dst->widthStep + x);
if
(*p >= fa && *p <fb)
{
*q = 255;
}
else
*q = 0;
}
}
}
#endif