2

我有一个图像,其中我有用数字标记的对象,例如属于对象 1 的所有像素都具有值 1,依此类推。图像的其余部分为零。

我想以不同的随机颜色和白色背景查看每个对象。

我尝试了几种颜色贴图,如灰色、喷射等,但它们都不符合要求,因为它们按顺序将物体从暗到亮着色。

非常感谢。

4

2 回答 2

5

使用随机颜色制作自己的颜色图是解决此问题的快速方法:

colors = [(1,1,1)] + [(random(),random(),random()) for i in xrange(255)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

第一种颜色是白色,给你白色的背景。

完整代码在行动:

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt
import matplotlib
from random import random

colors = [(1,1,1)] + [(random(),random(),random()) for i in xrange(255)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

im = scipy.misc.imread('blobs.jpg',flatten=1)
blobs, number_of_blobs = ndimage.label(im)

plt.imshow(blobs, cmap=new_map)
plt.imsave('jj2.png',blobs, cmap=new_map)
plt.show()

样本标记,随机颜色输出:

在此处输入图像描述

希望这对你来说是随机的!

于 2012-07-13T18:57:05.187 回答
3

我遇到了同样的问题,但我想使用 HSV 颜色。

这是所需的适应:

请注意,在这种情况下,我知道标签的数量(nlabels)

from matplotlib.colors import LinearSegmentedColormap
import colorsys
import numpy as np

#Create random HSV colors
randHSVcolors = [(np.random.rand(),1,1) for i in xrange(nlabels)]

# Convert HSV list to RGB
randRGBcolors=[]
for HSVcolor in randHSVcolors:
  randRGBcolors.append(colorsys.hsv_to_rgb(HSVcolor[0],HSVcolor[1],HSVcolor[2]))

random_colormap = LinearSegmentedColormap.from_list('new_map', randRGBcolors, N=nlabels)

我没有使用白色作为第一种颜色,但应该与之前的答案相同以实现它。

于 2015-02-25T08:54:10.427 回答