Skip to content

Instantly share code, notes, and snippets.

@crackwitz
Last active May 28, 2017 23:34
Show Gist options
  • Save crackwitz/e221643f5a940e1911f719b4fbe26ce6 to your computer and use it in GitHub Desktop.
Save crackwitz/e221643f5a940e1911f719b4fbe26ce6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import numpy as np
import cv2
srcname = 'KIjDIBS'
source = cv2.imread('{}.png'.format(srcname))
height,width = source.shape[:2]
source = (source / 255) ** 2.2
mean, evecs = cv2.PCACompute( source.reshape((-1,3)), mean=None )
transformed = source.reshape((-1,3)) * np.matrix( [evecs[2]] ).T
transformed = np.array(transformed)
transformed.shape = (height,width)
# something to play with
#transformed = cv2.medianBlur(transformed.astype(np.float32), ksize=7)
#autocontrast, normalizing to N(0,1)
transformed = transformed - transformed.mean()
transformed *= 1 / transformed.std()
# work on these values
# this is just for mapping to a good range of brightness values for viewing
# factor for contrast, offset for "threshold"
transformed = -0.1 * transformed + 0.1
tr_u8 = (transformed.clip(0,1) * 255).astype(np.uint8)
tr_u8 = cv2.medianBlur(tr_u8, ksize=7)
cv2.imwrite("{}-mapped.png".format(srcname), tr_u8)
cv2.imshow("transformed", tr_u8)
cv2.waitKey()
cv2.destroyAllWindows()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment