VTK图像处理颜色映射(三)



颜色映射的操作对象是数据集中的标量属性。它是一种常用的 标量算法。它会根据数据集中各个部分不同的标量值,对各个部分上不同的颜色。与此相关的另一种上色方法是控制演员的颜色属性,但这样整个图形只有单一的颜色,这显然没有颜色映射方法灵活。

下面会介绍一下:

ScalarBar的用法,可以根据自己的需要来设置scalarBar的属性。
ScalarBar和lookupTable结合使用方法

 

 

 

1 ScalarBar的用法


virtual int IsA(const char * type) 如果此类与指定类的类型(或子类)相同,则返回1。

void PrintSelf(ostream&os,vtkIndent indent) print调用的方法打印有关对象的信息,包括超类。

int HasTranslucentPolygonalGeometry() 这个道具有一些半透明的多边形几何形状吗?

void ReleaseGraphicsResources(vtkWindow *) 释放此actor所使用的所有图形资源。

virtual void GetScalarBarRect(int rect [4],vtkViewport * viewport) 使用视口坐标中标量条的尺寸填充rect。

void ShallowCopy(vtkProp * prop) vtkProp的浅拷贝。

int RenderOpaqueGeometry(vtkViewport * viewport) 将标量栏和注释文本绘制到屏幕上。

int RenderTranslucentPolygonalGeometry(vtkViewport *) 将标量栏和注释文本绘制到屏幕上。…

int RenderOverlay(vtkViewport * viewport) 将标量栏和注释文本绘制到屏幕上

virtual void SetLookupTable(vtkScalarsToColors *) 设置/获取要使用的查找表。

virtual vtkScalarsToColors * GetLookupTable() 设置/获取要使用的查找表。

virtual void SetUseOpacity(vtkTypeBool) 显示不透明度。

virtual GetUseOpacity() 获取不透明度。

virtual void UseOpacityOn() 显示不透明度。

virtual void UseOpacityOff()不显示不透明度。.

virtual void SetMaximumNumberOfColors(int) 设置/获取要显示的最大标量条段数。

virtual int GetMaximumNumberOfColors() 设置/获取要显示的最大标量条段数。

virtual void SetNumberOfLabels(int) 设置/获取要显示的刻度标签数。

virtual int GetNumberOfLabels() 设置/获取要显示的刻度标签数。

virtual void SetOrientation(int) 控制标量栏的方向。

virtual int GetOrientation()获取标量栏的方向。

void SetOrientationToHorizo​​ntal() 控制标量栏的方向。水平

void SetOrientationToVertical() 控制标量栏的方向。垂直

virtual void SetTitleTextProperty(vtkTextProperty * p) 设置/获取标题文本属性。

virtual vtkTextProperty * GetTitleTextProperty() 设置/获取标题文本属性。

virtual void SetLabelTextProperty(vtkTextProperty * p) 设置/获取标签文本属性

virtual vtkTextProperty * GetLabelTextProperty() 设置/获取标签文本属性。

virtual void SetAnnotationTextProperty(vtkTextProperty * p) 设置/获取注释文本属性。

virtual vtkTextProperty * GetAnnotationTextProperty() 设置/获取注释文本属性。

virtual void SetLabelFormat(const char *) 设置/获取在标量栏上打印标签的格式

virtual char* GetLabelFormat() 设置/获取在标量栏上打印标签的格式。

virtual void SetTitle(const char *) 设置/获取标量栏的标题。

virtual char* GetTitle() 设置/获取标量栏的标题。.

virtual void SetComponentTitle(const char *) 设置/获取所选组件的标题。

virtual char* GetComponentTitle() 设置/获取所选组件的标题。

virtual void SetTextureGridWidth(double) 设置纹理网格的宽度。

virtual double GetTextureGridWidth() 设置纹理网格的宽度。

vitrual vtkTexturedActor2D * GetTextureActor() 获取纹理actor。

virtual void SetTextPosition(int) 标题和刻度标记是否应在标量栏之前?这是沿垂直于标量条长轴的视口坐标方向测量的,而不是读取方向。

virtual int GetTextPosition() 获取标记位置

virtual void SetTextPositionToPrecedeScalarBar() 标题和刻度标记是否应在标量栏之前?这是沿垂直于标量条长轴的视口坐标方向测量的,而不是读取方向。

virtual void SetTextPositionToSucceedScalarBar()

virtual void SetMaximumWidthInPixels(int) 设置/获取最大宽度和高度(以像素为单位)。

