<jupyter_start><jupyter_text>Simulador de DaltonismoComo converter uma imagem normal para simular um efeito de daltonismo<NAME> e <NAME><jupyter_code>%matplotlib inline
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('metro_artigo.jpeg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.title("Imagem Original")
plt.imshow(img)
def protanopia(img):
    imagem = img.copy()
    
    #Passo 1
    imagem = (imagem/255)**2.2
    
    #Passo 2
    imagem = (0.992052*imagem) + 0.003974
    
    #Passo 3
    rgb_to_lms = np.array([[17.8824, 43.5161, 4.11935],[3.45565, 27.1554, 3.86714], [0.0299566, 0.184309, 1.46709]])
    h, w, d = imagem.shape
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(rgb_to_lms, imagem[i][j])
    
    #Passo 4
    lms_matrix_protanopia = np.array([[0, 2.02344, -2.52581],[0, 1, 0],[0, 0, 1]])
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(lms_matrix_protanopia, imagem[i][j])
    
    #Passo 5
    inverse_rgb_to_lms = np.array([[0.080944, -0.130504, 0.116721],[-0.0102485, 0.0540194, -0.113615],[-0.000365294, -0.00412163, 0.693513]])
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(inverse_rgb_to_lms, imagem[i][j])
    
    #Passo 6
    imagem = 255*imagem**(1/2.2)
    imagem = np.round(imagem, 0)
    imagem = imagem.astype(int)
    plt.title("Imagem simulando Protanopia")
    plt.imshow(imagem)
    
protanopia(img)
def deuteranopia(img):
    imagem = img.copy()
    
    #Passo 1
    imagem = (imagem/255)**2.2
    
    #Passo 2
    imagem = (0.957237*imagem) + 0.0213814
    
    #Passo 3
    rgb_to_lms = np.array([[17.8824, 43.5161, 4.11935],[3.45565, 27.1554, 3.86714], [0.0299566, 0.184309, 1.46709]])
    h, w, d = imagem.shape
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(rgb_to_lms, imagem[i][j])
    
    #Passo 4
    lms_matrix_deuteranopia = np.array([[1, 0, 0],[0.494207, 0, 1.24827],[0, 0, 1]])
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(lms_matrix_deuteranopia, imagem[i][j])
    
    #Passo 5
    inverse_rgb_to_lms = np.array([[0.080944, -0.130504, 0.116721],[-0.0102485, 0.0540194, -0.113615],[-0.000365294, -0.00412163, 0.693513]])
    for i in range(h):
        for j in range(w):
            imagem[i][j] = np.dot(inverse_rgb_to_lms, imagem[i][j])
    
    #Passo 6
    imagem = 255*imagem**(1/2.2)
    imagem = np.round(imagem, 0)
    imagem = imagem.astype(int)
    plt.title("Imagem simulando Deuteranopia")
    plt.imshow(imagem)
    
deuteranopia(img)<jupyter_output><empty_output><jupyter_text>Como validar esses resultados? Como sabemos que esse simulador realmente representa a experiência sensorial de uma pessoa com daltonismo?* R: Podemos validar esses resultados através das imagens do artigo, ou até mesmo colocando um "color wheel" e comparando as cores para verificar que se trata de protanopia ou deuteranopia Quais as aplicações deste trabalho? Como você usaria esta técnica para melhorar o design de um produto?* R: Esse trabalho poderia ser aplicado no design de avisos ou materiais de segurança, com o objetivo de garantir que qualquer usuário poderia ler ou entender qualquer conteúdo, como por exemplo placas de piso molhado, aviso de saída de emergência, aviso de EPI do laboratório. Além disso, o simulador permitiria verificar as cores de um produto, deixando-o atraente para qualquer usuário, seja ele daltônico ou não.  Simulador de daltonismo com "color wheel"<jupyter_code>img_wheel = cv2.imread('color_wheel.png')
img_wheel = cv2.cvtColor(img_wheel, cv2.COLOR_BGR2RGB)
plt.title("Imagem Original")
plt.imshow(img_wheel)
deuteranopia(img_wheel)
protanopia(img_wheel)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1300684570826751, 'fraction_numerical': 0.09662980516061084, 'mean_word_length': 3.396990740740741, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '284348', 'license': 'MIT', 'n_tokens_mistral': 1789, 'n_tokens_neox': 1543, 'n_words': 370, 'path': 'Projeto1-1/Projeto1_Borba_Graicer.ipynb', 'repo_name': 'filipefborba/viscomp_2018', 'size': '3815'}