void SrTextureShadRem::removeShadows(const cv::Mat& frame, const cv::Mat& fgMask, const cv::Mat& bg, cv::Mat& srMask) {
	ConnCompGroup fg(fgMask);
	fg.mask.copyTo(srMask);

	cv::Mat grayFrame, grayBg;
	cv::cvtColor(frame, grayFrame, CV_BGR2GRAY);
	cv::cvtColor(bg, grayBg, CV_BGR2GRAY);

	extractCandidateShadowPixels(grayFrame, fg, grayBg, candidateShadows);
	getShadows(grayFrame, candidateShadows, grayBg, shadows);

	srMask.setTo(0, shadows);

	if (params.cleanSrMask) {
		ConnCompGroup ccg;
		ccg.update(srMask, true, true);
		ccg.mask.copyTo(srMask);
	}
}
const CsColour& PptColorSchemeAtom::getSchemeColor(EshColor::SchemeIndex in_index) const
{
    ChLOG_DEBUG_START_FN;
    const CsColour *pReturnColor = NULL;
    switch (in_index)
    {
    case SchemeColor_background:
        pReturnColor = &getBackground();
        break;
    case SchemeColor_text_and_lines:
        pReturnColor = &getTextAndLines();
        break;
    case SchemeColor_shadows:
        pReturnColor = &getShadows();
        break;
    case SchemeColor_title_text:
        pReturnColor = &getTitleText();
        break;
    case SchemeColor_fills:
        pReturnColor = &getFills();
        break;
    case SchemeColor_accent1:
        pReturnColor = &getAccent();
        break;
    case SchemeColor_accent2:
        pReturnColor = &getAccentAndHyperlink();
        break;
    case SchemeColor_accent3:
        pReturnColor = &getAccentAndFollowedHyperlink();
        break;
    default:
        pReturnColor = NULL;
        // TODO: throw exception?
        break;
    }

    ChASSERT(pReturnColor);
    return *pReturnColor;
}