From af92097a9174866a6ce3edab66c668d87f1c1c49 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira Date: Sat, 29 Jul 2023 16:15:52 +0200 Subject: [PATCH 1/4] Fix greyscale computation and inverted coords --- digital_image_processing/dithering/burkes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/digital_image_processing/dithering/burkes.py b/digital_image_processing/dithering/burkes.py index 0804104abe58..b367a1acd417 100644 --- a/digital_image_processing/dithering/burkes.py +++ b/digital_image_processing/dithering/burkes.py @@ -41,7 +41,7 @@ def get_greyscale(cls, blue: int, green: int, red: int) -> float: >>> Burkes.get_greyscale(3, 4, 5) 3.753 """ - return 0.114 * blue + 0.587 * green + 0.2126 * red + return 0.114 * blue + 0.587 * green + 0.299 * red def process(self) -> None: for y in range(self.height): @@ -49,10 +49,10 @@ def process(self) -> None: greyscale = int(self.get_greyscale(*self.input_img[y][x])) if self.threshold > greyscale + self.error_table[y][x]: self.output_img[y][x] = (0, 0, 0) - current_error = greyscale + self.error_table[x][y] + current_error = greyscale + self.error_table[y][x] else: self.output_img[y][x] = (255, 255, 255) - current_error = greyscale + self.error_table[x][y] - 255 + current_error = greyscale + self.error_table[y][x] - 255 """ Burkes error propagation (`*` is current pixel): From 5718c2b6c96f754746725886bc4d471596b5a384 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira Date: Sat, 29 Jul 2023 16:28:00 +0200 Subject: [PATCH 2/4] Fix test --- digital_image_processing/dithering/burkes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/digital_image_processing/dithering/burkes.py b/digital_image_processing/dithering/burkes.py index b367a1acd417..d7a23dc56ead 100644 --- a/digital_image_processing/dithering/burkes.py +++ b/digital_image_processing/dithering/burkes.py @@ -39,7 +39,7 @@ def __init__(self, input_img, threshold: int): def get_greyscale(cls, blue: int, green: int, red: int) -> float: """ >>> Burkes.get_greyscale(3, 4, 5) - 3.753 + 4.185 """ return 0.114 * blue + 0.587 * green + 0.299 * red From 9e53e23261c57ef26e320c63ddceb69e0835ac2e Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira Date: Sat, 29 Jul 2023 16:42:35 +0200 Subject: [PATCH 3/4] Add test cases --- digital_image_processing/dithering/burkes.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/digital_image_processing/dithering/burkes.py b/digital_image_processing/dithering/burkes.py index d7a23dc56ead..da851dafaea5 100644 --- a/digital_image_processing/dithering/burkes.py +++ b/digital_image_processing/dithering/burkes.py @@ -40,6 +40,10 @@ def get_greyscale(cls, blue: int, green: int, red: int) -> float: """ >>> Burkes.get_greyscale(3, 4, 5) 4.185 + >>> Burkes.get_greyscale(0, 0, 0) + 0.0 + >>> Burkes.get_greyscale(255, 255, 255) + 255.0 """ return 0.114 * blue + 0.587 * green + 0.299 * red From e5dfb1890eee10cc246a205818700a7abcd6fb00 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira Date: Sat, 29 Jul 2023 18:55:27 +0200 Subject: [PATCH 4/4] Add reference to the greyscaling formula --- digital_image_processing/dithering/burkes.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/digital_image_processing/dithering/burkes.py b/digital_image_processing/dithering/burkes.py index da851dafaea5..35aedc16d404 100644 --- a/digital_image_processing/dithering/burkes.py +++ b/digital_image_processing/dithering/burkes.py @@ -45,6 +45,11 @@ def get_greyscale(cls, blue: int, green: int, red: int) -> float: >>> Burkes.get_greyscale(255, 255, 255) 255.0 """ + """ + Formula from https://en.wikipedia.org/wiki/HSL_and_HSV + cf Lightness section, and Fig 13c. + We use the first of four possible. + """ return 0.114 * blue + 0.587 * green + 0.299 * red def process(self) -> None: