El algoritmo de agrupamiento se utiliza para la reducción de dimensionalidad, la aplicación de cuantificación de vectores de KMeans (compresión de imágenes)


✌ Caso de combate: el algoritmo de agrupamiento se utiliza para la reducción de dimensionalidad, la aplicación de cuantificación de vectores de KMeans

1. ✌ Importar bibliotecas relacionadas
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin
from sklearn.datasets import load_sample_image
from sklearn.utils import shuffle
2. ✌ Leer datos
flower=load_sample_image('flower.jpg')

plt.imshow(flower)

Inserte la descripción de la imagen aquí

3. ✌ Procesamiento de datos
w,h,d=flower.shape
flower_array=np.reshape(flower,(w*h,d))
flower_array

Inserte la descripción de la imagen aquí
Los datos de la imagen son datos tridimensionales y los terceros datos tridimensionales son información de píxeles. Conviértalos en datos bidimensionales e introdúzcalos en el modelo.

4. ✌ Cuantización vectorial de KMeans en los datos
image_array_sample=shuffle(flower_array,random_state=0)[:1000]
kms=KMeans(n_clusters=k,random_state=0).fit(image_array_sample)

label=kms.predict(flower_array)

image_kmeans=flower_array.copy()
for i in range(w*h):
    image_kmeans[i]=kms.cluster_centers_[label[i]]

pd.DataFrame(image_kmeans).drop_duplicates().shape

image_kmeans=image_kmeans.reshape(w,h,d)

Shuffle: esta función ordena aleatoriamente los datos de imágenes bidimensionales, similar a shuffle, saca la primera información de 1000 pigmentos, entrena el modelo, determina el centroide y luego usa el centroide conocido para clasificar toda la información de pigmentos de imagen bidimensional, dividido en k Luego reemplace la nueva información de color de la imagen con los pigmentos centroides en estas k categorías, y luego cambie los datos bidimensionales a tridimensionales para convertirse en el formato de imagen.

5. ✌ Cuantización vectorial aleatoria de datos
random_sample=shuffle(flower_array,random_state=0)[:k]
labels_random=pairwise_distances_argmin(random_sample,flower_array,axis=0)

image_random=flower_array.copy()
for i in range(w*h):
    image_random[i]=random_sample[labels_random[i]]
    
image_random=image_random.reshape(w,h,d)

Saque al azar k datos de pigmentos
pairwise_distances_argmin (x, y) y
devuelva la misma estructura que y. En esta estructura, encuentre el índice de la muestra más pequeña de la distancia euclidiana entre cada elemento de y y x de x, similar a la etiqueta anterior

6. ✌ Haga un dibujo y vea el resultado
plt.figure(figsize=(10,10))
plt.axis('off')
plt.title('original')
plt.imshow(flower)

Inserte la descripción de la imagen aquí

plt.figure(figsize=(10,10))
plt.axis('off')
plt.title('KMeans')
plt.imshow(image_kmeans)

Inserte la descripción de la imagen aquí

plt.figure(figsize=(10,10))
plt.axis('off')
plt.title('Random')
plt.imshow(image_random)

Inserte la descripción de la imagen aquí
Se puede ver en la figura anterior que la imagen comprimida por KMeans es similar a la imagen original, porque KMeans agrupa toda la información de color, y la información de color de diferentes tipos se reemplaza por el punto central del tipo, por lo que no hay nada falta en el color, pero el color se
elimina al azar. En su lugar, el color faltará porque la información principal del color se pierde en el proceso de selección aleatoria del color.

Supongo que te gusta

Origin blog.csdn.net/m0_47256162/article/details/113355401
Recomendado
Clasificación