|
@@ -22,47 +22,79 @@
|
|
|
(click to toggle)
|
|
|
</label>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <label>
|
|
|
- <input type="radio" name="metricKind" value="whole" />
|
|
|
- Set Comparison
|
|
|
- </label>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <label>
|
|
|
- <input type="radio" name="metricKind" value="mean" />
|
|
|
- Mean Comparison
|
|
|
- </label>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <label>
|
|
|
- <input type="radio" name="metricKind" value="statistic" />
|
|
|
- Set Statistics
|
|
|
- </label>
|
|
|
- </div>
|
|
|
- <select name="whole" disabled>
|
|
|
- <option value="sigma">RMS Deviation (σ)</option>
|
|
|
- <option value="bigTheta">Cosine Difference (Θ)</option>
|
|
|
- <option value="alpha">Geometric Difference (α)</option>
|
|
|
- </select>
|
|
|
- <select name="mean" disabled>
|
|
|
- <option value="theta">Angular Difference (θ)</option>
|
|
|
- <option value="phi">Hue Azimuth (ϕ)</option>
|
|
|
- <option value="delta">Euclidean (δ)</option>
|
|
|
- <option value="manhattan">Manhattan (M)</option>
|
|
|
- <option value="ch">Chebyshev (Ч)</option>
|
|
|
- <option value="lightnessDiff">Lightness (ℓ)</option>
|
|
|
- </select>
|
|
|
- <select name="statistic" disabled>
|
|
|
- <option value="inertia">Inertia (I)</option>
|
|
|
- <option value="variance">Variance (V)</option>
|
|
|
- <option value="muNuAngle">Mu-Nu Angle (Φ)</option>
|
|
|
- <option value="size">Size (N)</option>
|
|
|
- <option value="lightness">Mean Lightness (L)</option>
|
|
|
- <option value="chroma">Mean Chroma (C)</option>
|
|
|
- <option value="importance">Visual Importance (β)</option>
|
|
|
- </select>
|
|
|
- <output name="sortMetric" hidden aria-hidden="true"></output>
|
|
|
+
|
|
|
+ <fieldset>
|
|
|
+ <legend>Evaluation Function</legend>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="radio" name="metricKind" value="whole" />
|
|
|
+ Set Comparison
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="radio" name="metricKind" value="mean" />
|
|
|
+ Mean Comparison
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="radio" name="metricKind" value="statistic" />
|
|
|
+ Set Statistics
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <select name="whole" disabled>
|
|
|
+ <option value="sigma">RMS Deviation (σ)</option>
|
|
|
+ <option value="bigTheta">Cosine Difference (Θ)</option>
|
|
|
+ <option value="alpha">Geometric Difference (α)</option>
|
|
|
+ </select>
|
|
|
+ <select name="mean" disabled>
|
|
|
+ <option value="theta">Angular Difference (θ)</option>
|
|
|
+ <option value="phi">Hue Azimuth (ϕ)</option>
|
|
|
+ <option value="delta">Euclidean (δ)</option>
|
|
|
+ <option value="manhattan">Manhattan (M)</option>
|
|
|
+ <option value="ch">Chebyshev (Ч)</option>
|
|
|
+ <option value="lightnessDiff">Lightness (ℓ)</option>
|
|
|
+ </select>
|
|
|
+ <select name="statistic" disabled>
|
|
|
+ <option value="inertia">Inertia (I)</option>
|
|
|
+ <option value="variance">Variance (V)</option>
|
|
|
+ <option value="muNuAngle">Mu-Nu Angle (Φ)</option>
|
|
|
+ <option value="size">Size (N)</option>
|
|
|
+ <option value="lightness">Mean Lightness (L)</option>
|
|
|
+ <option value="chroma">Mean Chroma (C)</option>
|
|
|
+ <option value="importance">Visual Importance (β)</option>
|
|
|
+ </select>
|
|
|
+ <output name="sortMetric" hidden aria-hidden="true"></output>
|
|
|
+ </fieldset>
|
|
|
+
|
|
|
+ <fieldset>
|
|
|
+ <legend>Cardinality Terms</legend>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="checkbox" name="clusterSize" />
|
|
|
+ Cluster Size
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="checkbox" name="invClusterSize" />
|
|
|
+ Inverse Cluster Size
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="checkbox" name="totalSize" />
|
|
|
+ Image Size
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="checkbox" name="invTotalSize" />
|
|
|
+ Inverse Image Size
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ </fieldset>
|
|
|
</template>
|
|
|
|
|
|
<template id="scale-form-template">
|
|
@@ -111,24 +143,115 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
- <form action="javascript:void(0);" id="sortControl" autocomplete="off">
|
|
|
- <div>
|
|
|
- <label>
|
|
|
- <div>Target Color</div>
|
|
|
- <input
|
|
|
- name="colorText"
|
|
|
- type="text"
|
|
|
- maxlength="7"
|
|
|
- oninput="onColorChange(event.target.value)"
|
|
|
- />
|
|
|
+ <form action="javascript:void(0);" id="sortFunction" autocomplete="off">
|
|
|
+ <div class="fn-group fn-group-outer">
|
|
|
+ <label class="fn-minmax">
|
|
|
+ <input type="checkbox" name="sortOrder" role="button" hidden />
|
|
|
+ <div class="fn-minmax-toggle">
|
|
|
+ <span>min</span>
|
|
|
+ <span>max</span>
|
|
|
+ </div>
|
|
|
</label>
|
|
|
- <input
|
|
|
- name="colorPicker"
|
|
|
- type="color"
|
|
|
- onchange="onColorChange(event.target.value)"
|
|
|
- />
|
|
|
- <button type="button" onclick="onColorChange(randomColor())">Random Color</button>
|
|
|
+ <span class="fn-bracket">[</span>
|
|
|
+ <div
|
|
|
+ class="fn-group"
|
|
|
+ onchange="event.target.parentNode.classList.toggle('fn-part--disabled')"
|
|
|
+ >
|
|
|
+ <label class="fn-part">
|
|
|
+ <input type="checkbox" name="useBestCluster" checked />
|
|
|
+ <output name="metricSymbolP">α</output>(P)
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part">
|
|
|
+ <input type="checkbox" name="useWholeImage" checked />
|
|
|
+ <output name="metricSymbolB">α</output>(B)
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="clusterSize" />
|
|
|
+ |B|
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part">
|
|
|
+ <input type="checkbox" name="invClusterSize" checked />
|
|
|
+ |B|<sup>-1</sup>
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part">
|
|
|
+ <input type="checkbox" name="totalSize" checked />
|
|
|
+ |P|
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="invTotalSize" />
|
|
|
+ |P|<sup>-1</sup>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <span class="fn-bracket">]</span>
|
|
|
</div>
|
|
|
+ </form>
|
|
|
+
|
|
|
+ <form action="javascript:void(0);" id="clusterFunction" autocomplete="off">
|
|
|
+ <div class="fn-group">
|
|
|
+ <span>where B = </span>
|
|
|
+ <label class="fn-minmax fn-minmax--wide">
|
|
|
+ <input type="checkbox" name="sortOrder" role="button" checked hidden />
|
|
|
+ <div class="fn-minmax-toggle">
|
|
|
+ <span>argmin</span>
|
|
|
+ <span>argmax</span>
|
|
|
+ </div>
|
|
|
+ </label>
|
|
|
+ <span class="fn-bracket">[</span>
|
|
|
+ <div
|
|
|
+ class="fn-group"
|
|
|
+ onchange="event.target.parentNode.classList.toggle('fn-part--disabled')"
|
|
|
+ >
|
|
|
+ <span class="fn-part fn-part--fixed">
|
|
|
+ <output name="metricSymbol">β</output>(K)
|
|
|
+ </span>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="clusterSize" />
|
|
|
+ |K|
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="invClusterSize" />
|
|
|
+ |K|<sup>-1</sup>
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="totalSize" />
|
|
|
+ |P|
|
|
|
+ </label>
|
|
|
+ ⋅
|
|
|
+ <label class="fn-part fn-part--disabled">
|
|
|
+ <input type="checkbox" name="invTotalSize" />
|
|
|
+ |P|<sup>-1</sup>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <span class="fn-bracket">]</span>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+
|
|
|
+ <form action="javascript:void(0);" id="colorSelect" autocomplete="off">
|
|
|
+ <label for="color-input-text">Target Color</label>
|
|
|
+ <input
|
|
|
+ id="color-input-text"
|
|
|
+ name="colorText"
|
|
|
+ type="text"
|
|
|
+ maxlength="7"
|
|
|
+ oninput="onColorChange(event.target.value)"
|
|
|
+ />
|
|
|
+ <button type="button" onclick="onColorChange(randomColor())">Random Color</button>
|
|
|
+ <input
|
|
|
+ name="colorPicker"
|
|
|
+ type="color"
|
|
|
+ onchange="onColorChange(event.target.value)"
|
|
|
+ />
|
|
|
+ </form>
|
|
|
+
|
|
|
+ <form action="javascript:void(0);" id="sortControl" autocomplete="off">
|
|
|
<div>
|
|
|
<label>
|
|
|
<div>Results: <output name="resultsToDisplayOutput">10</output></div>
|
|
@@ -145,29 +268,41 @@
|
|
|
/>
|
|
|
</label>
|
|
|
</div>
|
|
|
- <fieldset onchange="updateSort()">
|
|
|
- <legend>Color Space</legend>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input
|
|
|
+ type="radio"
|
|
|
+ onchange="updateSort()"
|
|
|
+ name="colorSpace"
|
|
|
+ value="jab"
|
|
|
+ checked
|
|
|
+ />
|
|
|
+ CIECAM
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>
|
|
|
+ <input type="radio" onchange="updateSort()" name="colorSpace" value="rgb" />
|
|
|
+ sRGB
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <div>Best Match</div>
|
|
|
+ <fieldset name="metric" onchange="onMetricChange(event.target.form.elements)">
|
|
|
+ <!-- template mount point -->
|
|
|
+ <legend>Sort By</legend>
|
|
|
<div>
|
|
|
<label>
|
|
|
- <input type="radio" name="colorSpace" value="jab" checked />
|
|
|
- CIECAM
|
|
|
+ <input type="checkbox" name="useBestCluster" />
|
|
|
+ Best Cluster
|
|
|
</label>
|
|
|
</div>
|
|
|
<div>
|
|
|
<label>
|
|
|
- <input type="radio" name="colorSpace" value="rgb" />
|
|
|
- sRGB
|
|
|
+ <input type="checkbox" name="useWholeImage" />
|
|
|
+ Whole Image
|
|
|
</label>
|
|
|
</div>
|
|
|
</fieldset>
|
|
|
- <fieldset name="metric" onchange="onMetricChange(event.target.form.elements)">
|
|
|
- <legend>Distance Metric</legend>
|
|
|
- <!-- template mount point -->
|
|
|
- </fieldset>
|
|
|
- <fieldset name="rescaleSection" onchange="updateSort()">
|
|
|
- <legend>Scaled By</legend>
|
|
|
- <!-- template mount point -->
|
|
|
- </fieldset>
|
|
|
<fieldset
|
|
|
onchange="
|
|
|
const elements = event.target.form.elements;
|
|
@@ -176,30 +311,34 @@
|
|
|
onMetricChange(elements);
|
|
|
"
|
|
|
>
|
|
|
- <legend>Compare With</legend>
|
|
|
+ <legend>Comparison Value</legend>
|
|
|
<div>
|
|
|
<label>
|
|
|
<input type="radio" name="useClusters" value="off" />
|
|
|
- Whole Image
|
|
|
+ Distance of Whole Image
|
|
|
</label>
|
|
|
</div>
|
|
|
<div>
|
|
|
<label>
|
|
|
<input type="radio" name="useClusters" value="on" />
|
|
|
- Best Cluster
|
|
|
+ Distance of Best Cluster
|
|
|
</label>
|
|
|
</div>
|
|
|
<div>
|
|
|
<label>
|
|
|
<input type="radio" name="useClusters" value="mult" checked />
|
|
|
- Best Cluster Times Whole
|
|
|
+ Product of Distance Values
|
|
|
</label>
|
|
|
</div>
|
|
|
</fieldset>
|
|
|
+ <fieldset name="rescaleSection" onchange="updateSort()">
|
|
|
+ <legend>Scaled By</legend>
|
|
|
+ <!-- template mount point -->
|
|
|
+ </fieldset>
|
|
|
</form>
|
|
|
|
|
|
<form action="javascript:void(0);" id="clusterControl" autocomplete="off">
|
|
|
- <div>Cluster Ranking</div>
|
|
|
+ <div>Best Cluster</div>
|
|
|
<fieldset name="metric" onchange="onMetricChange(event.target.form.elements)">
|
|
|
<legend>Distance Metric</legend>
|
|
|
<!-- template mount point -->
|