【问题标题】:How to color objects in an image with different color each如何用不同颜色为图像中的对象着色
【发布时间】:2020-07-02 04:04:10
【问题描述】:

我遇到以下问题: 我有黑白图像,我必须对其进行着色:图像中的每个白色“斑点”都代表一个对象的一个​​实例,我想用新颜色为每个对象着色,但是对于每个图像我想使用相同的颜色方案:

例如:

  • 第一张图片:3 个对象 -> 使用的颜色:红色、绿色、黄色
  • 第二张图片:2 个对象 -> 使用的颜色:红色、绿色
  • 第三张图片:5 个对象 -> 使用的颜色:红色、绿色、黄色、粉色、橙色

我已经手动为几张图片上色以显示结果应该是什么样子:

必须着色的黑白蒙版

2 个对象,2 种颜色:绿色、黄色

4 种物体,4 种颜色:绿色、黄色、红色、浅灰色

为了自动完成,我尝试了here的方法:

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()

问题是,如果我在我的图像上运行,对象的颜色会根据每个图像中有多少对象而不同:

例如:

  • 第一张图片:3 个对象 -> 使用的颜色:红色、绿色、黄色

  • 第二张图片:2 个对象 -> 使用的颜色:橙色、黄色

  • 第三张图片:5 个对象 -> 使用的颜色:红色、橙色、绿色、柠檬绿、黄色

  • 第四张图片:3 个对象 -> 使用的颜色:红色、绿色、黄色

这里有一些图片可以显示第三张图片的错误着色:

2 个对象,橙色和粉红色

另一个包含 2 个对象的图像,颜色为橙色和粉红色

包含 3 个对象的图像,现在颜色发生变化:橙色、黄色和绿色(我需要:橙色、粉红色和新颜色

【问题讨论】:

    标签: python matplotlib colors image-segmentation colormap


    【解决方案1】:

    由于您生成的是随机颜色图,因此颜色不一致也就不足为奇了。

    您想使用您选择的颜色创建一个颜色图,并将该颜色图传递给每个图像,而不管存在的 blob 数量如何。但是请注意,默认情况下,颜色图被标准化为您的数据范围。由于数据范围根据找到的 blob 数量而变化,因此您需要使用vmin=vmax 显式设置规范化。这是使用 4 张不同图片的演示:

    import imageio
    from scipy import ndimage
    
    colors = ['black','red', 'green', 'yellow', 'pink', 'orange']
    vmin = 0
    vmax = len(colors)
    cmap = matplotlib.colors.ListedColormap(colors)
    
    
    fig, axs = plt.subplots(4,1, figsize=(3,3*4))
    for file,ax in zip(['test1.png','test2.png','test3.png','test4.png'], axs):
        im = imageio.imread(file)
        blobs, number_of_blobs = ndimage.label(im)
        ax.imshow(blobs, cmap=cmap, vmin=vmin, vmax=vmax)
    

    【讨论】:

    • 非常感谢!我不明白颜色图会被标准化。现在完美运行:D
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2016-04-03
    • 2018-10-12
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多