オブジェクトに番号が付けられている画像があります。たとえば、オブジェクト 1 に属するすべてのピクセルの値は 1 などです。残りの画像はゼロです。
すべてのオブジェクトをさまざまなランダムな色で背景を白にして見たいです。
グレー、ジェットなどのいくつかのカラーマップを試しましたが、オブジェクトを暗いものから明るいものに順番に色付けするため、要件を満たしているものはありません。
どうもありがとう。
オブジェクトに番号が付けられている画像があります。たとえば、オブジェクト 1 に属するすべてのピクセルの値は 1 などです。残りの画像はゼロです。
すべてのオブジェクトをさまざまなランダムな色で背景を白にして見たいです。
グレー、ジェットなどのいくつかのカラーマップを試しましたが、オブジェクトを暗いものから明るいものに順番に色付けするため、要件を満たしているものはありません。
どうもありがとう。
ランダムな色で独自のカラーマップを作成すると、この問題をすばやく解決できます。
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()
ラベルが付けられ、ランダムに色付けされた出力の例:
それがあなたにとってランダムな十分であることを願っています!
この同じ質問に出くわしましたが、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)
最初の色に白を使用していませんが、実装するには前の回答と同じにする必要があります。