コード例 #1
0
void ContrastStretching::MakeGlobalLUT()
{


    if(_mode==ContrastStretching::MODE_DEFAULT)
    {
    for(int i=0;i<_channels;i++)
    {
        cv::minMaxLoc (_channel[i],&_min1,&_max1,0,0);
        _min[i]=_min1;
        _max[i]=_max1;
        for(int k=0;k<256;k++){
             _LUT[k*_channels+i]=k-_min1>0?k>_max1?255:255*(k-_min1)/(_max1-_min1):0;
        }
    }
    }
    else if(_mode==ContrastStretching::MODE_MODIFIED)
    {
        for(int i=0;i<_channels;i++)
        {
                Histogram imgHist;
                std::vector<int> imgThresh;
                imgThresh = imgHist.getThresh(_channel[i], lowerRatio[i], upperRatio[i]);
                _min1=0;
                _max1=0;
                cv::minMaxLoc (_channel[i],&_min1,&_max1,0,0);
                _min[i]=imgThresh[0];
                _max[i]=imgThresh[1];
                for(int k=0;k<256;k++)
                {
                    if(_max1>threshold)
                    {
                        if(_max[i]<threshold/2)
                            _max[i]=threshold/2;
                        _LUT[k*_channels+i]=(k-_min[i]<0)?0:(k>_max[i])?255:(255*(k-_min[i])/(_max[i]-_min[i]));
                    }
                      else
                          _LUT[k*_channels+i]=k;
                }
        }

    }


}