opencv:对比度扩张与灰度窗

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值