图像增强--自适应增强算法(Android-OpenCV)

本文介绍了自适应对比度增强算法在Android平台上的实现,使用OpenCV库进行图像处理。通过优化算法,将复杂度从n^2 * N^2降低到n * N^2,并进一步优化到N^2,提高了处理速度。提供了关键代码片段,并提醒初学者在使用OpenCV时注意数据类型的选择,如uchar而非float。
摘要由CSDN通过智能技术生成

自适应增强算法的具体原理可以参考如下博文:
彩色图像自适应对比度增强

事实上很多博文都有描叙这个,但都不愿公开完全代码,这里贴上我实现的代码。

首先对算法说明一些,如果直接按公式来,算法的复杂度就是n^2 * N^2 , 其中n为窗口大小,N为图像大小,但是我们可以很容易发现,可以通过已计算前值来计算后面的值,其中
M(x, y) = M(x, y-1) +{ SUM[f(xr)] - SUM[f(xl)]}/n;
其中,SUM[f(xr)] 表示右边要重新计算出来的那一列,SUM[f(xl)]为需要去掉的左边的那一列,这样算法复杂度就减少到n * N^2;

同样对Sigma的计算也可以推导得到类似结果,具体推导过程就不说了,直接上结果:
S(x,y) = S(x, y-1) + { SUM[f(xr)^2] - SUM[f(xl)^2]}/n + M(x, y-1)^2 - M(x,y)^2
补充:通过提前计算好每个窗口列的值,算法发杂度优化到 N^2,与窗口大小没多大关系,只与图像大小相关,1024*968的图片1秒内即可,当然如果添加多线程处理,速度会更快。

代码参考如下:(可能有些小错误)

private:
    // delta^2 = delta0^2 + [sumRight(f^2) - sumLeft(f^2)]/N + M0^2 - M^2
    void getMeanFromPreviousCol(const Mat &img, Mat &mean, Mat &sigma, const Mat &sumM, const Mat &sumS, int m, int n, int pI, int pJ) {
   
        int total = (2*m + 1) * (2*n + 1);
        /*float M = 0;
        for(int i = pI - m; i <= pI + m; ++i) {
            M += (img.at<uchar>(i, pJ + n) - img.at<uchar>(i, pJ -n -1));
        }*/
        float M = sumM.at<float>(pI, pJ + n) - sumM.at<float>(pI, pJ -n -1);
        M /= total;
        mean.at<float>(pI, pJ) = M + mean.at<float>(pI, pJ -1);

        /*float S = 0;
        for(int i = pI - m; i <= pI + m; ++i) {
            S += (pow(img.at<uchar>(i, pJ + n), 2) - pow(img.at<uchar>(i, pJ -n -1), 2));
        }*/
        float S = sumS.at<float>(pI, pJ + n) - sumS.at<float>(pI, pJ -n -1);
        S /= total;
        S += pow(mean.at<float>(pI, pJ -1), 2) - pow(mean.at<float>(pI, pJ), 2);
        sigma.at<float>(pI, pJ) = S + sigma.at<float>(pI, pJ -1);
    }

    void getMeanFromPreviousRow(const Mat &img, Mat &mean, Mat &sigma, const vector<float> &sumM, const vector<float> &sumS,
            int m
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值