public override ActionResult Compare()
        {
            dynamic jsonObj = GetJsonObject(Request.InputStream);

            double k1, k2;

            double[] alphas = new double[] { Double.NaN, 0, 0, 0, 0, 1 };
            double[] betas  = new double[] { Double.NaN, 0.0448, 0.2856, 0.3001, 0.2363, 0.1333 };
            double[] gammas = new double[] { Double.NaN, 0.0448, 0.2856, 0.3001, 0.2363, 0.1333 };


            try
            {
                k1        = Double.Parse(jsonObj.k1);
                k2        = Double.Parse(jsonObj.k2);
                alphas[1] = Double.Parse(jsonObj.alpha1);
                alphas[2] = Double.Parse(jsonObj.alpha2);
                alphas[3] = Double.Parse(jsonObj.alpha3);
                alphas[4] = Double.Parse(jsonObj.alpha4);
                alphas[5] = Double.Parse(jsonObj.alpha5);
                betas[1]  = Double.Parse(jsonObj.beta1);
                betas[2]  = Double.Parse(jsonObj.beta2);
                betas[3]  = Double.Parse(jsonObj.beta3);
                betas[4]  = Double.Parse(jsonObj.beta4);
                betas[5]  = Double.Parse(jsonObj.beta5);
                gammas[1] = Double.Parse(jsonObj.gamma1);
                gammas[2] = Double.Parse(jsonObj.gamma2);
                gammas[3] = Double.Parse(jsonObj.gamma3);
                gammas[4] = Double.Parse(jsonObj.gamma4);
                gammas[5] = Double.Parse(jsonObj.gamma5);
            }
            catch (Exception e)
            {
                var obj = new { info = "Error", value = e.Message };
                return(Json(obj));
            }

            var msssimCalc = new Msssim();

            msssimCalc.SetParameters(k1, k2, alphas, betas, gammas);
            if (Session[Image1] == null || Session[Image2] == null)
            {
                var obj = new { info = "Error", value = "Before comparing please input two images." };
                return(Json(obj));
            }
            else
            {
                var          image1 = (Bitmap)Bitmap.FromFile((string)Session[Image1]);
                var          image2 = (Bitmap)Bitmap.FromFile((string)Session[Image2]);
                AssessResult result;
                try
                {
                    result = msssimCalc.Assess(image1, image2, UseComponent.Luma | UseComponent.Cb | UseComponent.Cr);
                }
                catch (ArgumentException e)
                {
                    var obj = new { info = "Error", value = e.Message };
                    return(Json(obj));
                }

                if (result.Luma == 1 && result.Cb == 1 && result.Cr == 1)
                {
                    var obj = new { info = "Same", value = "These two images are exactly the same. SSIM values for Luma, Cb and Cr components are all <Strong>1</Strong>." };
                    return(Json(obj));
                }
                else
                {
                    var obj = new
                    {
                        info  = "Different",
                        value = "SSIM values for Luma, Cb and Cr component are " +
                                "<Strong>" + result.Luma.ToString() + "</Strong>, " +
                                "<Strong>" + result.Cb.ToString() + "</Strong>, " +
                                "<Strong>" + result.Cr.ToString() + "</Strong> respectively"
                    };
                    return(Json(obj));
                }
            }
        }
        public override ActionResult Compare()
        {
            double k1, k2;

            double[] alphas = new double[] { Double.NaN, 0, 0, 0, 0, 1 };
            double[] betas  = new double[] { Double.NaN, 0.0448, 0.2856, 0.3001, 0.2363, 0.1333 };
            double[] gammas = new double[] { Double.NaN, 0.0448, 0.2856, 0.3001, 0.2363, 0.1333 };

            using (var bodyStream = new StreamReader(Request.Body))
            {
                var     bodyText = bodyStream.ReadToEndAsync().GetAwaiter().GetResult();
                dynamic jsonObj  = JsonConvert.DeserializeObject(bodyText);

                try
                {
                    k1        = Double.Parse(jsonObj.k1.ToString());
                    k2        = Double.Parse(jsonObj.k2.ToString());
                    alphas[1] = Double.Parse(jsonObj.alpha1.ToString());
                    alphas[2] = Double.Parse(jsonObj.alpha2.ToString());
                    alphas[3] = Double.Parse(jsonObj.alpha3.ToString());
                    alphas[4] = Double.Parse(jsonObj.alpha4.ToString());
                    alphas[5] = Double.Parse(jsonObj.alpha5.ToString());
                    betas[1]  = Double.Parse(jsonObj.beta1.ToString());
                    betas[2]  = Double.Parse(jsonObj.beta2.ToString());
                    betas[3]  = Double.Parse(jsonObj.beta3.ToString());
                    betas[4]  = Double.Parse(jsonObj.beta4.ToString());
                    betas[5]  = Double.Parse(jsonObj.beta5.ToString());
                    gammas[1] = Double.Parse(jsonObj.gamma1.ToString());
                    gammas[2] = Double.Parse(jsonObj.gamma2.ToString());
                    gammas[3] = Double.Parse(jsonObj.gamma3.ToString());
                    gammas[4] = Double.Parse(jsonObj.gamma4.ToString());
                    gammas[5] = Double.Parse(jsonObj.gamma5.ToString());
                }
                catch (Exception e)
                {
                    var obj = new { info = "Error", value = e.Message };
                    return(Json(obj));
                }
            }

            var msssimCalc = new Msssim();

            msssimCalc.SetParameters(k1, k2, alphas, betas, gammas);
            if (string.IsNullOrEmpty(this.HttpContext.Session.Get <string>(Image1)) || string.IsNullOrEmpty(this.HttpContext.Session.Get <string>(Image2)))
            {
                var obj = new { info = "Error", value = "Before comparing please input two images." };
                return(Json(obj));
            }
            else
            {
                var          image1 = (Bitmap)Bitmap.FromFile(this.HttpContext.Session.Get <string>(Image1));
                var          image2 = (Bitmap)Bitmap.FromFile(this.HttpContext.Session.Get <string>(Image2));
                AssessResult result;
                try
                {
                    result = msssimCalc.Assess(image1, image2, UseComponent.Luma | UseComponent.Cb | UseComponent.Cr);
                }
                catch (ArgumentException e)
                {
                    var obj = new { info = "Error", value = e.Message };
                    return(Json(obj));
                }

                if (result.Luma == 1 && result.Cb == 1 && result.Cr == 1)
                {
                    var obj = new { info = "Same", value = "These two images are exactly the same. SSIM values for Luma, Cb and Cr components are all <Strong>1</Strong>." };
                    return(Json(obj));
                }
                else
                {
                    var obj = new
                    {
                        info  = "Different",
                        value = "SSIM values for Luma, Cb and Cr component are " +
                                "<Strong>" + result.Luma.ToString() + "</Strong>, " +
                                "<Strong>" + result.Cb.ToString() + "</Strong>, " +
                                "<Strong>" + result.Cr.ToString() + "</Strong> respectively"
                    };
                    return(Json(obj));
                }
            }
        }