Exemplo n.º 1
0
        protected override byte[] Solve(MyImageD image)
        {
            byte[] ans = new byte[image.data.Length];
            double Le  = 0;

            for (int i = 0; i < image.height; i++)
            {
                for (int j = 0; j < image.width; j++)
                {
                    int k = i * image.stride + j * 4;
                    if (!(image.data[k + 0] + image.data[k + 1] + image.data[k + 2] >= 0))
                    {
                        LogPanel.Log($"Weird: {image.data[k + 0]}, {image.data[k + 1]}, {image.data[k + 2]}");
                    }
                    Le += Math.Log(1 + image.data[k + 0] + image.data[k + 1] + image.data[k + 2]);
                }
            }
            //LogPanel.Log($"Sum of Log(Lw): {Le}");
            Le = Math.Exp(Le / (image.height * image.width));
            LogPanel.Log($"alpha = {alpha}, Lwhite = {Lwhite}, Le = {Le}");
            for (int i = 0; i < image.height; i++)
            {
                for (int j = 0; j < image.width; j++)
                {
                    int k = i * image.stride + j * 4;
                    ans[k + 0] = HeatToByte(alpha, Le, image.data[k + 0]);
                    ans[k + 1] = HeatToByte(alpha, Le, image.data[k + 1]);
                    ans[k + 2] = HeatToByte(alpha, Le, image.data[k + 2]);
                    ans[k + 3] = 255;
                }
            }
            return(ans);
        }
Exemplo n.º 2
0
 public MyImage(byte[] _data, MyImageD template)
 {
     data    = _data;
     height  = template.height; width = template.width;
     stride  = template.stride;
     dpi_x   = template.dpi_x; dpi_y = template.dpi_y;
     format  = template.format;
     palette = template.palette;
 }
Exemplo n.º 3
0
 protected override byte[] Solve(MyImageD image)
 {
     byte[] ans = new byte[image.data.Length];
     for (int i = 0; i < image.height; i++)
     {
         for (int j = 0; j < image.width; j++)
         {
             int k = i * image.stride + j * 4;
             ans[k + 0] = HeatToByte(image.data[k + 0]);
             ans[k + 1] = HeatToByte(image.data[k + 1]);
             ans[k + 2] = HeatToByte(image.data[k + 2]);
             ans[k + 3] = 255;
         }
     }
     return(ans);
 }
Exemplo n.º 4
0
        public async Task <MyImage> ProcessImage(List <MyImage> images)
        {
            HDRSolver hdr = null;

            foreach (var p in radio_HDR)
            {
                if (p.Key.IsChecked == true)
                {
                    hdr = p.Value(); break;
                }
            }
            if (hdr == null)
            {
                LogPanel.Log("No HDR selected."); return(null);
            }
            ToneMappingSolver tone = null;

            foreach (var p in radio_ToneMapping)
            {
                if (p.Key.IsChecked == true)
                {
                    tone = p.Value(); break;
                }
            }
            if (tone == null)
            {
                LogPanel.Log("No Tone-Mapping selected."); return(null);
            }
            return(await Task.Run(() =>
            {
                LogPanel.Log("Running HDR...");
                foreach (var image in images)
                {
                    hdr.AddImage(image);
                }
                MyImageD heat_map = hdr.RunHDR();
                LogPanel.Log("Running Tone Mapping...");
                MyImage ans = tone.RunToneMapping(heat_map);
                LogPanel.Log("OK.");
                return ans;
            }));
        }
Exemplo n.º 5
0
        protected override byte[] Solve(MyImageD image)
        {
            double mx = double.MinValue, mn = double.MaxValue;

            for (int i = 0; i < image.height; i++)
            {
                for (int j = 0; j < image.width; j++)
                {
                    int    k = i * image.stride + j * 4;
                    double v = Math.Log10(1 + image.data[k + 0] + image.data[k + 1] + image.data[k + 2]);
                    if (v > mx)
                    {
                        mx = v;
                    }
                    if (v < mn)
                    {
                        mn = v;
                    }
                }
            }
            LogPanel.Log($"min heat: {Math.Pow(10, mn).ToString("E")}");
            LogPanel.Log($"max heat: {Math.Pow(10, mx).ToString("E")}");
            byte[] ans = new byte[image.data.Length];
            for (int i = 0; i < image.height; i++)
            {
                for (int j = 0; j < image.width; j++)
                {
                    int    k = i * image.stride + j * 4;
                    double v = Math.Log10(1 + image.data[k + 0] + image.data[k + 1] + image.data[k + 2]);
                    GetHeatColor((v - mn) / (mx - mn), out byte r, out byte g, out byte b);
                    ans[k + 0] = b;
                    ans[k + 1] = g;
                    ans[k + 2] = r;
                    ans[k + 3] = 255;
                }
            }
            return(ans);
        }
Exemplo n.º 6
0
 public MyImage RunToneMapping(MyImageD image)
 {
     return(new MyImage(Solve(image), image));
 }
Exemplo n.º 7
0
 protected abstract byte[] Solve(MyImageD image);