O método mais fácil é reduzir a saturação para zero. Isso tira toda a cor da imagem. No entanto, pode não ser o efeito que você está procurando.
Outro método é adicionar os resultados de diferentes canais de cores em várias combinações entre si para criar um valor de intensidade único em cada local do pixel.
Então, digamos, por exemplo, você pode fazer isso:
R + G + B = I
Onde R é a intensidade vermelha em um determinado local, G é verde, B é azul e eu é sua intensidade final.
Você pode então ponderá-los:
R r1 + G g1 + b * b1 = I
Onde esses r1, g1 e b1 são constantes para cada canal.
Você também pode transformá-los, aplicando, por exemplo, uma equalização de histograma a cada canal antes da combinação:
T1 (R) * r1 + T2 (G) * g1 + T3 (B) * b1 = I
Onde o seu T1 é uma função de transferência (mapeamento de um conjunto de valores de pixels para outro). Funções de transferência simples são coisas como equalizações de histograma, ajustes de contraste e outras modificações de pixel único.
Isso tudo é do ponto de vista da matemática, ou seja, você está fazendo modificações em um programa ou em algo como o Matlab. Você também pode ver como as funções de transferência podem se tornar cada vez mais complexas, combinando informações da vizinhança e coisas do gênero.
Se você não quiser seguir esse caminho (e eu não o faço, com frequência, de qualquer maneira), existem soluções prontas para uso, no Lightroom ou Nik. Aqui está um bom artigo de revisão sobre os dois últimos, e este artigo e este artigo também são bons iniciadores.