virtual int GetMaximumWidthInPixels() 设置/获取最大宽度和高度(以像素为单位)。

virtual void SetMaximumHeightInPixels(int) 设置/获取最大宽度和高度(以像素为单位)。

virtual int GetMaximumHeightInPixels() 设置/获取最大宽度和高度(以像素为单位)。

virtual void SetAnnotationLeaderPadding(double) 设置/获取标量栏和文本注释之间的填充。

虚拟双GetAnnotationLeaderPadding() 设置/获取标量栏和文本注释之间的填充。

virtual void SetDrawAnnotations(vtkTypeBool) 设置/获取是否应呈现文本注释。

virtual vtkTypeBool GetDrawAnnotations() 设置/获取是否应呈现文本注释。

virtual void DrawAnnotationsOn() 设置/获取是否应呈现文本注释。

virtual void DrawAnnotationsOff() 设置/获取是否应呈现文本注释。

virtual void SetDrawNanAnnotation(vtkTypeBool) 设置/获取是否应呈现NaN注释。

virtual vtkTypeBool GetDrawNanAnnotation() 设置/获取是否应呈现NaN注释。

virtual void DrawNanAnnotationOn() 设置/获取是否应呈现NaN注释。

virtual void DrawNanAnnotationOff() 设置/获取是否应呈现NaN注释。

virtual void SetDrawBelowRangeSwatch(bool) 设置/获取是否应渲染下面的范围样本。

virtual bool GetDrawBelowRangeSwatch() 设置/获取是否应渲染下面的范围样本。

virtual void DrawBelowRangeSwatchOn() 设置/获取是否应渲染下面的范围样本。

virtual void DrawBelowRangeSwatchOff() 设置/获取是否应渲染下面的范围样本。

virtual void SetBelowRangeAnnotation(const char *) 设置/获取“低于范围”值的注释文本。

virtual char* GetBelowRangeAnnotation() 设置/获取“低于范围”值的注释文本。

virtual void SetDrawAboveRangeSwatch(bool) 设置/获取是否应渲染高于范围的样本。

virtual bool GetDrawAboveRangeSwatch() 设置/获取是否应渲染高于范围的样本。

virtual void DrawAboveRangeSwatchOn() 设置/获取是否应渲染高于范围的样本。

虚拟void DrawAboveRangeSwatchOff() 设置/获取是否应渲染高于范围的样本。

virtual void SetAboveRangeAnnotation(const char *) 设置/获取“Above Range Swatch”值的注释文本。

virtual char* GetAboveRangeAnnotation() 设置/获取“Above Range Swatch”值的注释文本。

virtual void SetFixedAnnotationLeaderLineColor(vtkTypeBool) 设置/获取将注释与值连接的引线应如何着色。

virtual vtkTypeBool GetFixedAnnotationLeaderLineColor() 设置/获取将注释与值连接的引线应如何着色。

virtual void FixedAnnotationLeaderLineColorOn() 设置/获取连接annotati的引导线的方式

virtual vtkTypeBool GetFixedAnnotationLeaderLineColor() 设置/获取将注释与值连接的引线应如何着色。

virtual void FixedAnnotationLeaderLineColorOn() 设置/获取将注释与值连接的引线应如何着色。

virtual void FixedAnnotationLeaderLineColorOff() 设置/获取将注释与值连接的引线应如何着色。

virtual void SetNanAnnotation(const char *) 设置/获取“NaN”值的注释文本。

virtual char* GetNanAnnotation() 设置/获取“NaN”值的注释文本。

virtual void SetAnnotationTextScaling(vtkTypeBool) 设置/获取是否应使用视口缩放注释标签。

virtual vtkTypeBool GetAnnotationTextScaling() 设置/获取是否应使用视口缩放注释标签。

virtual void AnnotationTextScalingOn() 设置/获取是否应使用视口缩放注释标签。

virtual void AnnotationTextScalingOff() 设置/获取是否应使用视口缩放注释标签。

virtual void SetDrawBackground(vtkTypeBool) 设置/获取是否应在标量栏周围绘制背景。

virtual vtkTypeBool GetDrawBackground() 设置/获取是否应在标量栏周围绘制背景。

virtual void DrawBackgroundOn() 设置/获取是否应在标量栏周围绘制背景。

virtual void DrawBackgroundOff() 设置/获取是否应在标量栏周围绘制背景。

virtual void SetDrawFrame(vtkTypeBool) 设置/获取是否应在标量栏周围绘制框架。

