Baixe o app do Guru IA

Android e iOS

Foto de perfil

mariana

ENVIADA PELO APP
Estudos Gerais16/07/2024

Ache o erro desse corigo. import numpy as np import pandas...

Ache o erro desse corigo. import numpy as np import pandas as pd from scipy.linalg import svd import matplotlib.pyplot as plt

def matrizes(arquivo): return pd.read_csv(arquivo, header=None).values

def metodoGaussiana(coeficiente, vetor): numEquacoes = len(vetor) for coluna in range(numEquacoes): max_linha = coluna + np.argmax(np.abs(coeficiente[coluna:, coluna])) if coluna != max_linha: coeficiente[[coluna, max_linha]] = coeficiente[[max_linha, coluna]] vetor[[coluna, max_linha]] = vetor[[max_linha, coluna]] for linha in range(coluna + 1, numEquacoes): fator = coeficiente[linha, coluna] / coeficiente[coluna, coluna] coeficiente[linha, coluna:] -= fator * coeficiente[coluna, coluna:] vetor[linha] -= fator * vetor[coluna] solucao = np.zeros(numEquacoes) for coluna in range(numEquacoes - 1, -1, -1): solucao[coluna] = (vetor[coluna] - np.dot(coeficiente[coluna, coluna + 1:], solucao[coluna + 1:])) / coeficiente[coluna, coluna] return solucao

def estimarCoeficientes(valoresR, valoresG, valoresB, valoresL, valoresM, valoresN): coeficiente = np.vstack([valoresR, valoresG, valoresB]).T a = metodoGaussiana(coeficiente.copy(), valoresL.copy()) b = metodoGaussiana(coeficiente.copy(), valoresM.copy()) c = metodoGaussiana(coeficiente.copy(), valoresN.copy()) return a, b, c

def inverter_transformacao(L, M, N, A_inv): shape = L.shape L = L.flatten() M = M.flatten() N = N.flatten() transformado = np.dot(A_inv, np.vstack([L, M, N])) R = transformado[0].reshape(shape) G = transformado[1].reshape(shape) B = transformado[2].reshape(shape) return R, G, B

def resolver_questao_1(nome_arquivo_L, nome_arquivo_M, nome_arquivo_N): L = matrizes(nome_arquivo_L) M = matrizes(nome_arquivo_M) N = matrizes(nome_arquivo_N)

valoresR = np.array([0.7568627450980392, 0.6627450980392157, 0.9372549019607843])
valoresG = np.array([0.788235294117647, 0.5803921568627451, 0.7843137254901961])
valoresB = np.array([0.8784313725490196, 0.6, 0.40784313725490196])
valoresL = np.array([0.8078431372549019, 0.6143790849673203, 0.5896821045751636])
valoresM = np.array([0.8176470588235294, 0.6313725490196078, 0.5088235294117647])
valoresN = np.array([0.7725490196078431, 0.6215686274509804, 0.8607843137254902]) 

a, b, c = estimarCoeficientes(valoresR, valoresG, valoresB, valoresL, valoresM, valoresN)
A_inv = np.linalg.inv(np.array([a, b, c]))
R, G, B = inverter_transformacao(L, M, N, A_inv)

return R, G, B

def rgb_para_tons_de_cinza(R, G, B): imagem_cinza = 0.299 * R + 0.587 * G + 0.114 * B return imagem_cinza

def salvar_imagem(imagem, nome_arquivo): plt.imsave(nome_arquivo, imagem, cmap='gray', vmin=0, vmax=255)

def reduzir_svd(imagem, limiar_energia=0.70): """Reduz a imagem usando SVD, mantendo energia suficiente para redução de tamanho.""" U, s, Vt = svd(imagem, full_matrices=False) energia_total = np.sum(s) energia_acumulada = 0 k = 0

while energia_acumulada / energia_total < limiar_energia and k < len(s):
    energia_acumulada += s[k]
    k += 1

U_k = U[:, :k]
s_k = s[:k]
Vt_k = Vt[:k, :]

imagem_reduzida = np.dot(U_k, np.dot(np.diag(s_k), Vt_k))
return imagem_reduzida, k

Resolução da questão 1

nome_arquivo_L = 'Downloads/matrix_L.csv' nome_arquivo_M = 'Downloads/matrix_M.csv' nome_arquivo_N = 'Downloads/matrix_N.csv' R, G, B = resolver_questao_1(nome_arquivo_L, nome_arquivo_M, nome_arquivo_N)

Conversão para tons de cinza

imagem_cinza = rgb_para_tons_de_cinza(R, G, B) imagem_cinza_8bit = (imagem_cinza * 255).astype(np.uint8)

Salvar a imagem em tons de cinza

salvar_imagem(imagem_cinza_8bit,'C:/Users/ana caroliny/Downloads/matrizes_RGB_e_LMN.csv')

Tamanho da imagem em bytes

tamanho_imagem_bytes = imagem_cinza_8bit.nbytes print(f'Tamanho da imagem em bytes: {tamanho_imagem_bytes}')

Aplicar SVD e reduzir a imagem

imagem_cinza_reduzida, k = reduzir_svd(imagem_cinza)

Converter para 8 bits e salvar a imagem reduzida

imagem_cinza_reduzida_8bit = (imagem_cinza_reduzida * 255).astype(np.uint8) salvar_imagem(imagem_cinza_reduzida_8bit, 'C:/Users/ana caroliny/Downloads/matrizes_RGB_e_LMN.csv')

Tamanho da imagem reduzida em bytes

tamanho_imagem_reduzida_bytes = imagem_cinza_reduzida_8bit.nbytes print(f'Tamanho da imagem reduzida em bytes: {tamanho_imagem_reduzida_bytes}') print(f'Número de valores singulares utilizados: {k}')

Envie suas perguntas pelo App
Google Play
App Store
Equipe Meu Guru

Prefere sua atividade resolvida por um tutor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o tutor pelo chat
  • Garantia de 7 dias contra erros