Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Clustering de imagens

Gostaria de saber como posso utilizar o K-means para agrupar imagens que tenham cores semelhanças. Exemplo: em um mostruário de cores de tintas, quando o cliente escolhe uma cor, recomendar outras semelhantes.

Não encontrei nenhum curso na Alura ensinando clustering para imagens. Qualquer dica é bem vinda.

2 respostas
solução!

Olá, Alessandro, tudo bem?

Neste caso, é interessante primeiro representar as imagens de uma forma que o algoritmo possa entender. Uma maneira comum de fazer isso é utilizando o espaço de cores. Por exemplo, você pode converter a imagem para o espaço de cores RGB e tratar cada pixel como um ponto de dados com três dimensões (R, G, B). Mas destaco que dependendo do tamanho da imagem, pode ser interessante reduzir a resolução para diminuir o número de pontos de dados, facilitando o processamento.

Com os dados prontos, você pode aplicar o algoritmo K-Means para encontrar grupos de cores semelhantes. O número de clusters (K) que você escolher determinará quantas cores principais serão identificadas. Por exemplo, se você escolher K=5, o algoritmo tentará encontrar as 5 cores mais representativas da imagem.

Após identificar as cores principais de uma imagem, você pode comparar essas cores com as de outras imagens para encontrar aquelas que possuem cores semelhantes. Isso pode ser feito calculando a distância entre os centros dos clusters de cores.

Abaixo eu deixo uma sugestão de código utilizando a biblioteca como OpenCV para manipular as imagens e o Scikit-learn para aplicar o K-Means em Python.

import cv2
import numpy as np
from sklearn.cluster import KMeans

# Carregar a imagem
image = cv2.imread('imagem.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Redimensionar a imagem para acelerar o processamento
image = cv2.resize(image, (100, 100))

# Converter a imagem para um array de pixels
pixels = image.reshape(-1, 3)

# Aplicar o K-Means
kmeans = KMeans(n_clusters=5)
kmeans.fit(pixels)

# Obter as cores principais
cores_principais = kmeans.cluster_centers_.astype(int)

No entanto, ressalto que o código acima é apenas uma sugestão, podendo ser necessário realizar alguns ajustes para se adequar ao seu projeto.

Para saber um pouco mais sobre o OpenCV deixo como sugestão a formação Visão Computacional com OpenCV, nela você aprenderá a analisar e tratar dados visuais, como imagens e vídeos.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Muito bom! Obrigado pelas dicas.