virtual vtkTypeBool GetDrawFrame() 设置/获取是否应在标量栏周围绘制框架。

virtual void DrawFrameOn() 设置/获取是否应在标量栏周围绘制框架。

virtual void DrawFrameOff() 设置/获取是否应在标量栏周围绘制框架。

virtual void SetDrawColorBar(vtkTypeBool) 设置/获取是否应绘制颜色条。

virtual vtkTypeBool GetDrawColorBar() 设置/获取是否应绘制颜色条。

virtual void DrawColorBarOn() 设置/获取是否应绘制颜色条。

virtual void DrawColorBarOff() 设置/获取是否应绘制颜色条。

virtual void SetDrawTickLabels(vtkTypeBool) 设置/获取是否应绘制刻度标签。

virtual vtkTypeBool GetDrawTickLabels() 设置/获取是否应绘制刻度标签。

virtual void DrawTickLabelsOn() 设置/获取是否应绘制刻度标签

virtual void DrawTickLabelsOff() 设置/获取是否应绘制刻度标签。

virtual void SetBackgroundProperty(vtkProperty2D * p) 设置/获取背景属性。

virtual vtkProperty2D * GetBackgroundProperty() 设置/获取背景属性。

virtual void SetFrameProperty(vtkProperty2D * p) 设置/获取框架属性。

virtual vtkProperty2D * GetFrameProperty() 设置/获取框架属性。

virtual int GetTextPad() 设置/获取文本框周围的填充量。

virtual void SetTextPad(int) 设置/获取文本框周围的填充量。

virtual int GetVerticalTitleSeparation() 当方向为垂直时,设置/获取标题和条形之间的边距(以像素为单位)。

virtual void SetVerticalTitleSeparation(int) 当方向为垂直时,设置/获取标题和条形之间的边距(以像素为单位)。

virtual double GetBarRatio() 设置/获取相对于窗口小部件框架的颜色条的粗细。

virtual void SetBarRatio(double) 设置/获取相对于窗口小部件框架的颜色条的粗细。

virtual double GetTitleRatio() 设置/获取标题高度与刻度标签高度的比率(仅在“方向”为“水平”时使用)

virtual void SetTitleRatio(double) 设置/获取标题高度与刻度标签高度的比率(仅在“方向”为“水平”时使用)

virtual void SetUnconstrainedFontSize(bool) 设置/获取标题和标签的字体大小是否不受约束。

virtual bool GetUnconstrainedFontSize() 设置/获取标题和标签的字体大小是否不受约束。

virtual void UnconstrainedFontSizeOn() 设置/获取标题和标签的字体大小是否不受约束。

virtual void UnconstrainedFontSizeOff() 设置/获取标题和标签的字体大小是否不受约束。


 

 

 

2 ScalarBar和lookupTable结合使用方法



//可以根据颜色标量值在scalarBar中建立一个颜色查找表
//建立lookupTable
vtkLookupTable *lut = vtkLookupTable::New();
//设置颜色映射的数目
lut->SetNumberOfTableValues(100);
//设置颜色映射的范围
lut->SetTableRange(0,10);
lut->Build();

……
-------------------------------------------------------------------------------------------------------------------




-------------------------------------------------------------------------------------------------------------------

//定义一个颜色标量并把颜色标量转换成颜色
vtkUnsignedCharArray *cellData = vtkUnsignedCharArray::New();
cellData->SetNumberOfComponents(3);

	for (auto it = vtkCells.begin(); it != vtkCells.end(); it++)
	{
		//cout << "id: " << it->first << " " << "d: " << it->second<< endl;
	
		d = it->second;
		//get the rgb value from lut table according to the distance value
		
		lut->GetColor(static_cast(d), rgb);
	
	
		//convert the d value to rgb value 
		for (size_t j = 0; j < 3; j++)
		{
			ucrgb[j] = static_cast(rgb[j] * 255);
		
		}
		cellData->InsertTuple(it->first, ucrgb);


	}
polyData->GetCellData()->SetScalars(cellData);

……

vtkScalarBarActor *scalarBar = vtkScalarBarActor::New();
//scalarBar->SetLookupTable(boneMapper->GetLookupTable());
scalarBar->SetLookupTable(lut);
//设置标题
scalarBar->SetTitle("Distance(mm)");
//设置颜色范围的分段数目
scalarBar->SetNumberOfLabels(6);

……

renderer->AddActor2D(scalarBar);