Como los objetos de color en una imagen con un color diferente cada uno

Philipp Steiner:

Estoy teniendo siguiente problema: Tengo imágenes en blanco / negro, que tengo para colorear: Cada "blob" blanco en la imagen representa una instancia de un objeto y quiero dar color a cada objeto con un color nuevo, pero para cada imagen Quiero usar el mismo esquema de color:

Por ejemplo:

  • Primera imagen: 3 Objetos -> colores utilizados: rojo, verde, amarillo
  • Segunda imagen: 2 Objetos -> colores utilizados: rojo, verde
  • Tercera imagen: 5 objetos -> colores utilizados: rojo, verde, amarillo, rosa, naranja

He coloreado de un par de imágenes a mano para mostrar lo que el resultado debe ser similar a:

máscara negro / blanco que tiene que tener el mismo color

imagen

2 objetos, 2 colores: verde, amarillo

imagen

4 objects, 4 colors: green, yellow, red, light grey

imagen

To do it automatically i've tried the approach 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()

Problem with that is, that if I run in on my images, the objects get colorized differently depending on how many objects there are in each image:

For example:

  • 1st image: 3 Objects -> used colors: red, green, yellow

  • 2nd image: 2 Objects -> used colors: orange, yellow

  • 3rd image: 5 objects -> used colors: red, orange, green, limegreen, yellow

  • 4th image: 3 objects -> used colors: red, green, yellow

Here are some pictures to visualize the incorrect coloring of the 3rd image:

2 objects, coloured orange and pink

imagen

Another image with 2 objects, coloured orange and pink

imagen

Image with 3 objects, now colors change: orange, yellow and green (what I need: orange, pink and new color

imagen

Diziet Asahi :

Dado que se está generando un mapa de colores al azar, no es de extrañar que los colores no son consistentes.

¿Quieres crear un mapa de colores con los colores de la opción, y pasar ese mapa de colores para cada imagen, independientemente del número de manchas presentes. Tenga en cuenta sin embargo, que por defecto los mapas de color se normalizan a la gama de sus datos. Puesto que el rango de los cambios de datos en función del número de manchas encontradas, es necesario establecer explícitamente el uso de la normalización vmin=y vmax. He aquí una demostración del uso de 4 imágenes diferentes:

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)

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=351787&siteId=1
Recomendado
Clasificación