如何为pg.HistogramLUTItem和pg.ImageItem设置相同的LUT?

问题描述 投票:2回答:1

我想使用特定的颜色图(LUT)使用pg.ImageItem显示2D数组,并在其附近添加一个pg.HistogramLUTItem进行交互式分析。如果我初始化通过LUT传递的图像,然后将其绘制在窗口中,则一切正常。但是,当我创建pg.HistogramLUTItem并用我的图像对其进行初始化时,图像的颜色图立即变为直方图的颜色图。如何在直方图中设置适当的颜色图?

这是我的最小示例:

import numpy as np
import pyqtgraph as pg

myLUT = np.array([[1.        , 1.        , 1.        ],
                  [0.38401946, 0.48864573, 0.963664  ],
                  [0.28766167, 0.81375253, 0.49518645],
                  [0.71970558, 0.92549998, 0.34362429]]) * 255

win = pg.GraphicsLayoutWidget()
win.show()
p1 = win.addPlot()
img = pg.ImageItem(np.random.rand(100, 100), lut=myLUT)
p1.addItem(img)
hist = pg.HistogramLUTItem()
hist.setImageItem(img)

...,此处图像已更改为直方图的“默认”有效值。

我希望直方图“继承”图像的LUT并自动在颜色栏中采用LookUpTable,但实际上是相反的方式。

如何纠正这种行为?我必须使用myLUT初始化直方图吗?我看不到该怎么做。

python python-3.x lookup-tables pyqtgraph colormap
1个回答
0
投票

我不认为可以做到(但是如果有人可以证明我错了,请让我知道...)

我认为问题是HistogramLUTItem使用GradientEditorItem创建查找表。此类通过对几个设置点(颜色条旁的彩色三角形)进行线性插值来创建LUT。 GradientEditorItem无法处理任意LUT,因此HistogramLUTItem类也不能。

HistogramLUTItem的源代码似乎证实了这一点。例如。正如您已经怀疑的那样,在setImageItem方法中,它将imageItem的LUT设置为渐变编辑器的LUT。 Line 147调用img.setLookupTable(self.getLookupTable),后者依次获取GradientEditorItem的查找表,即self.lut = self.gradient.getLookupTable(n, alpha=alpha)上的line 178

我制作了自己的颜色条类,它可以处理任意查找表:PgColorBar。随时使用它。或者您可以创建一个PyQtGraph问题here

© www.soinside.com 2019 - 2024. All rights reserved.