我真的被困在这里了。我正在工作的一个项目,需要我把几个图像合并成一个。我看过几篇文章,描述了如何使用PIL来实现它,但是没有一篇文章回答了这样一个问题:如果你有任意数量的频道,该怎么做。在
本课题是一种图像分割算法。提供给它的数据将是从各种生物样品的x射线显微镜上收集的数据。最终产品是许多灰度图像的集合,每个图像代表一个不同的元素通道。也就是说,样品中存在铁、钾、磷、硅等元素位置的灰度图像。这与将一个RGB图像分成3个单独的一维图像(数组)没有什么不同。在
很容易将这些RGB通道合并到一起,以便
R: (2,3,6... 3)
G: (5,5,7... 4)
B: (1,3,2 ... 2)
变成
RGB: [(2,5,1), (3,5,3), (6,7,2),... (3,4,2)]
但我需要知道当有多于(或少于)三个频道时该怎么做。一些使用显微镜的人收集了几十个元素通道,有些人收集了2到3个元素通道。我可以很简单地构建最后的数据数组,如上面的例子所示,我只是不知道如何实际地将其写入图像。以下是我所掌握内容的简短版本:
def mergeImages(imageList):
allData = []
allSizes = []
mergedData = numpy.zeros((max(allSizes), len(imageList)))
for image in imageList:
data = ImageFileData(image)
allData.append(data.GetImageData())
for data in allData:
allSizes.append(data1.GetImageSize())
try:
for i in range(len(allData)):
for j in range(len(allData[i])):
mergedData[j][i] = allData[i][j]
return True
except:
qt.QMessageBox('Image merge failed.')
return False
其中data
是图像对象,并且'数据.GetImageData()`只返回一个整数强度值的列表(因为每个给定的图像都应该是灰度级的)。在
我已经测试过了,并且mergedData
最终被正确地构建为一个二维数组,每个像素的组件与图像的数量一样多。在
但要使我的算法的实际分割部分工作,我需要传递一个图像文件,而不是原始数据。我确信我可以让它接受原始数据,工作正常,但我不想这样做(因为我也希望合并后的图像是可见的)。在
所以我希望能够将mergedData
写入一个图像文件,来完成各种各样的事情。在
但是,PIL说它不支持用户定义的图像模式,要调用Image.write()
,您必须提供图像模式作为参数(没有一个超过4个通道)。在
所以我不知道,如果这里有人有图像处理的经验那就太棒了。我甚至不确定具有任意数量的像素值的图像是否可以查看。也许我得把颜色映射到每个组件。我不知道。不过,在我开始查看之前,我希望它能够将mergedData
写入图像文件。在
谢谢你
目前没有回答
相关问题 更多 >
编程相关推荐