aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/BatchConversionCsvModelOut.cs
blob: f4881ce0082c5b70bb5a3dcff138d2c90d5e44a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tango.MachineStudio.RML.Models
{
    public class BatchConversionCsvModelOut
    {
        public string Index { get; set; }
        public double L { get; set; }
        public double A { get; set; }
        public double B { get; set; }

        public double SuggestionL { get; set; }
        public double SuggestionA { get; set; }
        public double SuggestionB { get; set; }
        public double SuggestionDeltaE { get; set; }

        public double OutputL { get; set; }
        public double OutputA { get; set; }
        public double OutputB { get; set; }
        public double OutputDeltaE { get; set; }

        public double Cyan { get; set; }
        public double Magenta { get; set; }
        public double Yellow { get; set; }
        public double Black { get; set; }

        public double LightCyan { get; set; }
        public double LightMagenta { get; set; }
        public double LightYellow { get; set; }

        public bool OutOfGamut { get; set; }

        public static double MirtaDeltaE(double L1, double a1, double b1, double L2, double a2, double b2)
        {
            double h1 = Math.Atan2(b1, a1) * (180 / Math.PI);
            if (h1 < 0)
                h1 = h1 + 360;
            double h2 = Math.Atan2(b2, a2) * (180 / Math.PI);
            if (h2 < 0)
                h2 = h2 + 360;
            double refX_H = h1;
            //chroma calculation
            double refX_C = Math.Sqrt(a1 * a1 + b1 * b1);
            //reference SL parameter
            double refX_SL;
            if (L1 <= 16)
                refX_SL = 0.511;
            else
                refX_SL = L1 * 0.040975 / (1 + 0.01765 * L1);
            //reference SC parameter
            double refX_SC = (0.638 + 0.0638 * refX_C / (1 + 0.0131 * refX_C));
            //reference CQ parameter
            double refX_CQ = Math.Pow(refX_C, 4);
            //reference F parameter
            double refX_F = Math.Sqrt(refX_CQ / (refX_CQ + 1900));
            // reference T parameter
            double refX_T = 0;
            if ((refX_H > 164) & (refX_H < 345))
                refX_T = 0.56 + Math.Abs(0.2 * Math.Cos(Math.PI * (refX_H + 168) / 180));
            else if ((refX_H >= 345) | (refX_H <= 164))
                refX_T = 0.36 + Math.Abs(0.4 * Math.Cos(Math.PI * (refX_H + 35) / 180));
            // reference SH parameter
            double refX_SH = refX_SC * (refX_T * refX_F + 1 - refX_F);

            //sample parameter calculations
            //hue calculation
            double samX_H = h2;
            //chroma calculation     
            double samX_C = Math.Sqrt(a2 * a2 + b2 * b2);

            double dL = L1 - L2;
            double dC = samX_C - refX_C;
            double da = a1 - a2;
            double db = b1 - b2;
            double dH = Math.Sqrt(Math.Max(da * da + db * db - dC * dC, 0.0));

            double dECMC = Math.Sqrt(Math.Pow(dL / (2 * refX_SL), 2) + Math.Pow(dC / refX_SC, 2) + Math.Pow(dH / refX_SH, 2));
            return dECMC;

        }
    }
 

}