1

有谁知道,我如何改变彩色图像的亮度和对比度。我知道vtkImageMapToWindowLevel,但是在这个类中设置图像的级别或窗口后,彩色图像变为灰度。

感谢您的回答;

4

1 回答 1

3

根据定义,彩色图像已经进行了颜色映射,如果不进行分解和重组,就无法更改图像的亮度/对比度。

首先,以您想要的任何方式定义一对称为亮度和对比度的数字。通常,我会将亮度作为最大值,将对比度作为最小值和最大值之间的比率。同样,如果要使用 Window/Level 语义,“level”是最小标量值,window 是最大值和最小值之间的差。

接下来,您可以使用亮度和对比度找到标量范围 - 所需输出图像中的最小值和最大值。如果您正在应用亮度/对比度,则标量范围为:

  1. 最大值 = 亮度
  2. 最小值 = 最大值 / 对比度

假设一个颜色查找表 (LUT),具有一系列不同比例值的颜色,例如,在 0 到 1 的范围内。现在,由于我们知道亮度和对比度,我们可以设置具有较低值的 LUT(范围0) 映射到“最小值”,上限值(范围 1)映射到“最大值”。完成后,合适的类,如 vtkImageMapToColors 可以获取单分量输入并将其映射到 3 或 4 分量图像。

现在,所有这些只能发生在单分量图像上,因为颜色 LUT 类(vtkScalarsToColors 和相关类)仅在单分量图像上定义。

如果您可以访问原始的单组件图像,并且您正在使用 vtkImageMapToColors 或一些类似的类,我建议您在那个阶段处理它。

如果你不这样做,我能想到一种方法:

  1. 使用 vtkImageExtractComponents 将三个通道提取为三个不同的图像(您需要三个实例,每个实例都以原始图像作为输入)。
  2. 使用 vtkImageShiftScale 独立缩放 3 个通道(按亮度移动,按对比度缩放)
  3. 使用 vtkImageAppendComponents 合并通道

另一种可能性是使用 vtkImageMagnitude,它将图像转换回灰度(通过将三个通道的大小放在一起),并使用 vtkImageMapToColors 和任何 vtkScalarsToColors 类作为查找表重新应用颜色表。

如果您的图像是真实照片或类似的东西,其中颜色来自某些 3 分量来源,第一种方法会更好,如果您的输入图像已经使用假颜色(例如来自 IR 相机的图像),第二种方法会更好,或一些程序生成的已被图像映射的分形)。

于 2011-06-18T15:04:53.480 回答