Filters.java 文件源码

java
阅读 25 收藏 0 点赞 0 评论 0

项目:ImageEnhanceViaFusion 作者:
private static Mat filterSingleChannel(Mat p, double s, ArrayList<Mat> Isubchannels, ArrayList<Mat> Ichannels, 
        Mat mean_I_r, Mat mean_I_g, Mat mean_I_b, Mat invrr, Mat invrg, Mat invrb, Mat invgg, Mat invgb, 
        Mat invbb, double r_sub) {
    Mat p_sub = new Mat();
    Imgproc.resize(p, p_sub, new Size(p.cols() / s, p.rows() / s), 0.0, 0.0, Imgproc.INTER_NEAREST);

    Mat mean_p = boxfilter(p_sub, (int) r_sub);

    Mat mean_Ip_r = boxfilter(Isubchannels.get(0).mul(p_sub), (int) r_sub);
    Mat mean_Ip_g = boxfilter(Isubchannels.get(1).mul(p_sub), (int) r_sub);
    Mat mean_Ip_b = boxfilter(Isubchannels.get(2).mul(p_sub), (int) r_sub);

    // convariance of (I, p) in each local patch
    Mat cov_Ip_r = new Mat();
    Mat cov_Ip_g = new Mat();
    Mat cov_Ip_b = new Mat();
    Core.subtract(mean_Ip_r, mean_I_r.mul(mean_p), cov_Ip_r);
    Core.subtract(mean_Ip_g, mean_I_g.mul(mean_p), cov_Ip_g);
    Core.subtract(mean_Ip_b, mean_I_b.mul(mean_p), cov_Ip_b);

    Mat temp1 = new Mat();
    Mat a_r = new Mat();
    Mat a_g = new Mat();
    Mat a_b = new Mat();
    Core.add(invrr.mul(cov_Ip_r), invrg.mul(cov_Ip_g), temp1);
    Core.add(temp1, invrb.mul(cov_Ip_b), a_r);
    Core.add(invrg.mul(cov_Ip_r), invgg.mul(cov_Ip_g), temp1);
    Core.add(temp1, invgb.mul(cov_Ip_b), a_g);
    Core.add(invrb.mul(cov_Ip_r), invgb.mul(cov_Ip_g), temp1);
    Core.add(temp1, invbb.mul(cov_Ip_b), a_b);

    Mat b = new Mat();
    Core.subtract(mean_p, a_r.mul(mean_I_r), b);
    Core.subtract(b, a_g.mul(mean_I_g), b);
    Core.subtract(b, a_b.mul(mean_I_b), b);

    Mat mean_a_r = boxfilter(a_r, (int) r_sub);
    Mat mean_a_g = boxfilter(a_g, (int) r_sub);
    Mat mean_a_b = boxfilter(a_b, (int) r_sub);
    Mat mean_b = boxfilter(b, (int) r_sub);

    Imgproc.resize(mean_a_r, mean_a_r, 
            new Size(Ichannels.get(0).cols(), Ichannels.get(0).rows()), 0.0, 0.0, Imgproc.INTER_LINEAR);
    Imgproc.resize(mean_a_g, mean_a_g, 
            new Size(Ichannels.get(0).cols(), Ichannels.get(0).rows()), 0.0, 0.0, Imgproc.INTER_LINEAR);
    Imgproc.resize(mean_a_b, mean_a_b, 
            new Size(Ichannels.get(0).cols(), Ichannels.get(0).rows()), 0.0, 0.0, Imgproc.INTER_LINEAR);
    Imgproc.resize(mean_b, mean_b, 
            new Size(Ichannels.get(0).cols(), Ichannels.get(0).rows()), 0.0, 0.0, Imgproc.INTER_LINEAR);

    Mat result = new Mat();
    Core.add(mean_a_r.mul(Ichannels.get(0)), mean_a_g.mul(Ichannels.get(1)), temp1);
    Core.add(temp1, mean_a_b.mul(Ichannels.get(2)), temp1);
    Core.add(temp1, mean_b, result);
    return result;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号