Domanda

Chiunque sappia, come posso cambiare la luminosità e il contrasto dell'immagine a colori. Conosco VtKIMageMapTowInIdlevel, ma dopo aver impostato il livello o la finestra dell'immagine in questa classe, l'immagine a colori diventa scala di grigi.

Grazie per le risposte;

È stato utile?

Soluzione

Per definizione, un'immagine a colori è già mappata a colori e non è possibile modificare la luminosità/contrasto dell'immagine senza decomposizione e ricomposizione.

Innanzitutto, definisci una coppia di numeri chiamati luminosità e contrasto in qualunque modo desideri. Normalmente, prenderei la luminosità come valore massimo e contrasto come rapporto tra minimo e massimo. Allo stesso modo, se si desidera utilizzare la semantica finestra/livello, "livello" è il minimo Valore scalare e la finestra è il differenza tra massimo e minimo.

Successivamente, trovi l'intervallo scalare: i valori minimi e massimi nell'immagine di output desiderata, usando la luminosità e il contrasto. Se stai applicando luminosità/contrasto, la gamma scalare è:

  1. Massimo = luminosità
  2. Minimo = massimo / contrasto

Supponiamo che una tabella di ricerca a colori (LUT), con una serie di colori a diversi valori proporzionali, diciamo, nell'intervallo da 0 a 1. Ora, poiché conosciamo la luminosità e il contrasto, possiamo impostare il LUT con il valore inferiore (intervallo 0) mappatura a "minimo" e il valore superiore (intervallo 1) mappatura al "massimo". Quando questo è fatto, una classe adatta, come VtkimageMaptOnOur, può prendere l'ingresso a componente singolo e mapparla a un'immagine del componente 3 o 4.

Ora, tutto ciò può accadere solo per un'immagine a singolo componente, poiché le classi di LUT Color (VTKSCalarsocolors e le classi correlate) sono definite solo su immagini a componente singolo.

Se hai accesso all'immagine originale a un componente e stai usando vtkimagemaptocolors o qualche classe simile, suggerirei di gestirla in quella fase.

Se non lo fai, c'è un modo per pensare:

  1. Estrai i tre canali come tre diverse immagini utilizzando VtKImageExtractComponents (avrai bisogno di tre istanze, ciascuna con l'immagine originale come input).
  2. Scale in modo indipendente i 3 canali usando Vtkimageshiftscale (spostamento per luminosità, scala al contrario)
  3. Combina i canali indietro usando VtkimageAppendComponents

Un'altra possibilità è quella di utilizzare VTKIMAGEMAGNITUDE, che convertirà l'immagine in scala grigia (prendendo insieme l'entità dei tre canali) e riapplicazione della tabella di colore usando VtkimageMaptocolor e una delle classi VTKSCalarsocolori come tabella di ricerca.

Il primo metodo è migliore se la tua immagine è una fotografia reale o qualcosa di simile, in cui i colori provengono da una sorgente a 3 componenti e il secondo funzionerebbe meglio se l'immagine di input sta già usando i falsi colori (diciamo un'immagine da una fotocamera IR o alcuni frattali generati proceduralmente che è stato mappato all'immagine).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top