TransWikia.com

Como converter imagem de cinza para RGB?

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 ?

2 Answers

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP