Baixe o app do Guru IA
Android e iOS

mariana
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}')
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}')