From b78f3c29080bdbe66ff7dbd952107474fe6e0de6 Mon Sep 17 00:00:00 2001 From: Max Sponsel Date: Thu, 17 Sep 2020 11:41:00 +0200 Subject: [PATCH] Erster Daltonizationalgorithmus --- .../rot-gruen-schwaeche-test-bild.jpg | Bin 0 -> 32014 bytes Code/Farbaenderung.py | 47 +++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 Beispielbilder/rot-gruen-schwaeche-test-bild.jpg diff --git a/Beispielbilder/rot-gruen-schwaeche-test-bild.jpg b/Beispielbilder/rot-gruen-schwaeche-test-bild.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5acf1c8eb0c485c4af14cf9722a850ad7788f3c GIT binary patch literal 32014 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
    EVJEl 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 literal 0 HcmV?d00001 diff --git a/Code/Farbaenderung.py b/Code/Farbaenderung.py index e75d756..2aa7476 100644 --- a/Code/Farbaenderung.py +++ b/Code/Farbaenderung.py @@ -1,7 +1,6 @@ import numpy as np import cv2 - - +import sys def createGammaLookup(): return np.array([removeGammaCorrection(i) for i in np.arange(0, 256)]).astype("float64") @@ -87,3 +86,47 @@ class Dyschromasie: return self.sim_image + +script_dir = sys.path[0] +path = script_dir[:-4] + "Beispielbilder\Fall_trees.jpg" +image = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB) + +rows, cols, kanaele = image.shape + +p = Dyschromasie(image, rows, cols, kanaele, 1, 'p') + +simulated_image = p.Simulate() + +E = np.copy(simulated_image) +for i in range(rows): + for j in range(cols): + for x in range(3): + E[i, j, x] = abs(int(simulated_image[i, j, x]) - int(image[i, j, x])) + +ERR = np.zeros_like(image) + +err2mod = np.array([[0,0,0],[0.7,1,0],[0.7,0,1]]) + +for i in range(rows): + for j in range(cols): + err = E[i,j,:3] + ERR[i,j,:3] = np.dot(err2mod, err) + +dtpn = np.copy(image) + +for i in range(rows): + for j in range(cols): + for x in range(3): + dtpn[i, j, x] = (int(ERR[i, j, x]) + int(image[i, j, x])) + +for i in range(rows): + for j in range(cols): + dtpn[i, j, 0] = max(0, dtpn[i, j, 0]) + dtpn[i, j, 0] = min(255, dtpn[i, j, 0]) + dtpn[i, j, 1] = max(0, dtpn[i, j, 1]) + dtpn[i, j, 1] = min(255, dtpn[i, j, 1]) + dtpn[i, j, 2] = max(0, dtpn[i, j, 2]) + dtpn[i, j, 2] = min(255, dtpn[i, j, 2]) + +cv2.imshow('Dalt_Img', cv2.cvtColor(dtpn, cv2.COLOR_RGB2BGR)) +cv2.waitKey(0) \ No newline at end of file