Come implementare l'algoritmo k-means su immagini RGB?

1

Voglio applicare l'algoritmo k-means su un set di dati immagine RGB. Non so come procedere. Puoi citare il flusso passo dopo passo per procedere. Conosco le basi di Image Processing & OpenCV.

    
posta yogesh_desai 30.03.2016 - 08:06
fonte

1 risposta

2

È possibile applicare prontamente l'algoritmo k-means al set di dati dell'immagine RGB. Un set di dati immagine non è assolutamente speciale, tranne per il fatto che ogni vettore di dati è tridimensionale (R, G e B) ei valori sono numeri interi confinati nell'intervallo [0, 255].

L'algoritmo standard di k-means ha solo bisogno di calcolare la distanza tra due e la media di diversi punti di dati.

Per ulteriori informazioni sull'algoritmo k-means, vedi ad esempio qui .

Distanza colore RGB ingenuo: se hai due elementi i e j con valori RGB (ri, gi, bi) e (rj, gj, bj), rispettivamente, la distanza d tra un'immagine i punti i e j sono uguali:

d = sqrt ((ri-rj) ^ 2 + (gi-gj) ^ 2 + (bi-bj) ^ 2)

E la media di più punti colori sarebbe quindi la media dei valori RGB separatamente.

Per un'implementazione di questo in OpenCV vedi l'esempio per la quantizzazione del colore su Tutorial OpenCV .

Distanza colore più realistica: Lo spazio colore RGB non è un buon modello per la distanza dei colori, purtroppo (vedi commento eccellente di John Forkosh ). Tuttavia, lo spazio colore CIE-L * ab e alcuni modello di distanza colore associati sembrano essere più adatti.

Passaggio 1: conversione di RGB in CIE-L * ab (RGB dipende dal dispositivo, quindi potrebbe essere necessario trasformarlo prima in alcuni valori RGB assoluti dello spazio colore).

Molto probabilmente la piattaforma che stai utilizzando ha già una conversione da RGB a CIE-L * ab ( Matlab , Java , Python o C ++ utilizzando OpenCV ). Altrimenti dovresti scrivere la tua ( Guida ).

Passaggio 2: calcola la distanza nell'algoritmo k-means.

Delta E * di sembra semplice da calcolare:

(l1, a1, b1) sono i valori L ab dei punti dati 1 e (l2, a2, b2) sono i valori L ab del punto dati 2

d = sqrt ((l1 - l2) ^ 2 + (a1 - a2) ^ 2 + (b1 - b2) ^ 2)

La media di più colori nello spazio ab CIE-L sarebbe di nuovo la media di ogni componente L ab separatamente.

Ma potresti anche voler provare altre distanze e vedere cosa funziona meglio.

Riepilogo: l'algoritmo k-means non ha bisogno di essere modificato tranne la distanza e il calcolo medio. Per una distanza più adatta, si consiglia la conversione in un altro spazio colore (CIE-L * ab) e il calcolo di una distanza in quello spazio colore.

    
risposta data 30.03.2016 - 09:37
fonte

Leggi altre domande sui tag