Wrong offset for the red difference plane in CIEDE
authorltrudeau <ltrudeau@mozilla.com>
Thu, 24 Nov 2016 18:24:26 +0000 (13:24 -0500)
committerThomas Daede <daede003@umn.edu>
Wed, 30 Nov 2016 05:17:49 +0000 (21:17 -0800)
Replaces A // 4 with Adiv2, because A // 4 != (H // 2) * (W // 2)

tools/dump_ciede2000.py

index 20979fd..22ba728 100755 (executable)
@@ -15,14 +15,17 @@ box2 = np.ones((2, 2))
 
 
 def decode_y4m_buffer(frame):
-    W, H, C, buf = frame.headers['W'], frame.headers['H'], frame.headers['C'], frame.buffer
-    A, div2, dtype, scale = W * H, (H // 2, W // 2), 'uint8', 1.
+    W, H = frame.headers['W'], frame.headers['H']
+    Wdiv2, Hdiv2 = W // 2, H // 2
+    C, buf = frame.headers['C'], frame.buffer
+    A, Adiv2, div2 = W * H, Hdiv2 * Wdiv2, (Hdiv2, Wdiv2)
+    dtype, scale = 'uint8', 1.
     if C.endswith('p10'):
         dtype, scale, A = 'uint16', 4., A * 2
     Y = (np.ndarray((H, W), dtype, buf) - 16. * scale) / (219. * scale)
     if C.startswith('420'):
         Cb = (np.ndarray(div2, dtype, buf, A) - 128. * scale) / (224. * scale)
-        Cr = (np.ndarray(div2, dtype, buf, A + A // 4) - 128. * scale) / (224. * scale)
+        Cr = (np.ndarray(div2, dtype, buf, A + Adiv2) - 128. * scale) / (224. * scale)
         YCbCr444 = np.dstack((Y, np.kron(Cb, box2), np.kron(Cr, box2)))
     else:
         Cb = (np.ndarray((H, W), dtype, buf, A) - 128. * scale) / (224. * scale)