Stack Overflow em Português Asked on December 22, 2021
Para converter uma imagem em RGB para escala de cinza é relativamente fácil, basta fazer uma combinação linear( ou a média) dos 3 canais. Por exemplo :
Gray = 0.3*R +0.59*G +0.11*B
Pela expressão acima se obtém uma matriz em tons de cinza.
Minha dúvida é : como obter as matrizes R, G e B a partir da matriz Gray para se obter uma imagem colorida a partir de uma em tons de cinza ?
Se Gray = 0.3*R +0.59*G +0.11*B
é só fazer Gray=R=G=B que a imagem no ponto RGB(i,j,k) terá as 'mesmas cores' da imagem cinza.
No math/octave:
pkg load image;
imagemGray = imread('gray.png'); %ler arquivo gray
for i = 1 : 3
imagemRGB(:,:,i) = imagemGray(:,:);
endfor
Answered by user222953 on December 22, 2021
Como dito nos comentários, não tem como recuperar os valores originais apenas a partir do valor cinza.
O que você pode fazer é armazenar tanto o valor em cinza quanto o RGB.
Por exemplo, você terá uma classe Pixel (pseudo codigo):
class Pixel {
byte R
byte G
byte B
byte Gray
public Pixel(byte R, byte G, byte B) {
this.R = R
this.G = G
this.B = B
this.Gray = mean([R, G, B]) // Escala de cinza a partir da média dos valores RGB
}
}
Com essa classe você tem todas as informações necessárias pra exibir a imagem colorida ou cinza. O programa vai usar mais memória, mas é o preço que se paga por manter a informação da cor original.
Answered by Gabriel on December 22, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP