Numpy 如何仅处理(拉伸)高斯混合信号?

Numpy 如何仅处理(拉伸)高斯混合信号?,numpy,image-processing,scikit-learn,Numpy,Image Processing,Scikit Learn,我有两个高斯的混合物,我用GMM来分离。一旦我预测并知道哪个数据点属于哪个高斯(0-背景,1-信号),我只想处理信号部分。处理可以类似于直方图均衡或剪裁,但仅限于结果为1(信号)。请提供一个例子说明我可能如何做到这一点,因为img是原始图像,pred是来自GMM的预测 img = cv2.imread(path, -1) img_flatten = img.flatten().reshape(img.flatten().shape[0],1) gmm = GaussianMixture(n_c

我有两个高斯的混合物,我用GMM来分离。一旦我预测并知道哪个数据点属于哪个高斯(0-背景,1-信号),我只想处理信号部分。处理可以类似于直方图均衡或剪裁,但仅限于结果为1(信号)。请提供一个例子说明我可能如何做到这一点,因为
img
是原始图像,
pred
是来自GMM的预测

img = cv2.imread(path, -1)
img_flatten = img.flatten().reshape(img.flatten().shape[0],1)

gmm = GaussianMixture(n_components=2, covariance_type='full')
gmm.fit(img_flatten)
pred = gmm.predict(img_flatten)

通过从平面图像中选择预测为
1
的所有部分,可以检索平面图像中的信号:

signal = img_flatten[pred==1]
我不熟悉您想要的处理方法,但对于超过例如0.5的剪裁值,您可以使用:

signal[signal>0.5] = 0.5
最后,您可以重建处理后的图像:

img_flatten[pred==1] = signal
processed_img = img_flatten.reshape(img.shape)
编辑: 我刚刚发现cv2提供了一种直方图均衡化方法,因此您可以使用它来处理信号数据,而不是我上面所写的:

signal = cv2.equalizeHist(signal)

你能演示一下我如何对所选信号(作为图像的一部分)进行直方图均衡化或剪裁吗?我不确定你想要什么,但我添加了几行。我希望这对你有帮助。我一直在寻找类似的东西,但是谢谢你的代码。现在呢?我刚刚发现cv2已经提供了函数
signal=cv2。均衡器hist(signal)
不起作用,因为信号不是整个图像。主要的问题是,如何在处理信号部分后恢复整个图像。另一种方法是处理选定的像素,而不将其与图像分离。如果我有一个函数
stretch(..)
,我想应用于仅为信号(1)的像素,我该怎么做?