图像增强算法:乘方增强 线性增强 对数增强 指数增强

基于乘方增强算法的图像增强

void enhence(cv::Mat&srcmat)
{
    if (srcmat.channels() > 1)
    {
        cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
    }

    int low_bound = 65;
    int up_bound = 180;
    float pow_index = 1.5;


    for (int i = 0; i < srcmat.rows; i++)
    {
        for (int j = 0; j < srcmat.cols; j++)
        {
            if (srcmat.at<uchar>(i, j) < low_bound)
            {
                srcmat.at<uchar>(i, j) = 0;
            }
            else if (srcmat.at<uchar>(i, j) > up_bound)
            {
                srcmat.at<uchar>(i, j) = 255;
            }
            else
            {
                srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(powf((srcmat.at<uchar>(i, j) - low_bound), pow_index) / powf((up_bound - low_bound), pow_index))); //目前pow_index = 1.5
            }
        }
    }
}

灰度 增强之后的图片

对数增强

void LogEnhance(cv::Mat&srcmat)
{
    if (srcmat.channels() > 1)
    {
        cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
    }

    int low_bound = 80;
    int up_bound = 180;


    for (int i = 0; i < srcmat.rows; i++)
    {
        for (int j = 0; j < srcmat.cols; j++)
        {
            if (srcmat.at<uchar>(i, j) < low_bound)
            {
                srcmat.at<uchar>(i, j) = 0;
            }
            else if (srcmat.at<uchar>(i, j) > up_bound)
            {
                srcmat.at<uchar>(i, j) = 255;
            }
            else
            {
                srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(logf(srcmat.at<uchar>(i, j) - low_bound) / logf(up_bound - low_bound))); //
            }
        }
    }

    imwrite("E:\\pic\\LogEnhance.jpg", srcmat);
}

对数增强

线性增强

void LinearEnhance(cv::Mat&srcmat)
{
    if (srcmat.channels() > 1)
    {
        cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
    }

    int low_bound = 50;
    int up_bound = 130;


    for (int i = 0; i < srcmat.rows; i++)
    {
        for (int j = 0; j < srcmat.cols; j++)
        {
            if (srcmat.at<uchar>(i, j) < low_bound)
            {
                srcmat.at<uchar>(i, j) = 0;
            }
            else if (srcmat.at<uchar>(i, j) > up_bound)
            {
                srcmat.at<uchar>(i, j) = 255;
            }
            else
            {
                srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *((srcmat.at<uchar>(i, j) - low_bound)/ (up_bound - low_bound))); //
            }
        }
    }

    imwrite("E:\\pic\\LinearEnhance.jpg", srcmat);
}

线性增强

指数增强

void ExpEnhance(cv::Mat&srcmat)
{
    if (srcmat.channels() > 1)
    {
        cv::cvtColor(srcmat, srcmat, cv::COLOR_BGR2GRAY);
    }

    int low_bound = 80;
    int up_bound = 130;


    for (int i = 0; i < srcmat.rows; i++)
    {
        for (int j = 0; j < srcmat.cols; j++)
        {
            if (srcmat.at<uchar>(i, j) < low_bound)
            {
                srcmat.at<uchar>(i, j) = 0;
            }
            else if (srcmat.at<uchar>(i, j) > up_bound)
            {
                srcmat.at<uchar>(i, j) = 255;
            }
            else
            {
                srcmat.at<uchar>(i, j) = (unsigned char)(255.0 *(expf(srcmat.at<uchar>(i, j) - low_bound) / expf(up_bound - low_bound))); //
            }
        }
    }

    imwrite("E:\\pic\\ExpEnhance.jpg", srcmat);
}

指数增强

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值