Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Desktop : OpenCV HDR

More than 1 year has passed since last update.
Goal

Test OpenCV HDR.

OpenCV_HDR.java
import java.util.ArrayList;
import java.util.List;

public class OpenCV_HDR {

    public static void main( String[] args )
    {
        try{
            System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
            Mat source1 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis1.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source2 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis2.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source3 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis3.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source4 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis4.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source5 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis5.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source6 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis6.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);
            Mat source7 = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\HDRmantis7.jpg", Imgcodecs.CV_LOAD_IMAGE_COLOR);

            Mat response=new Mat();

            Photo photo=new Photo();
            //CalibrateDebevec calibrate=photo.createCalibrateDebevec();
            CalibrateDebevec calibrateDebevec=photo.createCalibrateDebevec(70,10.0f,false);

            Mat calibrateRobertsonMat=new Mat();
            CalibrateRobertson calibrateRobertson= photo.createCalibrateRobertson(30,0.01f);

            //Load images and exposure times
            List<Mat> listMat=new ArrayList<Mat>();
            listMat.add(source1);
            listMat.add(source2);
            listMat.add(source3);
            listMat.add(source4);
            listMat.add(source5);
            listMat.add(source6);
            listMat.add(source7);


            Mat times=new Mat(7,1, CvType.CV_32FC1);
            times.put(0, 0, 32);
            times.put(1, 0, 16);
            times.put(2, 0, 8);
            times.put(3, 0, 4);
            times.put(4, 0, 1);
            times.put(5, 0, 0.5);
            times.put(6, 0, 0.25);

            /*
            times.put(0, 0, 100);
            times.put(1, 0, 225);
            times.put(2, 0, 325);
            times.put(3, 0, 525);
            times.put(4, 0, 625);
            times.put(5, 0, 785);
            times.put(6, 0, 1024);
             */

            //Estimate camera response
            calibrateDebevec.process(listMat, response, times);
            calibrateRobertson.process(listMat, calibrateRobertsonMat, times);
            System.out.println("response="+response.dump());
            System.out.println("calibrateRobertsonMat="+calibrateRobertsonMat.dump());
            System.out.println("times="+times.dump());


            //Make HDR image
            Mat hdr=new Mat();
            Mat hdrRobertson=new Mat();
            MergeDebevec mergeDebevec=photo.createMergeDebevec();
            mergeDebevec.process(listMat, hdr, times,response);
            mergeDebevec.process(listMat, hdrRobertson, times,calibrateRobertsonMat);
            // System.out.println("hdr="+hdr.dump());




            Mat ldr=new Mat();
            Mat ldrRobertson=new Mat();
            //TonemapDurand tonemapDurand=photo.createTonemapDurand(2.2f,11.5f,31.9f,31.1f,31.1f);
            TonemapDurand tonemapDurand=photo.createTonemapDurand(1.0f,4.0f,1.0f,2.0f,2.0f);
            tonemapDurand.process(hdr, ldr);
            tonemapDurand.process(hdrRobertson, ldrRobertson);

            ldr=EachPixelMultiplyNum(ldr,255);
            ldrRobertson=EachPixelMultiplyNum( ldrRobertson,255);


            //Perform exposure fusion
            Mat fusion=new Mat();
            MergeMertens mergeMertens =photo.createMergeMertens();
            mergeMertens.process(listMat, fusion);
            fusion=EachPixelMultiplyNum(fusion,255);


            Mat mergeRobertsonMat=new Mat();
            MergeRobertson mergeRobertson=  photo.createMergeRobertson();
            mergeRobertson.process(listMat, mergeRobertsonMat, times);
            mergeRobertsonMat=EachPixelMultiplyNum(mergeRobertsonMat,255);


//          List<Mat> alignMTBMatList=new ArrayList<Mat>();
//          AlignMTB  alignMTB=photo.createAlignMTB(6, 4, true);
//          alignMTB.process(listMat, alignMTBMatList, times, response);


            //Tonemap HDR image
            Mat tonemapMat=new Mat();
            Tonemap tonemap= photo.createTonemap(1.0f);
            tonemap.process(hdr, tonemapMat);
            tonemapMat=EachPixelMultiplyNum(tonemapMat,255);

            Mat tonemapDragoMat=new Mat();
            TonemapDrago tonemapDrago=photo.createTonemapDrago(1.0f,1.0f,0.85f);
            tonemapDrago.process(hdr, tonemapDragoMat);
            tonemapDragoMat=EachPixelMultiplyNum(tonemapDragoMat,255);


            Mat tonemapMantiukMat=new Mat();
            TonemapMantiuk tonemapMantiuk=  photo.createTonemapMantiuk(1.0f,0.7f,1.0f);
            tonemapMantiuk.process(hdr, tonemapMantiukMat);
            tonemapMantiukMat=EachPixelMultiplyNum(tonemapMantiukMat,255);


            Mat tonemapReinhardMat=new Mat();
            TonemapReinhard tonemapReinhard=   photo.createTonemapReinhard(1.0f, 0.0f, 1.0f, 0.0f);
            tonemapReinhard.process(hdr, tonemapReinhardMat);
            tonemapReinhardMat=EachPixelMultiplyNum(tonemapReinhardMat,255);


            //Write results
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-ldr.jpg", ldr);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-lena-ldrRobertson.jpg",    ldrRobertson);

            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-fusion.jpg", fusion);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-mergeRobertsonMat.jpg", mergeRobertsonMat);

            //Imgcodecs.imwrite("C://opencv3.1//samples//CalibrateDebevec-hdr.hdr", hdr);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-tonemapMat.jpg", tonemapMat);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-tonemapDragoMat.jpg", tonemapDragoMat);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-tonemapMantiukMat.jpg", tonemapMantiukMat);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\CalibrateDebevec-mantis-tonemapReinhardMat.jpg",  tonemapReinhardMat);

            //Imgcodecs.imwrite("C://opencv3.1//samples//CalibrateDebevec-AlignMTB.jpg", alignMTBMatList.get(0));
            // Imgcodecs.imwrite("C://opencv3.1//samples//CalibrateDebevec-Robertson.jpg",  calibrateRobertsonMat);
            //System.out.println("hdr="+hdr.dump());

        }catch (Exception e) {
            System.out.println("error: " + e.getMessage());
        }
    }

    public static Mat EachPixelMultiplyNum(Mat inputMat, int Val){
        for (int i=0;i<inputMat.rows();i++){
            for (int j=0;j<inputMat.cols();j++){
                double[] data=new double[3];
                data=inputMat.get(i, j);
                data[0]= data[0]*Val;
                data[1]= data[1]*Val;
                data[2]= data[2]*Val;

                inputMat.put(i, j, data);
            }

        }
        return inputMat;
    }
}
Result

CalibrateDebevec-ldr.jpg
CalibrateDebevec-mantis-fusion.jpg
CalibrateDebevec-mantis-tonemapDragoMat.jpg
CalibrateDebevec-mantis-tonemapMantiukMat.jpg
CalibrateDebevec-mantis-tonemapMat.jpg
CalibrateDebevec-mantis-tonemapReinhardMat.jpg

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away