diff --git a/mo/jobs/protocols.py b/mo/jobs/protocols.py
index 3ba6498f3076aa9eabc70ef11739709500a80bc4..8c2db41304f288e7c1f07b57c855ee2f2affffe6 100644
--- a/mo/jobs/protocols.py
+++ b/mo/jobs/protocols.py
@@ -20,6 +20,7 @@ from mo.jobs import TheJob, job_handler
 from mo.util import logger, part_path, tex_arg
 import mo.util_format
 
+SCAN_BW_THRESHOLD = 180  # 0-255, pixel nad toto číslo = bílý pixel
 
 #
 # Job create_protocols: Vygeneruje formuláře protokolů
@@ -355,10 +356,10 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult:
         )
         del page_img
 
-        full_img = full_img.convert('L')               # Grayscale
-        full_size = full_img.size
+        (full_width, full_height) = full_img.size
+        test_img = full_img.convert('L').point(lambda x: 255 if x > SCAN_BW_THRESHOLD else 0, mode='1')
 
-        codes = pyzbar.decode(full_img, symbols=[pyzbar.ZBarSymbol.QRCODE])
+        codes = pyzbar.decode(test_img, symbols=[pyzbar.ZBarSymbol.QRCODE])
         codes = [c for c in codes if c.type == 'QRCODE' and c.data.startswith(b'MO:')]
         qr = None
         if codes:
@@ -372,7 +373,7 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult:
 
         full_img.save(f'{args.out_prefix}-{page_nr:04d}-full.png')
 
-        small_img = full_img.resize((full_size[0] // 4, full_size[1] // 4))
+        small_img = full_img.resize((full_width // 4, full_height // 4))
         small_img.save(f'{args.out_prefix}-{page_nr:04d}-small.png')
 
         logger.debug(f'Scan: Strana #{page_nr}: {qr}')